| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package utils
- import (
- "time"
- "github.com/cenkalti/backoff"
- )
- type expBackoffOpt func(e *backoff.ExponentialBackOff)
- func BackoffInitialInterval(i time.Duration) expBackoffOpt {
- return func(e *backoff.ExponentialBackOff) {
- e.InitialInterval = i
- }
- }
- func BackoffRandomizationFactor(i float64) expBackoffOpt {
- return func(e *backoff.ExponentialBackOff) {
- e.RandomizationFactor = i
- }
- }
- func BackoffMultiplier(i float64) expBackoffOpt {
- return func(e *backoff.ExponentialBackOff) {
- e.Multiplier = i
- }
- }
- func BackoffMaxInterval(i time.Duration) expBackoffOpt {
- return func(e *backoff.ExponentialBackOff) {
- e.MaxInterval = i
- }
- }
- func BackoffMaxElapsedTime(i time.Duration) expBackoffOpt {
- return func(e *backoff.ExponentialBackOff) {
- e.MaxElapsedTime = i
- }
- }
- func newExpBackoff(o ...expBackoffOpt) backoff.BackOff {
- b := &backoff.ExponentialBackOff{
- InitialInterval: 5 * time.Second,
- RandomizationFactor: 0.5,
- Multiplier: 2,
- MaxInterval: 2 * time.Minute,
- MaxElapsedTime: 0,
- Clock: backoff.SystemClock,
- }
- for _, opt := range o {
- opt(b)
- }
- b.Reset()
- return b
- }
- func NewBackoffTicker(o ...expBackoffOpt) *backoff.Ticker {
- return backoff.NewTicker(newExpBackoff(o...))
- }
|