build: upgrade dependencies and build with go 1.21
This commit is contained in:
		
							
								
								
									
										10
									
								
								vendor/github.com/cenkalti/backoff/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/cenkalti/backoff/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,10 +0,0 @@
 | 
			
		||||
language: go
 | 
			
		||||
go:
 | 
			
		||||
  - 1.7
 | 
			
		||||
  - 1.x
 | 
			
		||||
  - tip
 | 
			
		||||
before_install:
 | 
			
		||||
  - go get github.com/mattn/goveralls
 | 
			
		||||
  - go get golang.org/x/tools/cmd/cover
 | 
			
		||||
script:
 | 
			
		||||
  - $HOME/gopath/bin/goveralls -service=travis-ci
 | 
			
		||||
							
								
								
									
										82
									
								
								vendor/github.com/cenkalti/backoff/retry.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										82
									
								
								vendor/github.com/cenkalti/backoff/retry.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,82 +0,0 @@
 | 
			
		||||
package backoff
 | 
			
		||||
 | 
			
		||||
import "time"
 | 
			
		||||
 | 
			
		||||
// An Operation is executing by Retry() or RetryNotify().
 | 
			
		||||
// The operation will be retried using a backoff policy if it returns an error.
 | 
			
		||||
type Operation func() error
 | 
			
		||||
 | 
			
		||||
// Notify is a notify-on-error function. It receives an operation error and
 | 
			
		||||
// backoff delay if the operation failed (with an error).
 | 
			
		||||
//
 | 
			
		||||
// NOTE that if the backoff policy stated to stop retrying,
 | 
			
		||||
// the notify function isn't called.
 | 
			
		||||
type Notify func(error, time.Duration)
 | 
			
		||||
 | 
			
		||||
// Retry the operation o until it does not return error or BackOff stops.
 | 
			
		||||
// o is guaranteed to be run at least once.
 | 
			
		||||
//
 | 
			
		||||
// If o returns a *PermanentError, the operation is not retried, and the
 | 
			
		||||
// wrapped error is returned.
 | 
			
		||||
//
 | 
			
		||||
// Retry sleeps the goroutine for the duration returned by BackOff after a
 | 
			
		||||
// failed operation returns.
 | 
			
		||||
func Retry(o Operation, b BackOff) error { return RetryNotify(o, b, nil) }
 | 
			
		||||
 | 
			
		||||
// RetryNotify calls notify function with the error and wait duration
 | 
			
		||||
// for each failed attempt before sleep.
 | 
			
		||||
func RetryNotify(operation Operation, b BackOff, notify Notify) error {
 | 
			
		||||
	var err error
 | 
			
		||||
	var next time.Duration
 | 
			
		||||
	var t *time.Timer
 | 
			
		||||
 | 
			
		||||
	cb := ensureContext(b)
 | 
			
		||||
 | 
			
		||||
	b.Reset()
 | 
			
		||||
	for {
 | 
			
		||||
		if err = operation(); err == nil {
 | 
			
		||||
			return nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if permanent, ok := err.(*PermanentError); ok {
 | 
			
		||||
			return permanent.Err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if next = cb.NextBackOff(); next == Stop {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if notify != nil {
 | 
			
		||||
			notify(err, next)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if t == nil {
 | 
			
		||||
			t = time.NewTimer(next)
 | 
			
		||||
			defer t.Stop()
 | 
			
		||||
		} else {
 | 
			
		||||
			t.Reset(next)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		select {
 | 
			
		||||
		case <-cb.Context().Done():
 | 
			
		||||
			return err
 | 
			
		||||
		case <-t.C:
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// PermanentError signals that the operation should not be retried.
 | 
			
		||||
type PermanentError struct {
 | 
			
		||||
	Err error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e *PermanentError) Error() string {
 | 
			
		||||
	return e.Err.Error()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Permanent wraps the given err in a *PermanentError.
 | 
			
		||||
func Permanent(err error) *PermanentError {
 | 
			
		||||
	return &PermanentError{
 | 
			
		||||
		Err: err,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -20,3 +20,6 @@ _cgo_export.*
 | 
			
		||||
_testmain.go
 | 
			
		||||
 | 
			
		||||
*.exe
 | 
			
		||||
 | 
			
		||||
# IDEs
 | 
			
		||||
.idea/
 | 
			
		||||
@@ -9,7 +9,9 @@ The retries exponentially increase and stop increasing when a certain threshold
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
See https://godoc.org/github.com/cenkalti/backoff#pkg-examples
 | 
			
		||||
Import path is `github.com/cenkalti/backoff/v4`. Please note the version part at the end.
 | 
			
		||||
 | 
			
		||||
Use https://pkg.go.dev/github.com/cenkalti/backoff/v4 to view the documentation.
 | 
			
		||||
 | 
			
		||||
## Contributing
 | 
			
		||||
 | 
			
		||||
@@ -17,7 +19,7 @@ See https://godoc.org/github.com/cenkalti/backoff#pkg-examples
 | 
			
		||||
* Please don't send a PR without opening an issue and discussing it first.
 | 
			
		||||
* If proposed change is not a common use case, I will probably not accept it.
 | 
			
		||||
 | 
			
		||||
[godoc]: https://godoc.org/github.com/cenkalti/backoff
 | 
			
		||||
[godoc]: https://pkg.go.dev/github.com/cenkalti/backoff/v4
 | 
			
		||||
[godoc image]: https://godoc.org/github.com/cenkalti/backoff?status.png
 | 
			
		||||
[travis]: https://travis-ci.org/cenkalti/backoff
 | 
			
		||||
[travis image]: https://travis-ci.org/cenkalti/backoff.png?branch=master
 | 
			
		||||
@@ -27,4 +29,4 @@ See https://godoc.org/github.com/cenkalti/backoff#pkg-examples
 | 
			
		||||
[google-http-java-client]: https://github.com/google/google-http-java-client/blob/da1aa993e90285ec18579f1553339b00e19b3ab5/google-http-client/src/main/java/com/google/api/client/util/ExponentialBackOff.java
 | 
			
		||||
[exponential backoff wiki]: http://en.wikipedia.org/wiki/Exponential_backoff
 | 
			
		||||
 | 
			
		||||
[advanced example]: https://godoc.org/github.com/cenkalti/backoff#example_
 | 
			
		||||
[advanced example]: https://pkg.go.dev/github.com/cenkalti/backoff/v4?tab=doc#pkg-examples
 | 
			
		||||
@@ -7,7 +7,7 @@ import (
 | 
			
		||||
 | 
			
		||||
// BackOffContext is a backoff policy that stops retrying after the context
 | 
			
		||||
// is canceled.
 | 
			
		||||
type BackOffContext interface {
 | 
			
		||||
type BackOffContext interface { // nolint: golint
 | 
			
		||||
	BackOff
 | 
			
		||||
	Context() context.Context
 | 
			
		||||
}
 | 
			
		||||
@@ -20,7 +20,7 @@ type backOffContext struct {
 | 
			
		||||
// WithContext returns a BackOffContext with context ctx
 | 
			
		||||
//
 | 
			
		||||
// ctx must not be nil
 | 
			
		||||
func WithContext(b BackOff, ctx context.Context) BackOffContext {
 | 
			
		||||
func WithContext(b BackOff, ctx context.Context) BackOffContext { // nolint: golint
 | 
			
		||||
	if ctx == nil {
 | 
			
		||||
		panic("nil context")
 | 
			
		||||
	}
 | 
			
		||||
@@ -38,11 +38,14 @@ func WithContext(b BackOff, ctx context.Context) BackOffContext {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func ensureContext(b BackOff) BackOffContext {
 | 
			
		||||
func getContext(b BackOff) context.Context {
 | 
			
		||||
	if cb, ok := b.(BackOffContext); ok {
 | 
			
		||||
		return cb
 | 
			
		||||
		return cb.Context()
 | 
			
		||||
	}
 | 
			
		||||
	return WithContext(b, context.Background())
 | 
			
		||||
	if tb, ok := b.(*backOffTries); ok {
 | 
			
		||||
		return getContext(tb.delegate)
 | 
			
		||||
	}
 | 
			
		||||
	return context.Background()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (b *backOffContext) Context() context.Context {
 | 
			
		||||
@@ -54,10 +57,6 @@ func (b *backOffContext) NextBackOff() time.Duration {
 | 
			
		||||
	case <-b.ctx.Done():
 | 
			
		||||
		return Stop
 | 
			
		||||
	default:
 | 
			
		||||
		return b.BackOff.NextBackOff()
 | 
			
		||||
	}
 | 
			
		||||
	next := b.BackOff.NextBackOff()
 | 
			
		||||
	if deadline, ok := b.ctx.Deadline(); ok && deadline.Sub(time.Now()) < next {
 | 
			
		||||
		return Stop
 | 
			
		||||
	}
 | 
			
		||||
	return next
 | 
			
		||||
}
 | 
			
		||||
@@ -56,9 +56,10 @@ type ExponentialBackOff struct {
 | 
			
		||||
	RandomizationFactor float64
 | 
			
		||||
	Multiplier          float64
 | 
			
		||||
	MaxInterval         time.Duration
 | 
			
		||||
	// After MaxElapsedTime the ExponentialBackOff stops.
 | 
			
		||||
	// After MaxElapsedTime the ExponentialBackOff returns Stop.
 | 
			
		||||
	// It never stops if MaxElapsedTime == 0.
 | 
			
		||||
	MaxElapsedTime time.Duration
 | 
			
		||||
	Stop           time.Duration
 | 
			
		||||
	Clock          Clock
 | 
			
		||||
 | 
			
		||||
	currentInterval time.Duration
 | 
			
		||||
@@ -87,6 +88,7 @@ func NewExponentialBackOff() *ExponentialBackOff {
 | 
			
		||||
		Multiplier:          DefaultMultiplier,
 | 
			
		||||
		MaxInterval:         DefaultMaxInterval,
 | 
			
		||||
		MaxElapsedTime:      DefaultMaxElapsedTime,
 | 
			
		||||
		Stop:                Stop,
 | 
			
		||||
		Clock:               SystemClock,
 | 
			
		||||
	}
 | 
			
		||||
	b.Reset()
 | 
			
		||||
@@ -103,20 +105,23 @@ func (t systemClock) Now() time.Time {
 | 
			
		||||
var SystemClock = systemClock{}
 | 
			
		||||
 | 
			
		||||
// Reset the interval back to the initial retry interval and restarts the timer.
 | 
			
		||||
// Reset must be called before using b.
 | 
			
		||||
func (b *ExponentialBackOff) Reset() {
 | 
			
		||||
	b.currentInterval = b.InitialInterval
 | 
			
		||||
	b.startTime = b.Clock.Now()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NextBackOff calculates the next backoff interval using the formula:
 | 
			
		||||
// 	Randomized interval = RetryInterval +/- (RandomizationFactor * RetryInterval)
 | 
			
		||||
// 	Randomized interval = RetryInterval * (1 ± RandomizationFactor)
 | 
			
		||||
func (b *ExponentialBackOff) NextBackOff() time.Duration {
 | 
			
		||||
	// Make sure we have not gone over the maximum elapsed time.
 | 
			
		||||
	if b.MaxElapsedTime != 0 && b.GetElapsedTime() > b.MaxElapsedTime {
 | 
			
		||||
		return Stop
 | 
			
		||||
	elapsed := b.GetElapsedTime()
 | 
			
		||||
	next := getRandomValueFromInterval(b.RandomizationFactor, rand.Float64(), b.currentInterval)
 | 
			
		||||
	b.incrementCurrentInterval()
 | 
			
		||||
	if b.MaxElapsedTime != 0 && elapsed+next > b.MaxElapsedTime {
 | 
			
		||||
		return b.Stop
 | 
			
		||||
	}
 | 
			
		||||
	defer b.incrementCurrentInterval()
 | 
			
		||||
	return getRandomValueFromInterval(b.RandomizationFactor, rand.Float64(), b.currentInterval)
 | 
			
		||||
	return next
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetElapsedTime returns the elapsed time since an ExponentialBackOff instance
 | 
			
		||||
@@ -140,8 +145,11 @@ func (b *ExponentialBackOff) incrementCurrentInterval() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Returns a random value from the following interval:
 | 
			
		||||
// 	[randomizationFactor * currentInterval, randomizationFactor * currentInterval].
 | 
			
		||||
// 	[currentInterval - randomizationFactor * currentInterval, currentInterval + randomizationFactor * currentInterval].
 | 
			
		||||
func getRandomValueFromInterval(randomizationFactor, random float64, currentInterval time.Duration) time.Duration {
 | 
			
		||||
	if randomizationFactor == 0 {
 | 
			
		||||
		return currentInterval // make sure no randomness is used when randomizationFactor is 0.
 | 
			
		||||
	}
 | 
			
		||||
	var delta = randomizationFactor * float64(currentInterval)
 | 
			
		||||
	var minInterval = float64(currentInterval) - delta
 | 
			
		||||
	var maxInterval = float64(currentInterval) + delta
 | 
			
		||||
							
								
								
									
										146
									
								
								vendor/github.com/cenkalti/backoff/v4/retry.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								vendor/github.com/cenkalti/backoff/v4/retry.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,146 @@
 | 
			
		||||
package backoff
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// An OperationWithData is executing by RetryWithData() or RetryNotifyWithData().
 | 
			
		||||
// The operation will be retried using a backoff policy if it returns an error.
 | 
			
		||||
type OperationWithData[T any] func() (T, error)
 | 
			
		||||
 | 
			
		||||
// An Operation is executing by Retry() or RetryNotify().
 | 
			
		||||
// The operation will be retried using a backoff policy if it returns an error.
 | 
			
		||||
type Operation func() error
 | 
			
		||||
 | 
			
		||||
func (o Operation) withEmptyData() OperationWithData[struct{}] {
 | 
			
		||||
	return func() (struct{}, error) {
 | 
			
		||||
		return struct{}{}, o()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Notify is a notify-on-error function. It receives an operation error and
 | 
			
		||||
// backoff delay if the operation failed (with an error).
 | 
			
		||||
//
 | 
			
		||||
// NOTE that if the backoff policy stated to stop retrying,
 | 
			
		||||
// the notify function isn't called.
 | 
			
		||||
type Notify func(error, time.Duration)
 | 
			
		||||
 | 
			
		||||
// Retry the operation o until it does not return error or BackOff stops.
 | 
			
		||||
// o is guaranteed to be run at least once.
 | 
			
		||||
//
 | 
			
		||||
// If o returns a *PermanentError, the operation is not retried, and the
 | 
			
		||||
// wrapped error is returned.
 | 
			
		||||
//
 | 
			
		||||
// Retry sleeps the goroutine for the duration returned by BackOff after a
 | 
			
		||||
// failed operation returns.
 | 
			
		||||
func Retry(o Operation, b BackOff) error {
 | 
			
		||||
	return RetryNotify(o, b, nil)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RetryWithData is like Retry but returns data in the response too.
 | 
			
		||||
func RetryWithData[T any](o OperationWithData[T], b BackOff) (T, error) {
 | 
			
		||||
	return RetryNotifyWithData(o, b, nil)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RetryNotify calls notify function with the error and wait duration
 | 
			
		||||
// for each failed attempt before sleep.
 | 
			
		||||
func RetryNotify(operation Operation, b BackOff, notify Notify) error {
 | 
			
		||||
	return RetryNotifyWithTimer(operation, b, notify, nil)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RetryNotifyWithData is like RetryNotify but returns data in the response too.
 | 
			
		||||
func RetryNotifyWithData[T any](operation OperationWithData[T], b BackOff, notify Notify) (T, error) {
 | 
			
		||||
	return doRetryNotify(operation, b, notify, nil)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RetryNotifyWithTimer calls notify function with the error and wait duration using the given Timer
 | 
			
		||||
// for each failed attempt before sleep.
 | 
			
		||||
// A default timer that uses system timer is used when nil is passed.
 | 
			
		||||
func RetryNotifyWithTimer(operation Operation, b BackOff, notify Notify, t Timer) error {
 | 
			
		||||
	_, err := doRetryNotify(operation.withEmptyData(), b, notify, t)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RetryNotifyWithTimerAndData is like RetryNotifyWithTimer but returns data in the response too.
 | 
			
		||||
func RetryNotifyWithTimerAndData[T any](operation OperationWithData[T], b BackOff, notify Notify, t Timer) (T, error) {
 | 
			
		||||
	return doRetryNotify(operation, b, notify, t)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func doRetryNotify[T any](operation OperationWithData[T], b BackOff, notify Notify, t Timer) (T, error) {
 | 
			
		||||
	var (
 | 
			
		||||
		err  error
 | 
			
		||||
		next time.Duration
 | 
			
		||||
		res  T
 | 
			
		||||
	)
 | 
			
		||||
	if t == nil {
 | 
			
		||||
		t = &defaultTimer{}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	defer func() {
 | 
			
		||||
		t.Stop()
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	ctx := getContext(b)
 | 
			
		||||
 | 
			
		||||
	b.Reset()
 | 
			
		||||
	for {
 | 
			
		||||
		res, err = operation()
 | 
			
		||||
		if err == nil {
 | 
			
		||||
			return res, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		var permanent *PermanentError
 | 
			
		||||
		if errors.As(err, &permanent) {
 | 
			
		||||
			return res, permanent.Err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if next = b.NextBackOff(); next == Stop {
 | 
			
		||||
			if cerr := ctx.Err(); cerr != nil {
 | 
			
		||||
				return res, cerr
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return res, err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if notify != nil {
 | 
			
		||||
			notify(err, next)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		t.Start(next)
 | 
			
		||||
 | 
			
		||||
		select {
 | 
			
		||||
		case <-ctx.Done():
 | 
			
		||||
			return res, ctx.Err()
 | 
			
		||||
		case <-t.C():
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// PermanentError signals that the operation should not be retried.
 | 
			
		||||
type PermanentError struct {
 | 
			
		||||
	Err error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e *PermanentError) Error() string {
 | 
			
		||||
	return e.Err.Error()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e *PermanentError) Unwrap() error {
 | 
			
		||||
	return e.Err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e *PermanentError) Is(target error) bool {
 | 
			
		||||
	_, ok := target.(*PermanentError)
 | 
			
		||||
	return ok
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Permanent wraps the given err in a *PermanentError.
 | 
			
		||||
func Permanent(err error) error {
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	return &PermanentError{
 | 
			
		||||
		Err: err,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
package backoff
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
@@ -12,7 +13,9 @@ import (
 | 
			
		||||
type Ticker struct {
 | 
			
		||||
	C        <-chan time.Time
 | 
			
		||||
	c        chan time.Time
 | 
			
		||||
	b        BackOffContext
 | 
			
		||||
	b        BackOff
 | 
			
		||||
	ctx      context.Context
 | 
			
		||||
	timer    Timer
 | 
			
		||||
	stop     chan struct{}
 | 
			
		||||
	stopOnce sync.Once
 | 
			
		||||
}
 | 
			
		||||
@@ -24,12 +27,23 @@ type Ticker struct {
 | 
			
		||||
// provided backoff policy (notably calling NextBackOff or Reset)
 | 
			
		||||
// while the ticker is running.
 | 
			
		||||
func NewTicker(b BackOff) *Ticker {
 | 
			
		||||
	return NewTickerWithTimer(b, &defaultTimer{})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewTickerWithTimer returns a new Ticker with a custom timer.
 | 
			
		||||
// A default timer that uses system timer is used when nil is passed.
 | 
			
		||||
func NewTickerWithTimer(b BackOff, timer Timer) *Ticker {
 | 
			
		||||
	if timer == nil {
 | 
			
		||||
		timer = &defaultTimer{}
 | 
			
		||||
	}
 | 
			
		||||
	c := make(chan time.Time)
 | 
			
		||||
	t := &Ticker{
 | 
			
		||||
		C:    c,
 | 
			
		||||
		c:    c,
 | 
			
		||||
		b:    ensureContext(b),
 | 
			
		||||
		stop: make(chan struct{}),
 | 
			
		||||
		C:     c,
 | 
			
		||||
		c:     c,
 | 
			
		||||
		b:     b,
 | 
			
		||||
		ctx:   getContext(b),
 | 
			
		||||
		timer: timer,
 | 
			
		||||
		stop:  make(chan struct{}),
 | 
			
		||||
	}
 | 
			
		||||
	t.b.Reset()
 | 
			
		||||
	go t.run()
 | 
			
		||||
@@ -59,7 +73,7 @@ func (t *Ticker) run() {
 | 
			
		||||
		case <-t.stop:
 | 
			
		||||
			t.c = nil // Prevent future ticks from being sent to the channel.
 | 
			
		||||
			return
 | 
			
		||||
		case <-t.b.Context().Done():
 | 
			
		||||
		case <-t.ctx.Done():
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -78,5 +92,6 @@ func (t *Ticker) send(tick time.Time) <-chan time.Time {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return time.After(next)
 | 
			
		||||
	t.timer.Start(next)
 | 
			
		||||
	return t.timer.C()
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								vendor/github.com/cenkalti/backoff/v4/timer.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/cenkalti/backoff/v4/timer.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
package backoff
 | 
			
		||||
 | 
			
		||||
import "time"
 | 
			
		||||
 | 
			
		||||
type Timer interface {
 | 
			
		||||
	Start(duration time.Duration)
 | 
			
		||||
	Stop()
 | 
			
		||||
	C() <-chan time.Time
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// defaultTimer implements Timer interface using time.Timer
 | 
			
		||||
type defaultTimer struct {
 | 
			
		||||
	timer *time.Timer
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// C returns the timers channel which receives the current time when the timer fires.
 | 
			
		||||
func (t *defaultTimer) C() <-chan time.Time {
 | 
			
		||||
	return t.timer.C
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Start starts the timer to fire after the given duration
 | 
			
		||||
func (t *defaultTimer) Start(duration time.Duration) {
 | 
			
		||||
	if t.timer == nil {
 | 
			
		||||
		t.timer = time.NewTimer(duration)
 | 
			
		||||
	} else {
 | 
			
		||||
		t.timer.Reset(duration)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Stop is called when the timer is not used anymore and resources may be freed.
 | 
			
		||||
func (t *defaultTimer) Stop() {
 | 
			
		||||
	if t.timer != nil {
 | 
			
		||||
		t.timer.Stop()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -20,6 +20,9 @@ type backOffTries struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (b *backOffTries) NextBackOff() time.Duration {
 | 
			
		||||
	if b.maxTries == 0 {
 | 
			
		||||
		return Stop
 | 
			
		||||
	}
 | 
			
		||||
	if b.maxTries > 0 {
 | 
			
		||||
		if b.maxTries <= b.numTries {
 | 
			
		||||
			return Stop
 | 
			
		||||
		Reference in New Issue
	
	Block a user