Correctly stop the timer used in the remote write path.

This commit is contained in:
Tom Wilkie 2018-03-09 12:00:26 +00:00
parent f63e7db4cb
commit 97a5fc8cbb

View file

@ -430,6 +430,14 @@ func (s *shards) runShard(i int) {
pendingSamples := model.Samples{} pendingSamples := model.Samples{}
timer := time.NewTimer(s.qm.cfg.BatchSendDeadline) timer := time.NewTimer(s.qm.cfg.BatchSendDeadline)
defer func() {
if !timer.Stop() {
select {
case <-timer.C:
default:
}
}
}()
for { for {
select { select {
@ -449,11 +457,16 @@ func (s *shards) runShard(i int) {
for len(pendingSamples) >= s.qm.cfg.MaxSamplesPerSend { for len(pendingSamples) >= s.qm.cfg.MaxSamplesPerSend {
s.sendSamples(pendingSamples[:s.qm.cfg.MaxSamplesPerSend]) s.sendSamples(pendingSamples[:s.qm.cfg.MaxSamplesPerSend])
pendingSamples = pendingSamples[s.qm.cfg.MaxSamplesPerSend:] pendingSamples = pendingSamples[s.qm.cfg.MaxSamplesPerSend:]
}
if !timer.Stop() { if !timer.Stop() {
<-timer.C select {
case <-timer.C:
default:
}
} }
timer.Reset(s.qm.cfg.BatchSendDeadline) timer.Reset(s.qm.cfg.BatchSendDeadline)
}
case <-timer.C: case <-timer.C:
if len(pendingSamples) > 0 { if len(pendingSamples) > 0 {
s.sendSamples(pendingSamples) s.sendSamples(pendingSamples)