Documentation
¶
Overview ¶
Package retry defines a general library to handle errors and retries for various Azure clients.
Index ¶
- Constants
- Variables
- func DoExponentialBackoffRetry(backoff *Backoff) autorest.SendDecorator
- func HasStatusForbiddenOrIgnoredError(err error) bool
- func IsErrorRetriable(err error) bool
- type Backoff
- type Error
- func GetError(resp *http.Response, err error) *Error
- func GetErrorWithRetriableHTTPStatusCodes(resp *http.Response, err error, retriableHTTPStatusCodes []int) *Error
- func GetRateLimitError(isWrite bool, opName string) *Error
- func GetRetriableError(err error) *Error
- func GetStatusNotFoundAndForbiddenIgnoredError(resp *http.Response, err error) *Error
- func GetThrottlingError(operation, reason string, retryAfter time.Time) *Error
- func NewError(retriable bool, err error) *Error
Constants ¶
const (
// RetryAfterHeaderKey is the retry-after header key in ARM responses.
RetryAfterHeaderKey = "Retry-After"
)
Variables ¶
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 reprents an autorest.SendDecorator with backoff retry.
func HasStatusForbiddenOrIgnoredError ¶
HasStatusForbiddenOrIgnoredError return true if the given error code is part of the error message This should only be used when trying to delete resources
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 ¶
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 ¶
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 ¶
GetError gets a new Error based on resp and error.
func GetErrorWithRetriableHTTPStatusCodes ¶
func GetErrorWithRetriableHTTPStatusCodes(resp *http.Response, err error, retriableHTTPStatusCodes []int) *Error
GetErrorWithRetriableHTTPStatusCodes gets an error with RetriableHTTPStatusCodes. It is used to retry on some HTTPStatusCodes.
func GetRateLimitError ¶
GetRateLimitError creates a new error for rate limiting.
func GetRetriableError ¶
GetRetriableError gets new retriable Error.
func GetStatusNotFoundAndForbiddenIgnoredError ¶
GetStatusNotFoundAndForbiddenIgnoredError gets an error with StatusNotFound and StatusForbidden ignored. It is only used in DELETE operations.
func GetThrottlingError ¶
GetThrottlingError creates a new error for throttling.
func (*Error) Error ¶
Error returns the error. Note that Error doesn't implement error interface because (nil *Error) != (nil error).
func (*Error) IsNotFound ¶
IsNotFound returns true the if the requested object wasn't found
Source Files
¶
- azure_error.go
- azure_retry.go
- doc.go