From b29c58f8ec5023e421ece0ec52025940d35220ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Ctibrany=CC=81?= Date: Thu, 30 Apr 2020 11:55:29 +0200 Subject: [PATCH] Only wait for other modules if underlying service is still running. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Otherwise there is no point in waiting. Signed-off-by: Peter Štibraný --- pkg/util/module_service.go | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/pkg/util/module_service.go b/pkg/util/module_service.go index 5b0ccbd2cb2..32cfbd07992 100644 --- a/pkg/util/module_service.go +++ b/pkg/util/module_service.go @@ -72,6 +72,27 @@ func (w *moduleService) run(serviceContext context.Context) error { } func (w *moduleService) stop(_ error) error { + var err error + if w.service.State() == services.Running { + // Only wait for other modules, if underlying service is still running. + w.waitForModulesToStop() + + level.Debug(Logger).Log("msg", "stopping", "module", w.name) + + err = services.StopAndAwaitTerminated(context.Background(), w.service) + } else { + err = w.service.FailureCase() + } + + if err != nil && err != ErrStopProcess { + level.Warn(Logger).Log("msg", "module failed with error", "module", w.name, "err", err) + } else { + level.Info(Logger).Log("msg", "module stopped", "module", w.name) + } + return err +} + +func (w *moduleService) waitForModulesToStop() { // wait until all stopDeps have stopped stopDeps := w.stopDeps(w.name) for _, s := range stopDeps { @@ -83,14 +104,4 @@ func (w *moduleService) stop(_ error) error { // fails. But we don't care *how* service stops, as long as it is done. _ = s.AwaitTerminated(context.Background()) } - - level.Debug(Logger).Log("msg", "stopping", "module", w.name) - - err := services.StopAndAwaitTerminated(context.Background(), w.service) - if err != nil && err != ErrStopProcess { - level.Warn(Logger).Log("msg", "error stopping module", "module", w.name, "err", err) - } else { - level.Info(Logger).Log("msg", "module stopped", "module", w.name) - } - return err }