summaryrefslogtreecommitdiff
path: root/vendor/github.com/minio/minio-go/v7/retry-continous.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/minio/minio-go/v7/retry-continous.go')
-rw-r--r--vendor/github.com/minio/minio-go/v7/retry-continous.go26
1 files changed, 11 insertions, 15 deletions
diff --git a/vendor/github.com/minio/minio-go/v7/retry-continous.go b/vendor/github.com/minio/minio-go/v7/retry-continous.go
index 81fcf16f1..21e9fd455 100644
--- a/vendor/github.com/minio/minio-go/v7/retry-continous.go
+++ b/vendor/github.com/minio/minio-go/v7/retry-continous.go
@@ -17,12 +17,14 @@
package minio
-import "time"
+import (
+ "iter"
+ "math"
+ "time"
+)
// newRetryTimerContinous creates a timer with exponentially increasing delays forever.
-func (c *Client) newRetryTimerContinous(baseSleep, maxSleep time.Duration, jitter float64, doneCh chan struct{}) <-chan int {
- attemptCh := make(chan int)
-
+func (c *Client) newRetryTimerContinous(baseSleep, maxSleep time.Duration, jitter float64) iter.Seq[int] {
// normalize jitter to the range [0, 1.0]
if jitter < NoJitter {
jitter = NoJitter
@@ -44,26 +46,20 @@ func (c *Client) newRetryTimerContinous(baseSleep, maxSleep time.Duration, jitte
if sleep > maxSleep {
sleep = maxSleep
}
- if jitter != NoJitter {
+ if math.Abs(jitter-NoJitter) > 1e-9 {
sleep -= time.Duration(c.random.Float64() * float64(sleep) * jitter)
}
return sleep
}
- go func() {
- defer close(attemptCh)
+ return func(yield func(int) bool) {
var nextBackoff int
for {
- select {
- // Attempts starts.
- case attemptCh <- nextBackoff:
- nextBackoff++
- case <-doneCh:
- // Stop the routine.
+ if !yield(nextBackoff) {
return
}
+ nextBackoff++
time.Sleep(exponentialBackoffWait(nextBackoff))
}
- }()
- return attemptCh
+ }
}