30 lines
551 B
Go
30 lines
551 B
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package db
|
|
|
|
import (
|
|
"math"
|
|
"math/rand"
|
|
"time"
|
|
)
|
|
|
|
type Backoff interface {
|
|
Duration(attemptNumber uint) time.Duration
|
|
}
|
|
|
|
type ConstBackoff struct {
|
|
Amount time.Duration
|
|
}
|
|
|
|
func (b ConstBackoff) Duration(attempt uint) time.Duration {
|
|
return time.Millisecond * time.Duration(b.Amount)
|
|
}
|
|
|
|
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))
|
|
}
|