Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
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.
24 lines
513 B
24 lines
513 B
package internal |
|
|
|
import ( |
|
"math/rand" |
|
"time" |
|
) |
|
|
|
// Retry backoff with jitter sleep to prevent overloaded conditions during intervals |
|
// https://www.awsarchitectureblog.com/2015/03/backoff.html |
|
func RetryBackoff(retry int, minBackoff, maxBackoff time.Duration) time.Duration { |
|
if retry < 0 { |
|
retry = 0 |
|
} |
|
|
|
backoff := minBackoff << uint(retry) |
|
if backoff > maxBackoff || backoff < minBackoff { |
|
backoff = maxBackoff |
|
} |
|
|
|
if backoff == 0 { |
|
return 0 |
|
} |
|
return time.Duration(rand.Int63n(int64(backoff))) |
|
}
|
|
|