/retry

Retrier operations with different strategies

Primary LanguageGoApache License 2.0Apache-2.0

Retry operation with different strategies

Retry operations with constant, delays and exponential backoff strategies.

GoDev Go Report Card

Installation

go get github.com/gotidy/retry

Required at least 1.18 version of Go compiler.

Example

Custom delays

delays := retry.Delays[1*time.Second, 2*time.Second, 4*time.Second]
result, err := retry.DoR(ctx, delays, func(ctx context.Context) (int, error) {
    return 0, errors.New("")
})

Exponential

err := retry.Do(ctx, retry.Exponential(time.Second, 1.5, 0.5), func(ctx context.Context) (int, error) {
    return 0, errors.New("")
})
result, err := retry.DoR(ctx, retry.TruncatedExponential(time.Second, 1.5, 0, 10*time.Second), func(ctx context.Context) (int, error) {
    return 0, errors.New("")
})

There are also other strategies such as Constant, Zero.

Permanent error

If need to prevent retrying wrap error with `Permanent``.

result, err := retry.DoR(ctx, retry.Constant(time.Second), func(ctx context.Context) (int, error) {
    result, err := DoSomething()
    switch {
    case errors.Is(err, ErrInvalidArguments)  
        return retry.Permanent(err) // Prevent retrying.  
    default:
        return err
    }
    return result, nil
})

More

Documentation

godev

License

Apache 2.0