8 releases
0.3.7 | Feb 24, 2024 |
---|---|
0.3.6 | Oct 28, 2023 |
0.3.5 | Aug 22, 2023 |
0.3.4 | May 17, 2023 |
0.1.0 | Mar 5, 2021 |
#4 in #pravega
Used in 5 crates
(4 directly)
29KB
555 lines
Retry
Provides generic retry functions.
lib.rs
:
Retry is a crate for retrying something that can fail with exponential backoff. It is designed to have a declarative interface for ease of use. It can be used as follows:
#[derive(Debug, PartialEq, Eq, Snafu)]
pub enum SnafuError {
#[snafu(display("Retryable error"))]
Retryable,
#[snafu(display("NonRetryable error"))]
Nonretryable,
}
let retry_policy = RetryWithBackoff::default_setting().max_tries(1);
let mut collection = vec![1, 2].into_iter();
let value = retry_sync(retry_policy, || match collection.next() {
Some(n) if n == 2 => RetryResult::Success(n),
Some(_) => RetryResult::Retry(SnafuError::Retryable),
None => RetryResult::Fail(SnafuError::Nonretryable),
}).unwrap();
assert_eq!(value, 2);
The above will retry the code 1 times if it throws Err(Retry::Retry). If it throws a Err(Retry::Err) or returns successfully it will return immediately. The delay following each of the filed attempts would be 1, 10,respectively. If all retries fail, it will return Err(RetryErr) that has error message.
Dependencies
~4–10MB
~106K SLoC