Skip to main content

JitterPolicy

Enum JitterPolicy 

Source
pub enum JitterPolicy {
    None,
    Full,
    Equal,
    Decorrelated,
}
Expand description

Policy controlling randomization of retry delays.

Prevents synchronized retries across multiple tasks by adding controlled randomness.

§Trade-offs

  • None: Predictable, but risks thundering herd
  • Full: Maximum randomness, aggressive load spreading
  • Equal: Balanced (recommended for most use cases)
  • Decorrelated: Stateful, prevents retry correlation (requires previous delay)

Variants§

§

None

No jitter: use exact backoff delay.

Use when:

  • Only one task retrying (no herd risk)
  • Predictable timing required
  • Testing/debugging
§

Full

Full jitter: random delay in [0, backoff_delay].

Most aggressive jitter, can significantly reduce delay. Use when maximum load spreading is needed.

§

Equal

Equal jitter: delay/2 + random[0, delay/2].

Balances predictability with randomness (recommended default). Preserves ~75% of the original backoff on average.

§

Decorrelated

Decorrelated jitter: delay = random[base, prev_delay * 3], capped at max.

More sophisticated, considers the previous delay and grows independently. Requires context via apply_decorrelated.

Implementations§

Source§

impl JitterPolicy

Source

pub fn apply(&self, delay: Duration) -> Duration

Applies jitter to the given delay.

§Note

For Decorrelated, this method returns the input unchanged. Use apply_decorrelated instead, as it requires additional context (previous delay, base, max).

Source

pub fn apply_decorrelated( &self, base: Duration, prev: Duration, max: Duration, ) -> Duration

Applies decorrelated jitter with full context.

  • base: minimal delay (usually the initial backoff)
  • prev: previous actual delay
  • max: maximum cap
§Note

If called on a non-Decorrelated policy, falls back to apply(base).

Trait Implementations§

Source§

impl Clone for JitterPolicy

Source§

fn clone(&self) -> JitterPolicy

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 Debug for JitterPolicy

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for JitterPolicy

Source§

fn default() -> Self

Returns JitterPolicy::None as default (backwards compatible).

Source§

impl PartialEq for JitterPolicy

Source§

fn eq(&self, other: &JitterPolicy) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for JitterPolicy

Source§

impl Eq for JitterPolicy

Source§

impl StructuralPartialEq for JitterPolicy

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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. 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> 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.
Source§

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

Source§

fn vzip(self) -> V