From b9a12756b99d7706b23eef012bf483f895d2fa02 Mon Sep 17 00:00:00 2001 From: Bryan Stitt Date: Thu, 19 Jan 2023 21:46:47 -0800 Subject: [PATCH] collect request_metadata.response_from_backup_rpc --- web3_proxy/src/frontend/authorization.rs | 2 ++ web3_proxy/src/rpcs/connections.rs | 32 ++++++++++++++++++------ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/web3_proxy/src/frontend/authorization.rs b/web3_proxy/src/frontend/authorization.rs index c04ba8c2..8c9380da 100644 --- a/web3_proxy/src/frontend/authorization.rs +++ b/web3_proxy/src/frontend/authorization.rs @@ -85,6 +85,7 @@ pub struct RequestMetadata { pub error_response: AtomicBool, pub response_bytes: AtomicU64, pub response_millis: AtomicU64, + pub response_from_backup_rpc: AtomicBool, } impl RequestMetadata { @@ -103,6 +104,7 @@ impl RequestMetadata { error_response: false.into(), response_bytes: 0.into(), response_millis: 0.into(), + response_from_backup_rpc: false.into(), }; Ok(new) diff --git a/web3_proxy/src/rpcs/connections.rs b/web3_proxy/src/rpcs/connections.rs index 9618d92d..4db3c308 100644 --- a/web3_proxy/src/rpcs/connections.rs +++ b/web3_proxy/src/rpcs/connections.rs @@ -723,6 +723,7 @@ impl Web3Connections { // TODO: maximum retries? right now its the total number of servers loop { + // TODO: is self.conns still right now that we split main and backup servers? if skip_rpcs.len() == self.conns.len() { // no servers to try break; @@ -738,14 +739,17 @@ impl Web3Connections { { OpenRequestResult::Handle(active_request_handle) => { // save the rpc in case we get an error and want to retry on another server + // TODO: look at backend_requests instead skip_rpcs.push(active_request_handle.clone_connection()); if let Some(request_metadata) = request_metadata { - // TODO: request_metadata.backend_requests instead of skip_rpcs + let rpc = active_request_handle.clone_connection(); + request_metadata - .backend_requests - .lock() - .push(active_request_handle.clone_connection()); + .response_from_backup_rpc + .store(rpc.backup, Ordering::Release); + + request_metadata.backend_requests.lock().push(rpc); } // TODO: get the log percent from the user data @@ -896,10 +900,24 @@ impl Web3Connections { // TODO: this is not working right. simplify if let Some(request_metadata) = request_metadata { + let mut backup_used = false; + + request_metadata.backend_requests.lock().extend( + active_request_handles.iter().map(|x| { + let rpc = x.clone_connection(); + + if rpc.backup { + // TODO: its possible we serve from a synced connection though. think about this more + backup_used = true; + } + + x.clone_connection() + }), + ); + request_metadata - .backend_requests - .lock() - .extend(active_request_handles.iter().map(|x| x.clone_connection())); + .response_from_backup_rpc + .store(true, Ordering::Release); } return self