Documentation ¶
Overview ¶
Package retry provides tooling to retry API calls which are known to be vulnerable to throttling or flakiness due to eventual consistency.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Backoff ¶
type Backoff struct { // Initial time to wait. A Backoff call will change this value. InitialBackoff time.Duration // Maximum time returned. MaxBackoff time.Duration // For a Linear backoff, InitialBackoff will be multiplied by Multiplier // after each call. Multiplier float64 }
Backoff is a self contained backoff time calculator. This struct should be passed around as a copy as it changes its own fields upon any Backoff call. Backoff is not thread safe. For now only a Linear backoff call is implemented and the Exponential call will be implemented when needed.
func (*Backoff) Exponential ¶
Exponential backoff panics: not implemented, yet.
type Config ¶
type Config struct { // The operation will be retried until StartTimeout has elapsed. 0 means // forever. StartTimeout time.Duration // RetryDelay gives the time elapsed after a failure and before we try // again. Returns 2s by default. RetryDelay func() time.Duration // Max number of retries, 0 means infinite Tries int // ShouldRetry tells whether error should be retried. Nil defaults to always // true. ShouldRetry func(error) bool }
Config represents a retry config
func (Config) Run ¶
Run will repeatedly retry the proivided fn within the constraints set in the retry Config. It will retry until one of the following conditions is met:
- The provided context is cancelled.
- The Config.StartTimeout time has passed.
- The function returns without an error.
- The maximum number of tries, Config.Tries is exceeded.
- The function returns with an error that does not satisfy conditions set in the Config.ShouldRetry function.
If the given function (fn) does not return an error, then Run will return nil. Otherwise, Run will return a relevant error.
type RetryExhaustedError ¶
type RetryExhaustedError struct {
Err error
}
func (*RetryExhaustedError) Error ¶
func (err *RetryExhaustedError) Error() string