backoff/utilities/jitter.go

25 lines
559 B
Go
Raw Normal View History

2026-02-08 15:20:10 -05:00
package utilities
import (
"math"
"math/rand/v2"
"time"
)
var (
ApplyJitter = DefaultApplyJitter
)
func DefaultApplyJitter(pauseDuration time.Duration, jitter time.Duration) time.Duration {
switch {
case jitter == 0, pauseDuration == 0:
return pauseDuration
case jitter > pauseDuration:
pauseDuration, jitter = jitter, pauseDuration
}
min := pauseDuration.Nanoseconds() - jitter.Nanoseconds()
max := pauseDuration.Nanoseconds() + jitter.Nanoseconds()
rnd := int64(math.Max(float64(rand.Int64N(max-min)+min), 0))
return time.Duration(rnd)
}