From 8cb77dad9ad0a748cd86eb038b1b9224b4ac061b Mon Sep 17 00:00:00 2001 From: Andrew Thornton Date: Wed, 5 May 2021 13:39:24 +0100 Subject: [PATCH 1/2] 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 --- modules/queue/manager.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/modules/queue/manager.go b/modules/queue/manager.go index da0fc606e6e16..2700996a6ab80 100644 --- a/modules/queue/manager.go +++ b/modules/queue/manager.go @@ -198,17 +198,15 @@ func (m *Manager) FlushAll(baseCtx context.Context, timeout time.Duration) error wg.Done() }(mq) } else { - log.Debug("Queue: %s is non-empty but is not flushable - adding 100 millisecond wait", mq.Name) - go func() { - <-time.After(100 * time.Millisecond) - wg.Done() - }() + log.Debug("Queue: %s is non-empty but is not flushable", mq.Name) + wg.Done() } - } if allEmpty { + log.Debug("All queues are empty") break } + <-time.After(100 * time.Millisecond) wg.Wait() } return nil From d5efc89321673e6c7d9d5850695e363601c99dce Mon Sep 17 00:00:00 2001 From: Andrew Thornton Date: Fri, 7 May 2021 18:18:49 +0100 Subject: [PATCH 2/2] as per lunny Signed-off-by: Andrew Thornton --- modules/queue/manager.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/queue/manager.go b/modules/queue/manager.go index 2700996a6ab80..c3ec735af504d 100644 --- a/modules/queue/manager.go +++ b/modules/queue/manager.go @@ -206,7 +206,12 @@ func (m *Manager) FlushAll(baseCtx context.Context, timeout time.Duration) error log.Debug("All queues are empty") break } - <-time.After(100 * time.Millisecond) + // 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() } return nil