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.
boundary/internal/db/backoff.go

27 lines
488 B

package db
import (
"math"
"math/rand"
"time"
)
type Backoff interface {
Duration(attemptNumber uint) time.Duration
}
type ConstBackoff struct {
DurationMs time.Duration
}
func (b ConstBackoff) Duration(attempt uint) time.Duration {
return time.Millisecond * time.Duration(b.DurationMs)
}
type ExpBackoff struct{}
func (b ExpBackoff) Duration(attempt uint) time.Duration {
r := rand.Float64()
return time.Millisecond * time.Duration(math.Exp2(float64(attempt))*5*(r+0.5))
}