pub struct SimpleJsonRpcRetryPolicy {
pub min_retries: Option<u32>,
pub max_retries: Option<u32>,
pub initial_backoff: Duration,
pub backoff_coefficient: f64,
pub max_backoff: Duration,
pub backoff_on_transport_errors: bool,
pub retryable_json_rpc_errors: Vec<i64>,
pub retryable_http_errors: Vec<StatusCode>,
pub max_retry_queue_size: u32,
}
Expand description
Defines a retry policy suitable for JsonRpcProviderClient
.
This retry policy distinguishes between 4 types of RPC request failures:
- JSON RPC error (based on error code)
- HTTP error (based on HTTP status)
- Transport error (e.g. connection timeout)
- Serde error (some of these are treated as JSON RPC error above, if an error code can be obtained).
The policy will make up to max_retries
once a JSON RPC request fails.
The minimum number of retries min_retries
can be also specified and applies to any type of error regardless.
Each retry k > 0
will be separated by a delay of initial_backoff * (1 + backoff_coefficient)^(k - 1)
,
namely all the JSON RPC error codes specified in retryable_json_rpc_errors
and all the HTTP errors
specified in retryable_http_errors
.
The total wait time will be (initial_backoff/backoff_coefficient) * ((1 + backoff_coefficient)^max_retries - 1)
.
or max_backoff
, whatever is lower.
Transport and connection errors (such as connection timeouts) are retried without backoff
at a constant delay of initial_backoff
if backoff_on_transport_errors
is not set.
No more additional retries are allowed on new requests, if the maximum number of concurrent
requests being retried has reached max_retry_queue_size
.
Fields§
§min_retries: Option<u32>
Minimum number of retries of any error, regardless the error code.
Default is 0.
max_retries: Option<u32>
Maximum number of retries.
If None
is given, will keep retrying indefinitely.
Default is 12.
initial_backoff: Duration
Initial wait before retries.
NOTE: Transport and connection errors (such as connection timeouts) are retried at
a constant rate (no backoff) with this delay if backoff_on_transport_errors
is not set.
Default is 1 second.
backoff_coefficient: f64
Backoff coefficient by which will be each retry multiplied.
Must be non-negative. If set to 0
, no backoff will be applied and the
requests will be retried at a constant rate.
Default is 0.3
max_backoff: Duration
Maximum backoff value.
Once reached, the requests will be retried at a constant rate with this timeout.
Default is 30 seconds.
backoff_on_transport_errors: bool
Indicates whether to also apply backoff to transport and connection errors (such as connection timeouts).
Default is false.
retryable_json_rpc_errors: Vec<i64>
List of JSON RPC errors that should be retried with backoff
Default is [429, -32005, -32016]
retryable_http_errors: Vec<StatusCode>
List of HTTP errors that should be retried with backoff.
Default is [429, 504, 503]
max_retry_queue_size: u32
Maximum number of different requests that are being retried at the same time.
If any additional request fails after this number is attained, it won’t be retried.
Default is 100
Trait Implementations§
Source§impl Clone for SimpleJsonRpcRetryPolicy
impl Clone for SimpleJsonRpcRetryPolicy
Source§fn clone(&self) -> SimpleJsonRpcRetryPolicy
fn clone(&self) -> SimpleJsonRpcRetryPolicy
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for SimpleJsonRpcRetryPolicy
impl Debug for SimpleJsonRpcRetryPolicy
Source§impl Default for SimpleJsonRpcRetryPolicy
impl Default for SimpleJsonRpcRetryPolicy
Source§fn default() -> Self
fn default() -> Self
Return SimpleJsonRpcRetryPolicy { min_retries: Some(0), max_retries: Some(12), initial_backoff: Duration::from_secs(1), backoff_coefficient: 0.3, max_backoff: Duration::from_secs(30), backoff_on_transport_errors: Default::default(), retryable_json_rpc_errors: vec! [- 32005, - 32016, 429], retryable_http_errors: vec! [http_types :: StatusCode :: TooManyRequests, http_types :: StatusCode :: GatewayTimeout, http_types :: StatusCode :: ServiceUnavailable], max_retry_queue_size: 100 }
Source§impl<'de> Deserialize<'de> for SimpleJsonRpcRetryPolicy
impl<'de> Deserialize<'de> for SimpleJsonRpcRetryPolicy
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for SimpleJsonRpcRetryPolicy
impl PartialEq for SimpleJsonRpcRetryPolicy
Source§impl RetryPolicy<JsonRpcProviderClientError> for SimpleJsonRpcRetryPolicy
impl RetryPolicy<JsonRpcProviderClientError> for SimpleJsonRpcRetryPolicy
Source§fn is_retryable_error(
&self,
err: &JsonRpcProviderClientError,
num_retries: u32,
retry_queue_size: u32,
) -> RetryAction
fn is_retryable_error( &self, err: &JsonRpcProviderClientError, num_retries: u32, retry_queue_size: u32, ) -> RetryAction
Source§impl Serialize for SimpleJsonRpcRetryPolicy
impl Serialize for SimpleJsonRpcRetryPolicy
Source§impl Validate for SimpleJsonRpcRetryPolicy
impl Validate for SimpleJsonRpcRetryPolicy
Source§impl<'v_a> ValidateArgs<'v_a> for SimpleJsonRpcRetryPolicy
impl<'v_a> ValidateArgs<'v_a> for SimpleJsonRpcRetryPolicy
impl StructuralPartialEq for SimpleJsonRpcRetryPolicy
Auto Trait Implementations§
impl Freeze for SimpleJsonRpcRetryPolicy
impl RefUnwindSafe for SimpleJsonRpcRetryPolicy
impl Send for SimpleJsonRpcRetryPolicy
impl Sync for SimpleJsonRpcRetryPolicy
impl Unpin for SimpleJsonRpcRetryPolicy
impl UnwindSafe for SimpleJsonRpcRetryPolicy
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.