set response id in another spot. this is too fragile

This commit is contained in:
Bryan Stitt 2022-09-06 17:56:49 +00:00
parent 041dd5f317
commit 98265424bb

@ -39,7 +39,7 @@ use tokio::sync::{broadcast, watch};
use tokio::task::JoinHandle; use tokio::task::JoinHandle;
use tokio::time::{timeout, Instant}; use tokio::time::{timeout, Instant};
use tokio_stream::wrappers::{BroadcastStream, WatchStream}; use tokio_stream::wrappers::{BroadcastStream, WatchStream};
use tracing::{info, info_span, instrument, trace, warn, Instrument}; use tracing::{debug, info, info_span, instrument, trace, warn, Instrument};
use uuid::Uuid; use uuid::Uuid;
// TODO: make this customizable? // TODO: make this customizable?
@ -303,7 +303,7 @@ impl Web3ProxyApp {
}); });
// TODO: change this to a sized cache // TODO: change this to a sized cache
let response_cache = Cache::new(1_000); let response_cache = Cache::new(10_000);
let user_cache = Cache::new(10_000); let user_cache = Cache::new(10_000);
let app = Self { let app = Self {
@ -527,7 +527,8 @@ impl Web3ProxyApp {
request: JsonRpcRequestEnum, request: JsonRpcRequestEnum,
) -> anyhow::Result<JsonRpcForwardedResponseEnum> { ) -> anyhow::Result<JsonRpcForwardedResponseEnum> {
// TODO: this should probably be trace level // TODO: this should probably be trace level
trace!(?request, "proxy_web3_rpc"); // trace!(?request, "proxy_web3_rpc");
debug!(?request, "proxying request");
// even though we have timeouts on the requests to our backend providers, // even though we have timeouts on the requests to our backend providers,
// we need a timeout for the incoming request so that retries don't run forever // we need a timeout for the incoming request so that retries don't run forever
@ -544,7 +545,8 @@ impl Web3ProxyApp {
}; };
// TODO: this should probably be trace level // TODO: this should probably be trace level
trace!(?response, "Forwarding"); // trace!(?response, "Forwarding");
debug!(?response.ids(), "forwarding response");
Ok(response) Ok(response)
} }
@ -634,6 +636,9 @@ impl Web3ProxyApp {
) -> anyhow::Result<JsonRpcForwardedResponse> { ) -> anyhow::Result<JsonRpcForwardedResponse> {
trace!("Received request: {:?}", request); trace!("Received request: {:?}", request);
// save the id so we can attach it to the response
let id = request.id.clone();
// TODO: if eth_chainId or net_version, serve those without querying the backend // TODO: if eth_chainId or net_version, serve those without querying the backend
// TODO: how much should we retry? probably with a timeout and not with a count like this // TODO: how much should we retry? probably with a timeout and not with a count like this
@ -845,7 +850,7 @@ impl Web3ProxyApp {
// TODO: move this caching outside this match and cache some of the other responses? // TODO: move this caching outside this match and cache some of the other responses?
// TODO: cache the warp::reply to save us serializing every time? // TODO: cache the warp::reply to save us serializing every time?
let response = self let mut response = self
.response_cache .response_cache
.try_get_with(cache_key, async move { .try_get_with(cache_key, async move {
match method { match method {
@ -867,11 +872,14 @@ impl Web3ProxyApp {
.await .await
.unwrap(); .unwrap();
// this is fragile and i no longer like it
response.id = id;
return Ok(response); return Ok(response);
} }
}; };
let response = JsonRpcForwardedResponse::from_value(partial_response, request.id); let response = JsonRpcForwardedResponse::from_value(partial_response, id);
Ok(response) Ok(response)
} }