From bd0a83766c3424cea12878e880a41b58d4aabc35 Mon Sep 17 00:00:00 2001 From: machine424 Date: Mon, 30 Dec 2024 05:14:44 +0100 Subject: [PATCH] fix(main.go): avoid closing the query engine until it is guaranteed to no longer be in use. partially reverts https://github.com/prometheus/prometheus/pull/14064 fixes https://github.com/prometheus/prometheus/issues/15232 supersedes https://github.com/prometheus/prometheus/pull/15533 reusing Engine.Close() outside of tests will require more consideration. Signed-off-by: machine424 --- cmd/prometheus/main.go | 9 --------- promql/engine.go | 2 ++ 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/cmd/prometheus/main.go b/cmd/prometheus/main.go index b3bcb78b78bb..a021259f9a0b 100644 --- a/cmd/prometheus/main.go +++ b/cmd/prometheus/main.go @@ -1000,18 +1000,12 @@ func main() { listeners, err := webHandler.Listeners() if err != nil { level.Error(logger).Log("msg", "Unable to start web listeners", "err", err) - if err := queryEngine.Close(); err != nil { - level.Warn(logger).Log("msg", "Closing query engine failed", "err", err) - } os.Exit(1) } err = toolkit_web.Validate(*webConfig) if err != nil { level.Error(logger).Log("msg", "Unable to validate web configuration file", "err", err) - if err := queryEngine.Close(); err != nil { - level.Warn(logger).Log("msg", "Closing query engine failed", "err", err) - } os.Exit(1) } @@ -1033,9 +1027,6 @@ func main() { case <-cancel: reloadReady.Close() } - if err := queryEngine.Close(); err != nil { - level.Warn(logger).Log("msg", "Closing query engine failed", "err", err) - } return nil }, func(err error) { diff --git a/promql/engine.go b/promql/engine.go index 6cc4c69cf172..7ec73b20f306 100644 --- a/promql/engine.go +++ b/promql/engine.go @@ -434,6 +434,8 @@ func NewEngine(opts EngineOpts) *Engine { } // Close closes ng. +// Callers must ensure the engine is really no longer in use before calling this to avoid +// issues failures like in https://github.com/prometheus/prometheus/issues/15232 func (ng *Engine) Close() error { if ng == nil { return nil