mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-26 09:09:36 -05:00
7f8e3192cd
* Allow common redis and leveldb connections Prevents multiple reopening of redis and leveldb connections to the same place by sharing connections. Further allows for more configurable redis connection type using the redisURI and a leveldbURI scheme. Signed-off-by: Andrew Thornton <art27@cantab.net> * add unit-test Signed-off-by: Andrew Thornton <art27@cantab.net> * as per @lunny Signed-off-by: Andrew Thornton <art27@cantab.net> * add test Signed-off-by: Andrew Thornton <art27@cantab.net> * Update modules/cache/cache_redis.go * Update modules/queue/queue_disk.go * Update modules/cache/cache_redis.go * Update modules/cache/cache_redis.go * Update modules/queue/unique_queue_disk.go * Update modules/queue/queue_disk.go * Update modules/queue/unique_queue_disk.go * Update modules/session/redis.go Co-authored-by: techknowlogick <techknowlogick@gitea.io> Co-authored-by: Lauris BH <lauris@nix.lv>
24 lines
513 B
Go
Vendored
24 lines
513 B
Go
Vendored
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)))
|
|
}
|