forked from mirror/backoff
Short-circuit the backoff algorithm.
This commit is contained in:
parent
ed03cf77f8
commit
ac9a0aaf07
|
@ -39,6 +39,10 @@ func (b *Backoff) Duration() time.Duration {
|
||||||
// ForAttempt is threadsafe iff non-zero values for Factor, Max, and Min
|
// ForAttempt is threadsafe iff non-zero values for Factor, Max, and Min
|
||||||
// are set before any calls to ForAttempt are made.
|
// are set before any calls to ForAttempt are made.
|
||||||
func (b *Backoff) ForAttempt(attempt float64) time.Duration {
|
func (b *Backoff) ForAttempt(attempt float64) time.Duration {
|
||||||
|
if float64(b.Min) > float64(b.Max) {
|
||||||
|
return b.Max
|
||||||
|
}
|
||||||
|
|
||||||
//Zero-values are nonsensical, so we use
|
//Zero-values are nonsensical, so we use
|
||||||
//them to apply defaults
|
//them to apply defaults
|
||||||
if b.Min == 0 {
|
if b.Min == 0 {
|
||||||
|
@ -50,6 +54,7 @@ func (b *Backoff) ForAttempt(attempt float64) time.Duration {
|
||||||
if b.Factor == 0 {
|
if b.Factor == 0 {
|
||||||
b.Factor = 2
|
b.Factor = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
//calculate this duration
|
//calculate this duration
|
||||||
dur := float64(b.Min) * math.Pow(b.Factor, attempt)
|
dur := float64(b.Min) * math.Pow(b.Factor, attempt)
|
||||||
if b.Jitter == true {
|
if b.Jitter == true {
|
||||||
|
|
|
@ -66,6 +66,16 @@ func Test3(t *testing.T) {
|
||||||
equals(t, b.Duration(), 100*time.Nanosecond)
|
equals(t, b.Duration(), 100*time.Nanosecond)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test4(t *testing.T) {
|
||||||
|
b := &Backoff{
|
||||||
|
Min: 500 * time.Second,
|
||||||
|
Max: 100 * time.Second,
|
||||||
|
Factor: 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
equals(t, b.Duration(), b.Max)
|
||||||
|
}
|
||||||
|
|
||||||
func TestGetAttempt(t *testing.T) {
|
func TestGetAttempt(t *testing.T) {
|
||||||
b := &Backoff{
|
b := &Backoff{
|
||||||
Min: 100 * time.Millisecond,
|
Min: 100 * time.Millisecond,
|
||||||
|
|
Loading…
Reference in New Issue