Crate backoff[−][src]
ExponentialBackoff is a backoff implementation that increases the backoff
period for each retry attempt using a randomization function that grows exponentially.
next_backoff is calculated using the following formula:
randomized interval = retry_interval * (random value in range [1 - randomization_factor, 1 + randomization_factor])
In other words next_backoff will range between the randomization factor
percentage below and above the retry interval.
For example, given the following parameters:
retry_interval = 2 randomization_factor = 0.5 multiplier = 2
the actual backoff period used in the next retry attempt will range between 1 and 3 seconds, multiplied by the exponential, that is, between 2 and 6 seconds.
Note: max_interval caps the retry_interval and not the randomized interval.
If the time elapsed since an ExponentialBackoff instance is created goes past the
max_elapsed_time, then the method next_backoff starts returning None.
The elapsed time can be reset by calling reset.
Example: Given the following default arguments, for 10 tries the sequence will be,
and assuming we go over the max_elapsed_time on the 10th try:
| Request # | retry_interval (seconds) | Randomized Interval (seconds) |
|---|---|---|
| 1 | 0.5 | [0.25, 0.75] |
| 2 | 0.75 | [0.375, 1.125] |
| 3 | 1.125 | [0.562, 1.687] |
| 4 | 1.687 | [0.8435, 2.53] |
| 5 | 2.53 | [1.265, 3.795] |
| 6 | 3.795 | [1.897, 5.692] |
| 7 | 5.692 | [2.846, 8.538] |
| 8 | 8.538 | [4.269, 12.807] |
| 9 | 12.807 | [6.403, 19.210] |
| 10 | 19.210 | None |
Modules
| backoff | |
| default | Constants for the exponential backoff policy. |
| exponential | |
| future |
Structs
| SystemClock |
|
Enums
| Error | Error is the error value in an operation’s result. |
Traits
| Clock | Clock returns the current time. |
| Notify | Notify is called in |
| Operation | Operation is an operation that can be retried if it fails. |
Type Definitions
| ExponentialBackoff | Exponential backoff policy with system’s clock. |