mirror of https://github.com/status-im/consul.git
Add a helper function DurationMinusBuffer() to calculate an interval
used to schedule a TTL check. e.g. d := lib.DurationMinusBuffer(60 * time.Duration, 10 * time.Second, 16) will return a duration between 46.875s and 50s.
This commit is contained in:
parent
b509c582cd
commit
3a6be9cab0
|
@ -5,6 +5,15 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// DurationMinusBuffer returns a duration, minus a buffer and jitter
|
||||||
|
// subtracted from the duration. This function is used primarily for
|
||||||
|
// servicing Consul TTL Checks in advance of the TTL.
|
||||||
|
func DurationMinusBuffer(intv time.Duration, buffer time.Duration, jitter int64) time.Duration {
|
||||||
|
d := intv - buffer
|
||||||
|
d -= RandomStagger(time.Duration(int64(d) / jitter))
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
// Returns a random stagger interval between 0 and the duration
|
// Returns a random stagger interval between 0 and the duration
|
||||||
func RandomStagger(intv time.Duration) time.Duration {
|
func RandomStagger(intv time.Duration) time.Duration {
|
||||||
return time.Duration(uint64(rand.Int63()) % uint64(intv))
|
return time.Duration(uint64(rand.Int63()) % uint64(intv))
|
||||||
|
|
|
@ -5,6 +5,22 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestDurationMinusBuffer(t *testing.T) {
|
||||||
|
const (
|
||||||
|
buffer = 10 * time.Second
|
||||||
|
jitter = 16
|
||||||
|
)
|
||||||
|
intv := 1 * time.Minute
|
||||||
|
minValue := (intv - buffer) - ((intv - buffer) / jitter)
|
||||||
|
maxValue := intv - buffer
|
||||||
|
for i := 0; i < 10; i++ {
|
||||||
|
d := DurationMinusBuffer(intv, buffer, jitter)
|
||||||
|
if d < minValue || d > maxValue {
|
||||||
|
t.Fatalf("Bad: %v", d)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestRandomStagger(t *testing.T) {
|
func TestRandomStagger(t *testing.T) {
|
||||||
intv := time.Minute
|
intv := time.Minute
|
||||||
for i := 0; i < 10; i++ {
|
for i := 0; i < 10; i++ {
|
||||||
|
|
Loading…
Reference in New Issue