From fefd8ecfe397eb5f27e1f0c13ed574f1e9e54a7e Mon Sep 17 00:00:00 2001 From: Ayoub Mrini Date: Mon, 30 Dec 2024 12:17:47 +0100 Subject: [PATCH] [BUGFIX] avoid closing the query engine until it is guaranteed to no longer be in use. (#15724) Backport of #15723 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 cd0775bbdd..249c6d5490 100644 --- a/cmd/prometheus/main.go +++ b/cmd/prometheus/main.go @@ -988,18 +988,12 @@ func main() { listeners, err := webHandler.Listeners() if err != nil { logger.Error("Unable to start web listener", "err", err) - if err := queryEngine.Close(); err != nil { - logger.Warn("Closing query engine failed", "err", err) - } os.Exit(1) } err = toolkit_web.Validate(*webConfig) if err != nil { logger.Error("Unable to validate web configuration file", "err", err) - if err := queryEngine.Close(); err != nil { - logger.Warn("Closing query engine failed", "err", err) - } os.Exit(1) } @@ -1021,9 +1015,6 @@ func main() { case <-cancel: reloadReady.Close() } - if err := queryEngine.Close(); err != nil { - logger.Warn("Closing query engine failed", "err", err) - } return nil }, func(err error) { diff --git a/promql/engine.go b/promql/engine.go index a23e899d04..bbd8410268 100644 --- a/promql/engine.go +++ b/promql/engine.go @@ -436,6 +436,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