Integer division rounding to zero for rate scaling

This fixes an issue in which integer division was scaling down to zero.
This commit is contained in:
Alex Dadgar 2017-10-30 16:46:11 -07:00
parent 921d2e1469
commit 6d0b9f4dac
2 changed files with 10 additions and 1 deletions

View File

@ -5,6 +5,12 @@ import (
"time" "time"
) )
const (
// minRate is the minimum rate at which we allow an action to be performed
// acorss the whole cluster. The value is once a day: 1 / (1 * time.Day)
minRate = 1.0 / 86400
)
// DurationMinusBuffer returns a duration, minus a buffer and jitter // DurationMinusBuffer returns a duration, minus a buffer and jitter
// subtracted from the duration. This function is used primarily for // subtracted from the duration. This function is used primarily for
// servicing Consul TTL Checks in advance of the TTL. // servicing Consul TTL Checks in advance of the TTL.
@ -43,7 +49,6 @@ func RandomStagger(intv time.Duration) time.Duration {
// order to target an aggregate number of actions per second across the whole // order to target an aggregate number of actions per second across the whole
// cluster. // cluster.
func RateScaledInterval(rate float64, min time.Duration, n int) time.Duration { func RateScaledInterval(rate float64, min time.Duration, n int) time.Duration {
const minRate = 1 / 86400 // 1/(1 * time.Day)
if rate <= minRate { if rate <= minRate {
return min return min
} }

View File

@ -158,6 +158,10 @@ func TestRateScaledInterval(t *testing.T) {
if v := RateScaledInterval(rate, min, 10000); v != 50*time.Second { if v := RateScaledInterval(rate, min, 10000); v != 50*time.Second {
t.Fatalf("Bad: %v", v) t.Fatalf("Bad: %v", v)
} }
halfMin := minRate / 2.0
if v := RateScaledInterval(halfMin, min, 100); v != min {
t.Fatalf("Bad: %v", v)
}
if v := RateScaledInterval(0, min, 10000); v != min { if v := RateScaledInterval(0, min, 10000); v != min {
t.Fatalf("Bad: %v", v) t.Fatalf("Bad: %v", v)
} }