Fix stats collector spinning CPU if no stats are collected

Commit fd0e24b718 changed
the stats collection loop to use a `sleep()` instead
of `time.Tick()` in the for-loop.

This change caused a regression in situations where
no stats are being collected, or an error is hit
in the loop (in which case the loop would `continue`,
and the `sleep()` is not hit).

This patch puts the sleep at the start of the loop
to guarantee it's always hit.

This will delay the sampling, which is similar to the
behavior before fd0e24b718.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Sebastiaan van Stijn 2018-03-15 17:56:15 +01:00
parent 3d14173a29
commit 481b8e54b4
No known key found for this signature in database
GPG key ID: 76698F39D527CE8C

View file

@ -91,6 +91,10 @@ func (s *Collector) Run() {
var pairs []publishersPair
for {
// Put sleep at the start so that it will always be hit,
// preventing a tight loop if no stats are collected.
time.Sleep(s.interval)
// it does not make sense in the first iteration,
// but saves allocations in further iterations
pairs = pairs[:0]
@ -141,8 +145,6 @@ func (s *Collector) Run() {
logrus.Errorf("collecting stats for %s: %v", pair.container.ID, err)
}
}
time.Sleep(s.interval)
}
}