12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package utils
- import (
- "time"
- backoff "github.com/cenkalti/backoff/v4"
- )
- 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,
- Stop: backoff.Stop,
- Clock: backoff.SystemClock,
- }
- for _, opt := range o {
- opt(b)
- }
- b.Reset()
- return b
- }
- func NewBackoffTicker(o ...expBackoffOpt) *backoff.Ticker {
- return backoff.NewTicker(newExpBackoff(o...))
- }
|