Skip to main content

Retry

Struct Retry 

Source
pub struct Retry<E = BoxError> { /* private fields */ }
Expand description

Retry policy and executor bound to an operation error type.

The generic parameter E is the caller’s operation error type. Cloning a retry policy shares all registered functors through reference-counted rs-function wrappers.

Implementations§

Source§

impl<E> Retry<E>

Source of an effective attempt timeout.

Source

pub fn builder() -> RetryBuilder<E>

Creates a retry builder.

§Returns

A RetryBuilder configured with defaults.

Source

pub fn from_options(options: RetryOptions) -> Result<Self, RetryConfigError>

Creates a retry policy from options.

§Parameters
  • options: Retry options to validate and install.
§Returns

A retry policy using the default listener set.

§Errors

Returns RetryConfigError if the options are invalid.

Source

pub fn options(&self) -> &RetryOptions

Returns the immutable options used by this retry policy.

§Returns

Shared retry options.

Source

pub fn run<T, F>(&self, operation: F) -> Result<T, RetryError<E>>
where F: FnMut() -> Result<T, E>,

Runs a synchronous operation with retry.

§Parameters
  • operation: Operation called once per attempt until it succeeds or the retry flow stops.
§Returns

Ok(T) with the operation value, or RetryError when retrying stops.

§Panics

Propagates operation panics and listener panics unless listener panic isolation is enabled.

§Blocking

Blocks the current thread with std::thread::sleep between attempts when a non-zero retry delay is selected.

§Elapsed Budget

max_operation_elapsed counts only user operation execution time. max_total_elapsed counts monotonic retry-flow time, including operation execution, retry sleep, retry-after sleep, and retry control-path listener time. This synchronous mode cannot interrupt an already-running operation; it checks budgets before attempts and after failed attempts. If attempt_timeout is configured, this method returns RetryErrorReason::UnsupportedOperation because timeout enforcement requires worker-thread or async execution.

Source

pub fn run_in_worker<T, F>(&self, operation: F) -> Result<T, RetryError<E>>
where T: Send + 'static, E: Send + 'static, F: Fn(AttemptCancelToken) -> Result<T, E> + Send + Sync + 'static,

Runs a blocking operation with retry inside worker-thread attempts.

Each attempt runs on a worker thread. Worker panics are captured as AttemptFailure::Panic. Worker-spawn failures are reported as AttemptFailure::Executor. If the effective timeout expires, the retry executor stops waiting and marks the attempt’s AttemptCancelToken as cancelled. It then waits up to RetryOptions::worker_cancel_grace for the worker to exit. Configured attempt-timeout expirations continue according to AttemptTimeoutPolicy only when the worker exits within that grace period; otherwise the retry flow stops with RetryErrorReason::WorkerStillRunning. Elapsed-budget expirations stop with RetryErrorReason::MaxOperationElapsedExceeded or RetryErrorReason::MaxTotalElapsedExceeded.

§Parameters
  • operation: Thread-safe operation called once per attempt. It receives a cooperative cancellation token for that attempt.
§Returns

Ok(T) with the operation value, or RetryError when retrying stops.

§Panics

Does not propagate operation panics. Listener panic behavior follows this retry policy’s listener isolation setting.

§Blocking

Blocks the current thread while waiting for each worker result or timeout and while sleeping between retry attempts.

§Elapsed Budget

max_operation_elapsed counts only user operation execution time. max_total_elapsed counts monotonic retry-flow time. Worker attempts use the shortest of configured attempt timeout, remaining max-operation-elapsed budget, and remaining max-total-elapsed budget as their effective timeout.

Source

pub fn run_blocking_with_timeout<T, F>( &self, operation: F, ) -> Result<T, RetryError<E>>
where T: Send + 'static, E: Send + 'static, F: Fn(AttemptCancelToken) -> Result<T, E> + Send + Sync + 'static,

Runs a blocking operation with retry and per-attempt timeout isolation.

This method is a compatibility alias for Retry::run_in_worker. It also runs attempts in worker threads when no timeout is configured, so worker panics are reported as AttemptFailure::Panic instead of unwinding through the caller. Worker-spawn failures are reported as AttemptFailure::Executor.

§Parameters
  • operation: Thread-safe operation called once per attempt. It receives a cooperative cancellation token for that attempt.
§Returns

Ok(T) with the operation value, or RetryError when retrying stops.

§Panics

Does not propagate operation panics. Listener panic behavior follows this retry policy’s listener isolation setting.

§Blocking

Blocks the current thread while waiting for each worker result or timeout and while sleeping between retry attempts.

§Elapsed Budget

max_operation_elapsed counts only user operation execution time. max_total_elapsed counts monotonic retry-flow time. Worker attempts use the shortest of configured attempt timeout, remaining max-operation-elapsed budget, and remaining max-total-elapsed budget as their effective timeout.

Source

pub async fn run_async<T, F, Fut>( &self, operation: F, ) -> Result<T, RetryError<E>>
where F: FnMut() -> Fut, Fut: Future<Output = Result<T, E>>,

Runs an asynchronous operation with retry.

§Parameters
  • operation: Factory returning a fresh future for each attempt.
§Returns

Ok(T) with the operation value, or RetryError when retrying stops.

§Panics

Propagates operation panics from the current async task. They are not converted to AttemptFailure::Panic because run_async does not create an isolation boundary. Listener panics are propagated unless listener panic isolation is enabled. Tokio may panic if timer APIs are used outside a runtime with a time driver.

§Elapsed Budget

max_operation_elapsed counts only user operation execution time. max_total_elapsed counts monotonic retry-flow time. Async attempts use the shortest of configured attempt timeout, remaining max-operation-elapsed budget, and remaining max-total-elapsed budget as their effective timeout.

Trait Implementations§

Source§

impl<E: Clone> Clone for Retry<E>

Source§

fn clone(&self) -> Retry<E>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<E> Debug for Retry<E>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the retry policy without exposing callbacks.

§Parameters
  • f: Formatter.
§Returns

Formatter result.

Auto Trait Implementations§

§

impl<E> Freeze for Retry<E>

§

impl<E = Box<dyn Error + Sync + Send>> !RefUnwindSafe for Retry<E>

§

impl<E> Send for Retry<E>

§

impl<E> Sync for Retry<E>

§

impl<E> Unpin for Retry<E>

§

impl<E> UnsafeUnpin for Retry<E>

§

impl<E = Box<dyn Error + Sync + Send>> !UnwindSafe for Retry<E>

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, 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, D> IntoConfigDefault<T> for D
where D: IntoValueDefault<T>,

Source§

fn into_config_default(self) -> T

Converts this fallback value into T.
Source§

impl<T> IntoResult<T> for T

Source§

impl<T> IntoValueDefault<T> for T

Source§

fn into_value_default(self) -> T

Converts this argument into the default value.
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, 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.