github.com/Cloud-Foundations/Dominator@v0.3.4/lib/backoffdelay/exponential.go (about) 1 package backoffdelay 2 3 import ( 4 "time" 5 ) 6 7 func newExponential(minimumDelay, maximumDelay time.Duration, 8 growthRate uint) *Exponential { 9 if minimumDelay <= 0 { 10 minimumDelay = time.Second 11 } 12 if maximumDelay <= minimumDelay { 13 maximumDelay = 10 * minimumDelay 14 } 15 return &Exponential{ 16 growthRate: growthRate, 17 interval: minimumDelay, 18 maximum: maximumDelay, 19 minimum: minimumDelay, 20 sleepFunc: time.Sleep, 21 } 22 } 23 24 func (e *Exponential) reset() { 25 e.interval = e.minimum 26 } 27 28 func (e *Exponential) sleep() { 29 e.sleepFunc(e.interval) 30 e.interval += e.interval >> e.growthRate 31 if e.interval > e.maximum { 32 e.interval = e.maximum 33 } 34 }