add 3 tries

This commit is contained in:
Bryan Stitt 2023-06-26 21:08:32 -07:00
parent 54107a390b
commit f68964f63d

View File

@ -1119,8 +1119,7 @@ impl Web3ProxyApp {
.await .await
} }
/// /// proxy request with up to 3 tries.
// TODO: is this a good return type? i think the status code should be one level higher
async fn proxy_request( async fn proxy_request(
self: &Arc<Self>, self: &Arc<Self>,
request: JsonRpcRequest, request: JsonRpcRequest,
@ -1137,20 +1136,38 @@ impl Web3ProxyApp {
let response_id = request.id; let response_id = request.id;
let (code, response_data) = match self let mut tries = 3;
._proxy_request_with_caching( let mut code;
&request.method, let mut response;
request.params, while tries > 0 {
head_block_num, // TODO: make sure this doesn't retry jsonrpc errors
&request_metadata, let response_data;
) (code, response_data) = match self
.await ._proxy_request_with_caching(
{ &request.method,
Ok(response_data) => (StatusCode::OK, response_data), request.params,
Err(err) => err.as_response_parts(), head_block_num,
}; &request_metadata,
)
.await
{
Ok(response_data) => (StatusCode::OK, response_data),
Err(err) => err.as_response_parts(),
};
let response = JsonRpcForwardedResponse::from_response_data(response_data, response_id); response = JsonRpcForwardedResponse::from_response_data(response_data, response_id);
if code == StatusCode::OK {
break;
}
// TODO: emit a stat?
// TODO: only log params in development
warn!(method=%request.method, params=?request.params, ?response, "request failed");
tries -= 1;
}
let response = response.expect("we definitely looped at least once");
// TODO: this serializes twice :/ // TODO: this serializes twice :/
request_metadata.add_response(ResponseOrBytes::Response(&response)); request_metadata.add_response(ResponseOrBytes::Response(&response));