gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

tries.go (724B)


      1 package backoff
      2 
      3 import "time"
      4 
      5 /*
      6 WithMaxRetries creates a wrapper around another BackOff, which will
      7 return Stop if NextBackOff() has been called too many times since
      8 the last time Reset() was called
      9 
     10 Note: Implementation is not thread-safe.
     11 */
     12 func WithMaxRetries(b BackOff, max uint64) BackOff {
     13 	return &backOffTries{delegate: b, maxTries: max}
     14 }
     15 
     16 type backOffTries struct {
     17 	delegate BackOff
     18 	maxTries uint64
     19 	numTries uint64
     20 }
     21 
     22 func (b *backOffTries) NextBackOff() time.Duration {
     23 	if b.maxTries == 0 {
     24 		return Stop
     25 	}
     26 	if b.maxTries > 0 {
     27 		if b.maxTries <= b.numTries {
     28 			return Stop
     29 		}
     30 		b.numTries++
     31 	}
     32 	return b.delegate.NextBackOff()
     33 }
     34 
     35 func (b *backOffTries) Reset() {
     36 	b.numTries = 0
     37 	b.delegate.Reset()
     38 }