DESCRIPTION

This backoff algorithm calculates the next delay as:

initial_delay * exponent_base ** (attempts-1)

Only the initial_delay is required. exponent_base is 2 by default (binary expoential). For the first failure attempt (attempts = 1) the delay equals the initial delay. Then it is doubled, quadrupled, and so on (using the default exponent base of 2).

It is recommended to add a jitter factor, e.g. 0.25 to add some randomness.

METHODS

new

Usage:

new(%args) -> obj

This function is not exported.

Arguments ('*' denotes required arguments):

consider_actual_delay => bool (default: 0)

Whether to consider actual delay.

If set to true, will take into account the actual delay (timestamp difference). For example, when using the Constant strategy of delay=2, you log failure() again right after the previous failure() (i.e. specify the same timestamp). failure() will then return ~2+2 = 4 seconds. On the other hand, if you waited 2 seconds before calling failure() again (i.e. specify the timestamp that is 2 seconds larger than the previous timestamp), failure() will return 2 seconds. And if you waited 4 seconds or more, failure() will return 0.

delay_on_success => ufloat (default: 0)

Number of seconds to wait after a success.

exponent_base => ufloat (default: 2)

initial_delay* => ufloat

Initial delay for the first attempt after failure, in seconds.

jitter_factor => float

How much to add randomness.

If you set this to a value larger than 0, the actual delay will be between a random number between original_delay * (1-jitter_factor) and original_delay * (1+jitter_factor). Jitters are usually added to avoid so-called "thundering herd" problem.

max_attempts => uint (default: 0)

Maximum number consecutive failures before giving up.

0 means to retry endlessly without ever giving up. 1 means to give up after a single failure (i.e. no retry attempts). 2 means to retry once after a failure. Note that after a success, the number of attempts is reset (as expected). So if max_attempts is 3, and if you fail twice then succeed, then on the next failure the algorithm will retry again for a maximum of 3 times.

As a valued partner and proud supporter of MetaCPAN, StickerYou is
happy to offer a 10% discount on all Custom Stickers,
Business Labels, Roll Labels,
Vinyl Lettering or Custom Decals. StickerYou.com
is your one-stop shop to make your business stick.
Use code METACPAN10 at checkout to apply your discount.