Documentation ¶
Overview ¶
Package retrier implements the "retriable" resiliency pattern for Go.
Index ¶
- func ConstantBackoff(n int, amount time.Duration) []time.Duration
- func ExponentialBackoff(n int, initialAmount time.Duration) []time.Duration
- func LimitedExponentialBackoff(n int, initialAmount time.Duration, limitAmount time.Duration) []time.Duration
- type Action
- type BlacklistClassifier
- type Classifier
- type DefaultClassifier
- type Retrier
- type WhitelistClassifier
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ConstantBackoff ¶
ConstantBackoff generates a simple back-off strategy of retrying 'n' times, and waiting 'amount' time after each one.
func ExponentialBackoff ¶
ExponentialBackoff generates a simple back-off strategy of retrying 'n' times, and doubling the amount of time waited after each one.
func LimitedExponentialBackoff ¶ added in v1.2.2
func LimitedExponentialBackoff(n int, initialAmount time.Duration, limitAmount time.Duration) []time.Duration
LimitedExponentialBackoff generates a simple back-off strategy of retrying 'n' times, and doubling the amount of time waited after each one. If back-off reaches `limitAmount` , thereafter back-off will be filled with `limitAmount` .
Types ¶
type Action ¶
type Action int
Action is the type returned by a Classifier to indicate how the Retrier should proceed.
type BlacklistClassifier ¶
type BlacklistClassifier []error
BlacklistClassifier classifies errors based on a blacklist. If the error is nil, it returns Succeed; if the error is in the blacklist, it returns Fail; otherwise, it returns Retry.
func (BlacklistClassifier) Classify ¶
func (list BlacklistClassifier) Classify(err error) Action
Classify implements the Classifier interface.
type Classifier ¶
Classifier is the interface implemented by anything that can classify Errors for a Retrier.
type DefaultClassifier ¶
type DefaultClassifier struct{}
DefaultClassifier classifies errors in the simplest way possible. If the error is nil, it returns Succeed, otherwise it returns Retry.
func (DefaultClassifier) Classify ¶
func (c DefaultClassifier) Classify(err error) Action
Classify implements the Classifier interface.
type Retrier ¶
type Retrier struct {
// contains filtered or unexported fields
}
Retrier implements the "retriable" resiliency pattern, abstracting out the process of retrying a failed action a certain number of times with an optional back-off between each retry.
Example ¶
r := New(ConstantBackoff(3, 100*time.Millisecond), nil) err := r.Run(func() error { // do some work return nil }) if err != nil { // handle the case where the work failed three times }
Output:
func New ¶
func New(backoff []time.Duration, class Classifier) *Retrier
New constructs a Retrier with the given backoff pattern and classifier. The length of the backoff pattern indicates how many times an action will be retried, and the value at each index indicates the amount of time waited before each subsequent retry. The classifier is used to determine which errors should be retried and which should cause the retrier to fail fast. The DefaultClassifier is used if nil is passed.
func (*Retrier) Run ¶
Run executes the given work function by executing RunCtx without context.Context.
func (*Retrier) RunCtx ¶ added in v1.2.0
RunCtx executes the given work function, then classifies its return value based on the classifier used to construct the Retrier. If the result is Succeed or Fail, the return value of the work function is returned to the caller. If the result is Retry, then Run sleeps according to the its backoff policy before retrying. If the total number of retries is exceeded then the return value of the work function is returned to the caller regardless.
type WhitelistClassifier ¶
type WhitelistClassifier []error
WhitelistClassifier classifies errors based on a whitelist. If the error is nil, it returns Succeed; if the error is in the whitelist, it returns Retry; otherwise, it returns Fail.
func (WhitelistClassifier) Classify ¶
func (list WhitelistClassifier) Classify(err error) Action
Classify implements the Classifier interface.