Add jitter to housekeeping interval

This commit is contained in:
Timothy St. Clair 2016-01-15 13:54:26 -06:00
parent b0a5bfaf8c
commit 3256647668

View File

@ -19,6 +19,7 @@ import (
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"math" "math"
"math/rand"
"os/exec" "os/exec"
"path" "path"
"regexp" "regexp"
@ -78,6 +79,17 @@ type containerData struct {
collectorManager collector.CollectorManager collectorManager collector.CollectorManager
} }
// jitter returns a time.Duration between duration and duration + maxFactor * duration,
// to allow clients to avoid converging on periodic behavior. If maxFactor is 0.0, a
// suggested default value will be chosen.
func jitter(duration time.Duration, maxFactor float64) time.Duration {
if maxFactor <= 0.0 {
maxFactor = 1.0
}
wait := duration + time.Duration(rand.Float64()*maxFactor*float64(duration))
return wait
}
func (c *containerData) Start() error { func (c *containerData) Start() error {
go c.housekeeping() go c.housekeeping()
return nil return nil
@ -356,7 +368,7 @@ func (self *containerData) nextHousekeeping(lastHousekeeping time.Time) time.Tim
} }
} }
return lastHousekeeping.Add(self.housekeepingInterval) return lastHousekeeping.Add(jitter(self.housekeepingInterval, 1.0))
} }
// TODO(vmarmol): Implement stats collecting as a custom collector. // TODO(vmarmol): Implement stats collecting as a custom collector.