retry

package
v1.25.19 Latest Latest
Warning

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

Go to latest
Published: Sep 21, 2023 License: Apache-2.0 Imports: 16 Imported by: 56

Documentation

Overview

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

Index

Constants

View Source
const (
	// OperationNotAllowed is an umbrella errrfor a lot of errors
	OperationNotAllowed string = "OperationNotAllowed"
	// QuotaExceeded falls under OperationNotAllowed error code but we make it more specific here
	QuotaExceeded string = "QuotaExceeded"
)
View Source
const RateLimited = "rate limited"

RateLimited error string

Variables

View Source
var (

	// StatusCodesForRetry are a defined group of status code for which the client will retry.
	StatusCodesForRetry = []int{
		http.StatusRequestTimeout,
		http.StatusInternalServerError,
		http.StatusBadGateway,
		http.StatusServiceUnavailable,
		http.StatusGatewayTimeout,
	}
)

Functions

func DoExponentialBackoffRetry

func DoExponentialBackoffRetry(backoff *Backoff) autorest.SendDecorator

DoExponentialBackoffRetry represents an autorest.SendDecorator with backoff retry.

func DoFilterOutNonRetriableError added in v1.24.3

func DoFilterOutNonRetriableError(shouldRetry func(rerr *Error) bool) autorest.SendDecorator

DoFilterOutNonRetriableError decorator works with autorest.DoRetryForAttempts

func GetVMSSMetadataByRawError added in v0.7.3

func GetVMSSMetadataByRawError(err *Error) (string, string, error)

GetVMSSMetadataByRawError gets the vmss name by parsing the error message

func HasStatusForbiddenOrIgnoredError

func HasStatusForbiddenOrIgnoredError(err error) bool

HasStatusForbiddenOrIgnoredError return true if the given error code is part of the error message This should only be used when trying to delete resources

func IsErrorRetriable

func IsErrorRetriable(err error) bool

IsErrorRetriable returns true if the error is retriable.

func IsInHTTPStatusCodeSet added in v1.24.3

func IsInHTTPStatusCodeSet(rerr *Error, httpStatusCodes []int) bool

IsInHTTPStatusCodeSet return true when status code falls in the status code list It is used with doBackoffRetry to retry on some HTTPStatusCodes.

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
	// The RetriableHTTPStatusCodes indicates that the HTTPStatusCode should do more retrying.
	RetriableHTTPStatusCodes []int
}

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.

func (*Backoff) WithRetriableHTTPStatusCodes

func (b *Backoff) WithRetriableHTTPStatusCodes(httpStatusCodes []int) *Backoff

WithRetriableHTTPStatusCodes returns a new *Backoff with RetriableHTTPStatusCode 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 NewErrorOrNil added in v1.0.13

func NewErrorOrNil(retriable bool, err error) *Error

NewError creates a new Error. Returns nil if err is nil

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) IsNotFound

func (err *Error) IsNotFound() bool

IsNotFound returns true the if the requested object wasn't found

func (*Error) IsThrottled

func (err *Error) IsThrottled() bool

IsThrottled returns true the if the request is being throttled.

func (*Error) ServiceErrorCode added in v1.0.13

func (err *Error) ServiceErrorCode() string

ServiceErrorCode returns the code associated with the autorest.ServiceError body

func (*Error) ServiceErrorMessage added in v1.0.13

func (err *Error) ServiceErrorMessage() string

ServiceErrorMessage returns the message associated with the autorest.ServiceError body

type ServiceRawError added in v1.0.13

type ServiceRawError struct {
	ServiceError *azure.ServiceError `json:"error,omitempty"`
}

ServiceRawError wraps the RawError field satisfying autorest.ServiceError

Jump to

Keyboard shortcuts

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