Documentation ¶
Overview ¶
Package backoff provides stateless methods of calculating durations based on a number of attempts made.
Copyright © 2016 Trevor N. Suarez (Rican7)
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Algorithm ¶
Algorithm defines a function that calculates a time.Duration based on the given retry attempt number.
func BinaryExponential ¶
BinaryExponential creates a Algorithm that multiplies the factor duration by an exponentially increasing factor for each attempt, where the factor is calculated as `2` raised to the attempt number (2^attempt).
Example ¶
algorithm := BinaryExponential(15 * time.Millisecond) for i := uint(1); i <= 5; i++ { duration := algorithm(i) fmt.Printf("#%d attempt: %s\n", i, duration) }
Output: #1 attempt: 30ms #2 attempt: 60ms #3 attempt: 120ms #4 attempt: 240ms #5 attempt: 480ms
func Exponential ¶
Exponential creates a Algorithm that multiplies the factor duration by an exponentially increasing factor for each attempt, where the factor is calculated as the given base raised to the attempt number.
Example ¶
algorithm := Exponential(15*time.Millisecond, 3) for i := uint(1); i <= 5; i++ { duration := algorithm(i) fmt.Printf("#%d attempt: %s\n", i, duration) }
Output: #1 attempt: 45ms #2 attempt: 135ms #3 attempt: 405ms #4 attempt: 1.215s #5 attempt: 3.645s
func Fibonacci ¶
Fibonacci creates a Algorithm that multiplies the factor duration by an increasing factor for each attempt, where the factor is the Nth number in the Fibonacci sequence.
Example ¶
algorithm := Fibonacci(15 * time.Millisecond) for i := uint(1); i <= 5; i++ { duration := algorithm(i) fmt.Printf("#%d attempt: %s\n", i, duration) }
Output: #1 attempt: 15ms #2 attempt: 15ms #3 attempt: 30ms #4 attempt: 45ms #5 attempt: 75ms
func Incremental ¶
Incremental creates a Algorithm that increments the initial duration by the given increment for each attempt.
Example ¶
algorithm := Incremental(15*time.Millisecond, 10*time.Millisecond) for i := uint(1); i <= 5; i++ { duration := algorithm(i) fmt.Printf("#%d attempt: %s\n", i, duration) }
Output: #1 attempt: 25ms #2 attempt: 35ms #3 attempt: 45ms #4 attempt: 55ms #5 attempt: 65ms
func Linear ¶
Linear creates a Algorithm that linearly multiplies the factor duration by the attempt number for each attempt.
Example ¶
algorithm := Linear(15 * time.Millisecond) for i := uint(1); i <= 5; i++ { duration := algorithm(i) fmt.Printf("#%d attempt: %s\n", i, duration) }
Output: #1 attempt: 15ms #2 attempt: 30ms #3 attempt: 45ms #4 attempt: 60ms #5 attempt: 75ms