Skip to content

Exponential backoff generator with jitter.

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

yoshuawuyts/exponential-backoff

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

exponential-backoff

crates.io version build status downloads docs.rs docs

Exponential backoff generator. Serves as a building block to implement custom retry functions.

Why?

When an network requests times out, often the best way to solve it is to try again. But trying again straight away might at best cause some network overhead, and at worst a full fledged DDOS. So we have to be responsible about it.

A good explanation of retry strategies can be found on the Stripe blog.

Usage

Here we try and read a file from disk, and try again if it fails. A more realistic scenario would probably to perform an HTTP request, but the approach should be similar.

use exponential_backoff::Backoff;
use std::{fs, thread, time::Duration};

let retries = 8;
let min = Duration::from_millis(100);
let max = Duration::from_secs(10);
let backoff = Backoff::new(retries, min, max);

for duration in &backoff {
    match fs::read_to_string("README.md") {
        Ok(string) => return Ok(string),
        Err(err) => match duration {
            Some(duration) => thread::sleep(duration),
            None => return err,
        }
    }
}

Installation

$ cargo add exponential-backoff

See Also

Further Reading

License

MIT OR Apache-2.0

About

Exponential backoff generator with jitter.

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages