retry

package
v0.18.0-alpha.2 Latest Latest
Warning

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

Go to latest
Published: Jan 21, 2020 License: Apache-2.0 Imports: 11 Imported by: 0

Documentation

Overview

Package retry defines a general library to handle errors and retries for various Azure clients.

Index

Constants

View Source
const (
	// RetryAfterHeaderKey is the retry-after header key in ARM responses.
	RetryAfterHeaderKey = "Retry-After"
)

Variables

This section is empty.

Functions

func DoExponentialBackoffRetry

func DoExponentialBackoffRetry(backoff *Backoff) autorest.SendDecorator

DoExponentialBackoffRetry reprents an autorest.SendDecorator with backoff retry.

func IsErrorRetriable

func IsErrorRetriable(err error) bool

IsErrorRetriable returns true if the error is retriable.

Types

type Backoff

type Backoff struct {
	// The initial duration.
	Duration time.Duration
	// Duration is multiplied by factor each iteration, if factor is not zero
	// and the limits imposed by Steps and Cap have not been reached.
	// Should not be negative.
	// The jitter does not contribute to the updates to the duration parameter.
	Factor float64
	// The sleep at each iteration is the duration plus an additional
	// amount chosen uniformly at random from the interval between
	// zero and `jitter*duration`.
	Jitter float64
	// The remaining number of iterations in which the duration
	// parameter may change (but progress can be stopped earlier by
	// hitting the cap). If not positive, the duration is not
	// changed. Used for exponential backoff in combination with
	// Factor and Cap.
	Steps int
	// A limit on revised values of the duration parameter. If a
	// multiplication by the factor parameter would make the duration
	// exceed the cap then the duration is set to the cap and the
	// steps parameter is set to zero.
	Cap time.Duration
	// The errors indicate that the request shouldn't do more retrying.
	NonRetriableErrors []string
}

Backoff holds parameters applied to a Backoff function.

func NewBackoff

func NewBackoff(duration time.Duration, factor float64, jitter float64, steps int, cap time.Duration) *Backoff

NewBackoff creates a new Backoff.

func (*Backoff) Step

func (b *Backoff) Step() time.Duration

Step (1) returns an amount of time to sleep determined by the original Duration and Jitter and (2) mutates the provided Backoff to update its Steps and Duration.

func (*Backoff) WithNonRetriableErrors

func (b *Backoff) WithNonRetriableErrors(errs []string) *Backoff

WithNonRetriableErrors returns a new *Backoff with NonRetriableErrors assigned.

type Error

type Error struct {
	// Retriable indicates whether the request is retriable.
	Retriable bool
	// HTTPStatusCode indicates the response HTTP status code.
	HTTPStatusCode int
	// RetryAfter indicates the time when the request should retry after throttling.
	// A throttled request is retriable.
	RetryAfter time.Time
	// RetryAfter indicates the raw error from API.
	RawError error
}

Error indicates an error returned by Azure APIs.

func GetError

func GetError(resp *http.Response, err error) *Error

GetError gets a new Error based on resp and error.

func GetRateLimitError

func GetRateLimitError(isWrite bool, opName string) *Error

GetRateLimitError creates a new error for rate limiting.

func GetRetriableError

func GetRetriableError(err error) *Error

GetRetriableError gets new retriable Error.

func GetStatusNotFoundAndForbiddenIgnoredError

func GetStatusNotFoundAndForbiddenIgnoredError(resp *http.Response, err error) *Error

GetStatusNotFoundAndForbiddenIgnoredError gets an error with StatusNotFound and StatusForbidden ignored. It is only used in DELETE operations.

func GetThrottlingError

func GetThrottlingError(operation, reason string, retryAfter time.Time) *Error

GetThrottlingError creates a new error for throttling.

func NewError

func NewError(retriable bool, err error) *Error

NewError creates a new Error.

func (*Error) Error

func (err *Error) Error() error

Error returns the error. Note that Error doesn't implement error interface because (nil *Error) != (nil error).

func (*Error) IsThrottled

func (err *Error) IsThrottled() bool

IsThrottled returns true the if the request is being throttled.

Jump to

Keyboard shortcuts

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