error instead of panic
This commit is contained in:
parent
e917a11d6c
commit
dd3fc165e3
@ -1363,6 +1363,7 @@ impl Web3ProxyApp {
|
|||||||
"eth_getTransactionReceipt" | "eth_getTransactionByHash" => {
|
"eth_getTransactionReceipt" | "eth_getTransactionByHash" => {
|
||||||
// try to get the transaction without specifying a min_block_height
|
// try to get the transaction without specifying a min_block_height
|
||||||
// TODO: timeout
|
// TODO: timeout
|
||||||
|
// TODO: change this to send serially until we get a success
|
||||||
|
|
||||||
let result = self
|
let result = self
|
||||||
.balanced_rpcs
|
.balanced_rpcs
|
||||||
@ -1699,20 +1700,26 @@ impl Web3ProxyApp {
|
|||||||
|
|
||||||
// this is spawned so that if the client disconnects, the app keeps polling the future with a lock inside the moka cache
|
// this is spawned so that if the client disconnects, the app keeps polling the future with a lock inside the moka cache
|
||||||
// TODO: is this expect actually safe!? could there be a background process that still has the arc?
|
// TODO: is this expect actually safe!? could there be a background process that still has the arc?
|
||||||
let mut x = match tokio::spawn(f).await? {
|
let x = match tokio::spawn(f).await? {
|
||||||
Ok(response_data) => Ok(jsonrpc::ParsedResponse::from_response_data(response_data, Default::default()).into()),
|
Ok(response_data) => Ok(jsonrpc::ParsedResponse::from_response_data(response_data, Default::default()).into()),
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
self.jsonrpc_response_failed_cache_keys.insert(cache_key, ()).await;
|
self.jsonrpc_response_failed_cache_keys.insert(cache_key, ()).await;
|
||||||
|
|
||||||
if let Web3ProxyError::StreamResponse(x) = err.as_ref() {
|
if let Web3ProxyError::StreamResponse(x) = err.as_ref() {
|
||||||
let x = x.lock().take().expect("stream processing should only happen once");
|
if let Some(x) = x.lock().take() {
|
||||||
|
|
||||||
Ok(jsonrpc::SingleResponse::Stream(x))
|
Ok(jsonrpc::SingleResponse::Stream(x))
|
||||||
|
} else {
|
||||||
|
let err: Web3ProxyError = anyhow::anyhow!("stream was already taken. please report this in Discord").into();
|
||||||
|
|
||||||
|
Err(Arc::new(err))
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Err(err)
|
Err(err)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}?;
|
};
|
||||||
|
|
||||||
|
let mut x = x?;
|
||||||
|
|
||||||
// clear the id. theres no point including it in our cached response
|
// clear the id. theres no point including it in our cached response
|
||||||
x.set_id(Default::default());
|
x.set_id(Default::default());
|
||||||
|
Loading…
Reference in New Issue
Block a user