pub struct Jittered<W> { /* private fields */ }Expand description
Applies jitter to an inner wait strategy’s output.
Created by calling .jitter(max),
.full_jitter(), or
.equal_jitter() on any wait strategy.
Jitter uses a fast PRNG intended for retry backoff behavior, not for
cryptographic use. Cloning a Jittered strategy produces a decorrelated
copy — the clone will generate a different jitter sequence.
§Examples
use relentless::{RetryState, Wait, wait};
use core::time::Duration;
// Additive jitter: base + random(0, max_jitter)
let strategy = wait::fixed(Duration::from_millis(50))
.jitter(Duration::from_millis(10));
let state = RetryState::new(1, None);
let next = strategy.next_wait(&state);
assert!(next >= Duration::from_millis(50));
assert!(next <= Duration::from_millis(60));use relentless::{RetryState, Wait, wait};
use core::time::Duration;
// Full jitter: random(0, base)
let strategy = wait::fixed(Duration::from_millis(100))
.full_jitter();
let state = RetryState::new(1, None);
let next = strategy.next_wait(&state);
assert!(next <= Duration::from_millis(100));use relentless::{RetryState, Wait, wait};
use core::time::Duration;
// Equal jitter: base/2 + random(0, base/2)
let strategy = wait::fixed(Duration::from_millis(100))
.equal_jitter();
let state = RetryState::new(1, None);
let next = strategy.next_wait(&state);
assert!(next >= Duration::from_millis(50));
assert!(next <= Duration::from_millis(100));Implementations§
Source§impl<W> Jittered<W>
impl<W> Jittered<W>
Sourcepub fn with_seed(self, seed: u64) -> Self
pub fn with_seed(self, seed: u64) -> Self
Sets an explicit PRNG seed for reproducible jitter sequences.
Combine with with_nonce to fully pin the PRNG
state for deterministic testing.
Sourcepub fn with_nonce(self, nonce: u64) -> Self
pub fn with_nonce(self, nonce: u64) -> Self
Overrides the instance-decorrelation nonce.
By default, each Jittered instance (including clones) receives a
unique nonce so independent retry loops produce different jitter
sequences. Set an explicit nonce when you need deterministic output,
such as in tests.
Trait Implementations§
Source§impl<W: Wait> Wait for Jittered<W>
impl<W: Wait> Wait for Jittered<W>
Source§fn next_wait(&self, state: &RetryState) -> Duration
fn next_wait(&self, state: &RetryState) -> Duration
Returns the duration to sleep before the next retry attempt.
Source§fn cap(self, max: Duration) -> WaitCapped<Self>where
Self: Sized,
fn cap(self, max: Duration) -> WaitCapped<Self>where
Self: Sized,
Clamps the returned duration to at most
max.Source§fn chain<W2: Wait>(self, other: W2, after: u32) -> WaitChain<Self, W2>where
Self: Sized,
fn chain<W2: Wait>(self, other: W2, after: u32) -> WaitChain<Self, W2>where
Self: Sized,
Uses this strategy for the first
after attempts, then switches to other.Source§fn add<W2: Wait>(self, other: W2) -> WaitCombine<Self, W2>where
Self: Sized,
fn add<W2: Wait>(self, other: W2) -> WaitCombine<Self, W2>where
Self: Sized,
Adds another wait strategy to this one. Read more
Source§fn jitter(self, max_jitter: Duration) -> Jittered<Self>where
Self: Sized,
fn jitter(self, max_jitter: Duration) -> Jittered<Self>where
Self: Sized,
Adds uniformly distributed jitter in
[0, max_jitter].Auto Trait Implementations§
impl<W> !Freeze for Jittered<W>
impl<W> !RefUnwindSafe for Jittered<W>
impl<W> Send for Jittered<W>where
W: Send,
impl<W> !Sync for Jittered<W>
impl<W> Unpin for Jittered<W>where
W: Unpin,
impl<W> UnsafeUnpin for Jittered<W>where
W: UnsafeUnpin,
impl<W> UnwindSafe for Jittered<W>where
W: UnwindSafe,
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
Mutably borrows from an owned value. Read more