From 8eb445b8a42132ef568cda3c62f312ce4ecd1ab3 Mon Sep 17 00:00:00 2001 From: Yandi Lee <41042306+littlepangdi@users.noreply.github.com> Date: Sat, 12 Jul 2025 00:15:01 +0800 Subject: [PATCH] Discovery.Manager: close sync ch after sender() is stopped (#14465) * close sync ch after sender() is stopped * break if chan is closed Signed-off-by: liyandi Co-authored-by: liyandi --- discovery/manager.go | 6 ++++-- notifier/manager.go | 5 ++++- scrape/manager.go | 5 ++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/discovery/manager.go b/discovery/manager.go index cb08e6b543..51a46ca231 100644 --- a/discovery/manager.go +++ b/discovery/manager.go @@ -365,8 +365,10 @@ func (m *Manager) updater(ctx context.Context, p *Provider, updates chan []*targ func (m *Manager) sender() { ticker := time.NewTicker(m.updatert) - defer ticker.Stop() - + defer func() { + ticker.Stop() + close(m.syncCh) + }() for { select { case <-m.ctx.Done(): diff --git a/notifier/manager.go b/notifier/manager.go index 69ce9b221b..c9463b24a8 100644 --- a/notifier/manager.go +++ b/notifier/manager.go @@ -254,7 +254,10 @@ func (n *Manager) targetUpdateLoop(tsets <-chan map[string][]*targetgroup.Group) select { case <-n.stopRequested: return - case ts := <-tsets: + case ts, ok := <-tsets: + if !ok { + break + } n.reload(ts) } } diff --git a/scrape/manager.go b/scrape/manager.go index 7ffce2f38d..c2da455858 100644 --- a/scrape/manager.go +++ b/scrape/manager.go @@ -127,7 +127,10 @@ func (m *Manager) Run(tsets <-chan map[string][]*targetgroup.Group) error { go m.reloader() for { select { - case ts := <-tsets: + case ts, ok := <-tsets: + if !ok { + break + } m.updateTsets(ts) select {