feat: retry infura's header not found (#1706)
This commit is contained in:
parent
37bd21db16
commit
9773a76dd4
|
@ -327,6 +327,9 @@ where
|
|||
|
||||
/// Implements [RetryPolicy] that will retry requests that errored with
|
||||
/// status code 429 i.e. TOO_MANY_REQUESTS
|
||||
///
|
||||
/// Infura often fails with a `"header not found"` rpc error which is apparently linked to load
|
||||
/// balancing, which are retried as well.
|
||||
#[derive(Debug, Default)]
|
||||
pub struct HttpRateLimitRetryPolicy;
|
||||
|
||||
|
@ -336,8 +339,17 @@ impl RetryPolicy<ClientError> for HttpRateLimitRetryPolicy {
|
|||
ClientError::ReqwestError(err) => {
|
||||
err.status() == Some(http::StatusCode::TOO_MANY_REQUESTS)
|
||||
}
|
||||
ClientError::JsonRpcError(JsonRpcError { code, message, data: _ }) => {
|
||||
// alchemy throws it this way
|
||||
ClientError::JsonRpcError(JsonRpcError { code, message: _, data: _ }) => *code == 429,
|
||||
if *code == 429 {
|
||||
return true
|
||||
}
|
||||
// this is commonly thrown by infura and is apparently a load balancer issue, see also <https://github.com/MetaMask/metamask-extension/issues/7234>
|
||||
if message == "header not found" {
|
||||
return true
|
||||
}
|
||||
false
|
||||
}
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue