RollingExponentialBackoffRetryPolicy

Struct RollingExponentialBackoffRetryPolicy 

Source
pub struct RollingExponentialBackoffRetryPolicy<C, L = DefaultDebugRetryLifecycle> { /* private fields */ }
Expand description

A rolling exponential backoff retry policy.

This policy applies an exponential backoff strategy to requests that are classified as needing to be retried, and maintains a memory of how many errors have occurred prior in order to potentially alter the backoff behavior of retried requests after a successful response has been received.

§Rolling backoff behavior (recovery error decrease factor)

As responses are classified, the number of errors seen (any failed request constitutes an error) is tracked internally, which is then used to drive the exponential backoff behavior. When a request is finally successful, there are two options: reset the error count back to zero, or decrease it by some fixed amount.

If the recovery error decrease factor isn’t set at all, then the error count is reset back to zero after any successful response. This means that if our next request fails, the backoff duration would start back at a low value. If the recovery error decrease factor is set, however, then the error count is only decreased by that fixed amount after a successful response, which means that if our next request fails, the calculated backoff duration would still be reasonably close to the last calculated backoff duration.

Essentially, setting a recovery error decrease factor allows the calculated backoff duration to increase/decrease more smoothly between failed requests that occur close together.

§Missing

  • Ability to set an upper bound on retry attempts before giving up.

Implementations§

Source§

impl<C> RollingExponentialBackoffRetryPolicy<C>

Source

pub fn new(classifier: C, backoff: ExponentialBackoff) -> Self

Creates a new RollingExponentialBackoffRetryPolicy with the given classifier and exponential backoff strategy.

On successful responses, the error count will be reset back to zero.

Source§

impl<C, L> RollingExponentialBackoffRetryPolicy<C, L>

Source

pub fn with_recovery_error_decrease_factor(self, factor: Option<u32>) -> Self

Sets the recovery error decrease factor for this policy.

The given value controls how much the error count should be decreased by after a successful response. If the value is None, then the error count will be reset back to zero after a successful response.

Defaults to resetting the error count to zero after a successful response.

Source

pub fn with_retry_lifecycle<L2>( self, retry_lifecycle: L2, ) -> RollingExponentialBackoffRetryPolicy<C, L2>

Sets the retry lifecycle for this policy.

RetryLifecycle allows defining custom hooks that are called at various points within the retry policy, such as when a request is classified as needing to be retried, when it succeeds, and so on. This can be used to add customized and contextual logging to retries.

Source§

impl RollingExponentialBackoffRetryPolicy<StandardHttpClassifier, StandardHttpRetryLifecycle>

Source

pub fn with_backoff(backoff: ExponentialBackoff) -> Self

Creates a new retry policy adapted to HTTP-based clients with the given exponential backoff strategy.

This policy uses the standard HTTP classifier (StandardHttpClassifier) and retry lifecycle (StandardHttpRetryLifecycle).

Trait Implementations§

Source§

impl<C: Clone, L: Clone> Clone for RollingExponentialBackoffRetryPolicy<C, L>

Source§

fn clone(&self) -> RollingExponentialBackoffRetryPolicy<C, L>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<C, L, Req, Res, Error> Policy<Req, Res, Error> for RollingExponentialBackoffRetryPolicy<C, L>
where C: RetryClassifier<Res, Error>, L: RetryLifecycle<Req, Res, Error>, Req: Clone,

Source§

type Future = Sleep

The Future type returned by Policy::retry.
Source§

fn retry( &mut self, request: &mut Req, response: &mut Result<Res, Error>, ) -> Option<Self::Future>

Check the policy if a certain request should be retried. Read more
Source§

fn clone_request(&mut self, req: &Req) -> Option<Req>

Tries to clone a request before being passed to the inner service. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> Track for T

Source§

fn track_allocations(self, token: AllocationGroupToken) -> Tracked<Self>

Instruments this type by attaching the given allocation group token, returning a Tracked wrapper. Read more
Source§

fn in_current_allocation_group(self) -> Tracked<Self>

Instruments this type by attaching the current allocation group, returning a Tracked wrapper. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,