Expand description
This module provides a simple exponential back-off generator with jitter (exponent 2, custom base).
§Example
use std::time::Duration;
use re_backoff::BackoffGenerator;
let mut generator = BackoffGenerator::new(Duration::from_secs(1), Duration::from_secs(8)).expect("valid generator");
let b = generator.gen_next();
assert_eq!(b.base(), Duration::from_secs(1));
assert!(b.jittered() >= Duration::from_secs(1) && b.jittered() <= Duration::from_secs_f64(1.0 + 0.5));
// sleep with:
// b.sleep().await;
let expected_backoffs = [2, 4, 8, 8, 8];
for expected in expected_backoffs {
let b = generator.gen_next();
assert_eq!(b.base(), Duration::from_secs(expected));
assert!(b.jittered() >= Duration::from_secs(expected) && b.jittered() <= Duration::from_secs(expected + expected / 2));
}Structs§
- Backoff
Backoffrepresent an await-able back-off duration.- Backoff
Generator BackoffGeneratoris a generator for exponential back-off durations with jitter. See module-level docs for an example how to use it.