From 7828bd49f2fd23423804f12330beffaadbe21b0c Mon Sep 17 00:00:00 2001 From: Neil Twigg Date: Thu, 9 Jan 2025 10:28:06 +0000 Subject: [PATCH] Ensure `deleteNotActive` stops on JetStream or server shutdown This ensures that we stop these goroutines more quickly when either the server or the JetStream system shuts down. This also avoids a race in `TestJetStreamClusterGhostEphemeralsAfterRestart`, as the unit test was reverting a modified constant before these goroutines would have finished in some cases. Signed-off-by: Neil Twigg --- server/consumer.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/server/consumer.go b/server/consumer.go index f422cba96c2..73089a3e628 100644 --- a/server/consumer.go +++ b/server/consumer.go @@ -1853,6 +1853,13 @@ func (o *consumer) deleteNotActive() { s, js := o.mset.srv, o.srv.js.Load() acc, stream, name, isDirect := o.acc.Name, o.stream, o.name, o.cfg.Direct + var qch, cqch chan struct{} + if o.srv != nil { + qch = o.srv.quitCh + } + if o.js != nil { + cqch = o.js.clusterQuitC() + } o.mu.Unlock() // Useful for pprof. @@ -1891,7 +1898,14 @@ func (o *consumer) deleteNotActive() { interval := consumerNotActiveStartInterval + jitter ticker := time.NewTicker(interval) defer ticker.Stop() - for range ticker.C { + for { + select { + case <-ticker.C: + case <-qch: + return + case <-cqch: + return + } js.mu.RLock() if js.shuttingDown { js.mu.RUnlock()