Methods for random staggering
This commit is contained in:
parent
177a91c3f9
commit
394e322fee
|
@ -2,6 +2,7 @@ package agent
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"math"
|
"math"
|
||||||
|
"math/rand"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -23,3 +24,8 @@ func aeScale(interval time.Duration, n int) time.Duration {
|
||||||
multiplier := math.Ceil(math.Log2(float64(n))-math.Log2(aeScaleThreshold)) + 1.0
|
multiplier := math.Ceil(math.Log2(float64(n))-math.Log2(aeScaleThreshold)) + 1.0
|
||||||
return time.Duration(multiplier) * interval
|
return time.Duration(multiplier) * interval
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns a random stagger interval between 0 and the duration
|
||||||
|
func randomStagger(intv time.Duration) time.Duration {
|
||||||
|
return time.Duration(uint64(rand.Int63()) % uint64(intv))
|
||||||
|
}
|
||||||
|
|
|
@ -20,3 +20,13 @@ func TestAEScale(t *testing.T) {
|
||||||
t.Fatalf("Bad: %v", v)
|
t.Fatalf("Bad: %v", v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRandomStagger(t *testing.T) {
|
||||||
|
intv := time.Minute
|
||||||
|
for i := 0; i < 10; i++ {
|
||||||
|
stagger := randomStagger(intv)
|
||||||
|
if stagger < 0 || stagger >= intv {
|
||||||
|
t.Fatalf("Bad: %v", stagger)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue