Skip to main content

Crate re_backoff

Crate re_backoff 

Source
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
Backoff represent an await-able back-off duration.
BackoffGenerator
BackoffGenerator is a generator for exponential back-off durations with jitter. See module-level docs for an example how to use it.