Skip to main content

RetryWithBackoffPolicy

Struct RetryWithBackoffPolicy 

Source
pub struct RetryWithBackoffPolicy<P> {
    pub inner: P,
    pub max_retries: u32,
    pub backoff_base_ms: u64,
    pub backoff_cap_ms: Option<u64>,
    pub jitter_ratio: f64,
}
Expand description

Policy that returns RetryAfterMs with exponential backoff (and optional jitter) for the first max_retries attempts, then Fail. For RateLimited errors with retry_after_ms, uses that value when set.

Fields§

§inner: P§max_retries: u32§backoff_base_ms: u64

Base delay in ms; actual delay = min(cap, backoff_base_ms * 2^attempt) + jitter.

§backoff_cap_ms: Option<u64>

Max delay cap in ms (optional).

§jitter_ratio: f64

Jitter ratio in [0.0, 1.0]; added randomness to avoid thundering herd.

Implementations§

Source§

impl<P: Policy> RetryWithBackoffPolicy<P>

Source

pub fn new(inner: P, max_retries: u32, backoff_ms: u64) -> Self

New with fixed backoff (no exponent, no jitter). Preserves legacy behavior when backoff_base_ms is the only delay.

Source

pub fn with_exponential_backoff( inner: P, max_retries: u32, backoff_base_ms: u64, backoff_cap_ms: Option<u64>, jitter_ratio: f64, ) -> Self

Exponential backoff: base * 2^attempt, capped, plus jitter.

Trait Implementations§

Source§

impl<P: Policy> Policy for RetryWithBackoffPolicy<P>

Source§

fn authorize( &self, run_id: &RunId, action: &Action, ctx: &PolicyCtx, ) -> Result<(), KernelError>

Whether the action is allowed for this run and context.
Source§

fn retry_strategy_attempt( &self, err: &ActionError, action: &Action, attempt: u32, ) -> RetryDecision

Retry strategy with attempt count and structured error. Default uses kind: Permanent => Fail, others may be retried by implementations. Applies only to executor Err; ActionResult::Failure is not retried. Read more
Source§

fn budget(&self) -> BudgetRules

Optional budget; default is no limits.
Source§

fn retry_strategy(&self, err: &dyn Display, _action: &Action) -> RetryDecision

Whether to retry after an error (and optionally after a delay).

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> 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> Same for T

Source§

type Output = T

Should always be Self
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.