From b83cbacbdd1f420d57e4c14e409d5fcc387256c9 Mon Sep 17 00:00:00 2001 From: Julien Pivotto Date: Wed, 22 Jul 2020 00:13:24 +0200 Subject: [PATCH] Rule manager: remove blocking channel in mail (#7631) Signed-off-by: Julien Pivotto --- cmd/prometheus/main.go | 4 ---- rules/manager.go | 7 ++++++- rules/manager_test.go | 10 +++++----- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/cmd/prometheus/main.go b/cmd/prometheus/main.go index 2b5db461c..fc52c6dc7 100644 --- a/cmd/prometheus/main.go +++ b/cmd/prometheus/main.go @@ -660,18 +660,14 @@ func main() { } { // Rule manager. - // TODO(krasi) refactor ruleManager.Run() to be blocking to avoid using an extra blocking channel. - cancel := make(chan struct{}) g.Add( func() error { <-reloadReady.C ruleManager.Run() - <-cancel return nil }, func(err error) { ruleManager.Stop() - close(cancel) }, ) } diff --git a/rules/manager.go b/rules/manager.go index 76c756c97..8cfb07164 100644 --- a/rules/manager.go +++ b/rules/manager.go @@ -875,8 +875,13 @@ func NewManager(o *ManagerOptions) *Manager { return m } -// Run starts processing of the rule manager. +// Run starts processing of the rule manager. It is blocking. func (m *Manager) Run() { + m.start() + <-m.done +} + +func (m *Manager) start() { close(m.block) } diff --git a/rules/manager_test.go b/rules/manager_test.go index 225e0a5a3..a865097d4 100644 --- a/rules/manager_test.go +++ b/rules/manager_test.go @@ -716,7 +716,7 @@ func TestUpdate(t *testing.T) { Context: context.Background(), Logger: log.NewNopLogger(), }) - ruleManager.Run() + ruleManager.start() defer ruleManager.Stop() err := ruleManager.Update(10*time.Second, files, nil) @@ -906,8 +906,8 @@ func TestMetricsUpdate(t *testing.T) { } storage := teststorage.New(t) - registry := prometheus.NewRegistry() defer storage.Close() + registry := prometheus.NewRegistry() opts := promql.EngineOpts{ Logger: nil, Reg: nil, @@ -923,7 +923,7 @@ func TestMetricsUpdate(t *testing.T) { Logger: log.NewNopLogger(), Registerer: registry, }) - ruleManager.Run() + ruleManager.start() defer ruleManager.Stop() countMetrics := func() int { @@ -997,7 +997,7 @@ func TestGroupStalenessOnRemoval(t *testing.T) { Logger: log.NewNopLogger(), }) var stopped bool - ruleManager.Run() + ruleManager.start() defer func() { if !stopped { ruleManager.Stop() @@ -1074,7 +1074,7 @@ func TestMetricsStalenessOnManagerShutdown(t *testing.T) { Logger: log.NewNopLogger(), }) var stopped bool - ruleManager.Run() + ruleManager.start() defer func() { if !stopped { ruleManager.Stop()