From 57f640765a8a0722ec32d1604c78cd0419e3035d Mon Sep 17 00:00:00 2001 From: Bryan Stitt Date: Fri, 7 Jul 2023 14:06:44 -0700 Subject: [PATCH] remove a level of retries --- web3_proxy/src/app/mod.rs | 58 +++++++++++++++------------------------ 1 file changed, 22 insertions(+), 36 deletions(-) diff --git a/web3_proxy/src/app/mod.rs b/web3_proxy/src/app/mod.rs index befc1d98..b8564cae 100644 --- a/web3_proxy/src/app/mod.rs +++ b/web3_proxy/src/app/mod.rs @@ -53,7 +53,7 @@ use std::sync::{atomic, Arc}; use std::time::Duration; use tokio::sync::{broadcast, watch, Semaphore, oneshot}; use tokio::task::JoinHandle; -use tokio::time::{sleep, timeout}; +use tokio::time::{timeout}; use tracing::{error, info, trace, warn, Level}; // TODO: make this customizable? @@ -1128,45 +1128,31 @@ impl Web3ProxyApp { let response_id = request.id; - // TODO: trace log request.params before we send them to _proxy_request_with_caching which might modify them + // TODO: trace/kafka log request.params before we send them to _proxy_request_with_caching which might modify them - // TODO: I think we have sufficient retries elsewhere and this will just slow us down. - let mut tries = 3; - let mut last_code_and_response = None; - while tries > 0 { - let (code, response_data) = match self - ._proxy_request_with_caching( - &request.method, - &mut request.params, - head_block, - Some(2), - &request_metadata, - ) - .await - { - Ok(response_data) => (StatusCode::OK, response_data), - Err(err) => err.as_response_parts(), - }; + let (code, response_data) = match self + ._proxy_request_with_caching( + &request.method, + &mut request.params, + head_block, + Some(2), + &request_metadata, + ) + .await + { + Ok(response_data) => { + request_metadata.error_response.store(false, Ordering::Release); - last_code_and_response = Some((code, response_data)); + (StatusCode::OK, response_data) + }, + Err(err) => { + request_metadata.error_response.store(true, Ordering::Release); - if code == StatusCode::OK { - break; - } + err.as_response_parts() + }, + }; - tries -= 1; - - // TODO: emit a stat? - // TODO: only log params in development - warn!(method=%request.method, params=%request.params, response=?last_code_and_response, "request failed ({} tries remain)", tries); - - // TODO: sleep a randomized amount of time? - sleep(Duration::from_millis(10)).await; - } - - let (code, response) = last_code_and_response.expect("there should always be a response"); - - let response = JsonRpcForwardedResponse::from_response_data(response, response_id); + let response = JsonRpcForwardedResponse::from_response_data(response_data, response_id); // TODO: this serializes twice :/ request_metadata.add_response(ResponseOrBytes::Response(&response));