You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
724 B
38 lines
724 B
package backoff |
|
|
|
import "time" |
|
|
|
/* |
|
WithMaxRetries creates a wrapper around another BackOff, which will |
|
return Stop if NextBackOff() has been called too many times since |
|
the last time Reset() was called |
|
|
|
Note: Implementation is not thread-safe. |
|
*/ |
|
func WithMaxRetries(b BackOff, max uint64) BackOff { |
|
return &backOffTries{delegate: b, maxTries: max} |
|
} |
|
|
|
type backOffTries struct { |
|
delegate BackOff |
|
maxTries uint64 |
|
numTries uint64 |
|
} |
|
|
|
func (b *backOffTries) NextBackOff() time.Duration { |
|
if b.maxTries == 0 { |
|
return Stop |
|
} |
|
if b.maxTries > 0 { |
|
if b.maxTries <= b.numTries { |
|
return Stop |
|
} |
|
b.numTries++ |
|
} |
|
return b.delegate.NextBackOff() |
|
} |
|
|
|
func (b *backOffTries) Reset() { |
|
b.numTries = 0 |
|
b.delegate.Reset() |
|
}
|
|
|