Queue manager FlushAll can loop rapidly - add delay (#15733) (#15840)

Backport #15733

* Queue manager FlushAll can loop rapidly - add delay

Add delay within FlushAll to prevent rapid loop when workers are busy

Signed-off-by: Andrew Thornton <art27@cantab.net>

* as per lunny

Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
zeripath 2021-05-12 18:48:11 +01:00 committed by GitHub
parent 3ae1d7a59f
commit 332eb2f6d2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -198,17 +198,20 @@ func (m *Manager) FlushAll(baseCtx context.Context, timeout time.Duration) error
wg.Done() wg.Done()
}(mq) }(mq)
} else { } else {
log.Debug("Queue: %s is non-empty but is not flushable - adding 100 millisecond wait", mq.Name) log.Debug("Queue: %s is non-empty but is not flushable", mq.Name)
go func() { wg.Done()
<-time.After(100 * time.Millisecond)
wg.Done()
}()
} }
} }
if allEmpty { if allEmpty {
log.Debug("All queues are empty")
break break
} }
// Ensure there are always at least 100ms between loops but not more if we've actually been doing some flushign
// but don't delay cancellation here.
select {
case <-ctx.Done():
case <-time.After(100 * time.Millisecond):
}
wg.Wait() wg.Wait()
} }
return nil return nil