retry

package
v0.5.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 18, 2024 License: MPL-2.0 Imports: 4 Imported by: 31

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

func (lb *Backoff) Exponential() time.Duration

Exponential backoff panics: not implemented, yet.

func (*Backoff) Linear

func (lb *Backoff) Linear() time.Duration

Linear Backoff returns a linearly increasing Duration.

n = n * Multiplier.

the first value of n is InitialBackoff. n is maxed by MaxBackoff.

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

func (cfg Config) Run(ctx context.Context, fn func(context.Context) error) error

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

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL