38 lines
815 B
Go
38 lines
815 B
Go
package schedule
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/benbjohnson/clock"
|
|
"github.com/cenkalti/backoff/v4"
|
|
)
|
|
|
|
const retryStop = backoff.Stop
|
|
|
|
type exponentialBackoffRetryer struct {
|
|
backoff.BackOff
|
|
}
|
|
|
|
func newExponentialBackoffRetryer(
|
|
maxRetries int64,
|
|
initialRetryDelay time.Duration,
|
|
maxRetryDelay time.Duration,
|
|
randomizationFactor float64,
|
|
clock clock.Clock,
|
|
) *exponentialBackoffRetryer {
|
|
b := backoff.NewExponentialBackOff(
|
|
backoff.WithClockProvider(clock),
|
|
backoff.WithMaxInterval(maxRetryDelay),
|
|
backoff.WithInitialInterval(initialRetryDelay),
|
|
backoff.WithRandomizationFactor(randomizationFactor),
|
|
)
|
|
|
|
return &exponentialBackoffRetryer{
|
|
BackOff: backoff.WithMaxRetries(b, uint64(maxRetries)),
|
|
}
|
|
}
|
|
|
|
func (b *exponentialBackoffRetryer) NextAttemptIn() time.Duration {
|
|
return b.NextBackOff()
|
|
}
|