From 3c13a8d96bcb1d191ac5e9af5589d5223dfd1c7b Mon Sep 17 00:00:00 2001 From: Volodymyr Stoiko Date: Mon, 31 Mar 2025 23:04:18 +0300 Subject: [PATCH] Exit properly from scripts command (#1731) * Fix scripts command exit * Switch to debug --- cmd/scripts.go | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/cmd/scripts.go b/cmd/scripts.go index 8959511fa..9a5123061 100644 --- a/cmd/scripts.go +++ b/cmd/scripts.go @@ -123,7 +123,7 @@ func createScript(provider *kubernetes.Provider, script misc.ConfigMapScript) (i } if k8serrors.IsConflict(err) { - log.Warn().Err(err).Msg("Conflict detected, retrying update...") + log.Debug().Err(err).Msg("Conflict detected, retrying update...") time.Sleep(500 * time.Millisecond) continue } @@ -332,23 +332,29 @@ func watchConfigMap(ctx context.Context, provider *kubernetes.Provider) { continue } - for event := range watcher.ResultChan() { - select { - case <-ctx.Done(): - log.Info().Msg("ConfigMap watcher loop exiting gracefully.") - watcher.Stop() - return - - default: + // Create a goroutine to process events + watcherClosed := make(chan struct{}) + go func() { + defer close(watcherClosed) + for event := range watcher.ResultChan() { if event.Type == watch.Added { log.Info().Msg("ConfigMap created or modified") runScriptsSync(provider) } else if event.Type == watch.Deleted { log.Warn().Msg("ConfigMap deleted, waiting for recreation...") - watcher.Stop() break } } + }() + + // Wait for either context cancellation or watcher completion + select { + case <-ctx.Done(): + watcher.Stop() + log.Info().Msg("ConfigMap watcher stopping due to context cancellation") + return + case <-watcherClosed: + log.Info().Msg("Watcher closed, restarting...") } time.Sleep(5 * time.Second)