put timeout around the moka stuff

we went a long time without seeing errors on this, but i just saw some again
This commit is contained in:
Bryan Stitt 2023-09-18 23:08:16 -07:00
parent e6c376ae94
commit 5f85a17b19

@ -53,7 +53,7 @@ use std::time::Duration;
use tokio::select;
use tokio::sync::{broadcast, mpsc, oneshot, watch, Semaphore};
use tokio::task::{yield_now, JoinHandle};
use tokio::time::{sleep, Instant};
use tokio::time::{sleep, timeout, Instant};
use tracing::{error, info, trace, warn, Level};
// TODO: make this customizable?
@ -1743,7 +1743,9 @@ impl Web3ProxyApp {
.jsonrpc_response_cache
.try_get_with::<_, Web3ProxyError>(cache_key.hash(), async {
// TODO: think more about this timeout. we should probably have a `request_expires_at` Duration on the request_metadata
let response_data = self.balanced_rpcs
let proxy_with_timeout= timeout(
Duration::from_secs(300),
self.balanced_rpcs
.try_proxy_connection::<_, Arc<RawValue>>(
method,
params,
@ -1752,8 +1754,10 @@ impl Web3ProxyApp {
from_block_num.as_ref(),
to_block_num.as_ref(),
)
.await;
);
match proxy_with_timeout.await {
Ok(response_data) => {
if !cache_jsonrpc_errors && let Err(err) = response_data {
// if we are not supposed to cache jsonrpc errors,
// then we must not convert Provider errors into a JsonRpcResponseEnum
@ -1775,9 +1779,16 @@ impl Web3ProxyApp {
Ok(response_data)
}
}
}
Err(err) => {
Err(Web3ProxyError::from(err))
}
}
}).await?
} else {
let x = self.balanced_rpcs
let x = timeout(
Duration::from_secs(300),
self.balanced_rpcs
.try_proxy_connection::<_, Arc<RawValue>>(
method,
params,
@ -1786,7 +1797,7 @@ impl Web3ProxyApp {
None,
None,
)
.await?;
).await??;
x.into()
}