From 6f953c7dc0362ce821dc3dc5620833a7af3ba772 Mon Sep 17 00:00:00 2001 From: Neil Twigg Date: Fri, 9 Aug 2024 15:45:16 +0100 Subject: [PATCH] Cancel pending `checkForOrphans` on cluster monitor exit This was leaving dangling goroutines and creating confusing logging in unit test runs. Signed-off-by: Neil Twigg --- server/jetstream_cluster.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/server/jetstream_cluster.go b/server/jetstream_cluster.go index 402fd72894..ce18b77ca1 100644 --- a/server/jetstream_cluster.go +++ b/server/jetstream_cluster.go @@ -1339,6 +1339,11 @@ func (js *jetStream) monitorCluster() { updateConsumers: make(map[string]*consumerAssignment), } + // Make sure to cancel any pending checkForOrphans calls if the + // monitor goroutine exits. + var oc *time.Timer + defer stopAndClearTimer(&oc) + for { select { case <-s.quitCh: @@ -1375,7 +1380,7 @@ func (js *jetStream) monitorCluster() { // Clear. ru = nil s.Debugf("Recovered JetStream cluster metadata") - time.AfterFunc(30*time.Second, js.checkForOrphans) + oc = time.AfterFunc(30*time.Second, js.checkForOrphans) // Do a health check here as well. go checkHealth() continue