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  }