fedimint_core/util/
backoff_util.rs
1use std::time::Duration;
2
3pub use backon::{Backoff, FibonacciBackoff};
4use backon::{BackoffBuilder, FibonacciBuilder};
5
6pub fn background_backoff() -> FibonacciBackoff {
10 custom_backoff(Duration::from_secs(1), Duration::from_secs(60), None)
11}
12
13pub fn aggressive_backoff() -> FibonacciBackoff {
15 custom_backoff(Duration::from_millis(200), Duration::from_secs(5), Some(14))
16}
17
18pub fn aggressive_backoff_long() -> FibonacciBackoff {
19 custom_backoff(Duration::from_millis(200), Duration::from_secs(5), Some(25))
20}
21
22#[cfg(test)]
23pub fn immediate_backoff(max_retries_or: Option<usize>) -> FibonacciBackoff {
24 custom_backoff(Duration::ZERO, Duration::ZERO, max_retries_or)
25}
26
27pub fn custom_backoff(
28 min_delay: Duration,
29 max_delay: Duration,
30 max_retries_or: Option<usize>,
31) -> FibonacciBackoff {
32 FibonacciBuilder::default()
33 .with_jitter()
34 .with_min_delay(min_delay)
35 .with_max_delay(max_delay)
36 .with_max_times(max_retries_or.unwrap_or(usize::MAX))
37 .build()
38}
39
40pub fn fibonacci_max_one_hour() -> FibonacciBackoff {
47 custom_backoff(
55 Duration::from_millis(200),
56 Duration::from_secs(10),
57 Some(360),
58 )
59}
60
61pub fn api_networking_backoff() -> FibonacciBackoff {
62 custom_backoff(Duration::from_millis(250), Duration::from_secs(10), None)
63}