Files
cloudpods/vendor/github.com/ks3sdklib/aws-sdk-go/aws/retry/random_retry.go
2025-09-24 17:20:31 +08:00

40 lines
873 B
Go

package retry
import (
"math/rand"
"time"
)
// RandomRetryRule 随机等待时间重试规则
type RandomRetryRule struct {
minDelay time.Duration // 最小随机等待时间
maxDelay time.Duration // 最大随机等待时间
}
var DefaultRandomRetryRule = NewRandomRetryRule(DefaultRandomMinDelay, DefaultRandomMaxDelay)
func NewRandomRetryRule(minDelay time.Duration, maxDelay time.Duration) RandomRetryRule {
if minDelay < 0 {
minDelay = DefaultRandomMinDelay
}
if maxDelay < 0 {
maxDelay = DefaultRandomMaxDelay
}
if maxDelay < minDelay {
minDelay = DefaultRandomMinDelay
maxDelay = DefaultRandomMaxDelay
}
return RandomRetryRule{
minDelay: minDelay,
maxDelay: maxDelay,
}
}
func (r RandomRetryRule) GetDelay(attempts int) time.Duration {
delay := r.minDelay + time.Duration(rand.Int63n(int64(r.maxDelay-r.minDelay+1)))
return delay
}