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.
29 lines
452 B
29 lines
452 B
package internal |
|
|
|
import ( |
|
"time" |
|
|
|
"github.com/go-redis/redis/v8/internal/rand" |
|
) |
|
|
|
func RetryBackoff(retry int, minBackoff, maxBackoff time.Duration) time.Duration { |
|
if retry < 0 { |
|
panic("not reached") |
|
} |
|
if minBackoff == 0 { |
|
return 0 |
|
} |
|
|
|
d := minBackoff << uint(retry) |
|
if d < minBackoff { |
|
return maxBackoff |
|
} |
|
|
|
d = minBackoff + time.Duration(rand.Int63n(int64(d))) |
|
|
|
if d > maxBackoff || d < minBackoff { |
|
d = maxBackoff |
|
} |
|
|
|
return d |
|
}
|
|
|