diff --git a/pkg/api/controller.go b/pkg/api/controller.go index fda220f5b..7e3b7e930 100644 --- a/pkg/api/controller.go +++ b/pkg/api/controller.go @@ -370,13 +370,18 @@ func (c *Controller) LoadNewConfig(newConfig *config.Config) { func (c *Controller) Shutdown() { c.StopBackgroundTasks() - ctx := context.Background() - _ = c.Server.Shutdown(ctx) + + if c.Server != nil { + ctx := context.Background() + _ = c.Server.Shutdown(ctx) + } } // Will stop scheduler and wait for all tasks to finish their work. func (c *Controller) StopBackgroundTasks() { - c.taskScheduler.Shutdown() + if c.taskScheduler != nil { + c.taskScheduler.Shutdown() + } } func (c *Controller) StartBackgroundTasks() { diff --git a/pkg/cli/server/config_reloader.go b/pkg/cli/server/config_reloader.go index 43967a275..bf57ffa77 100644 --- a/pkg/cli/server/config_reloader.go +++ b/pkg/cli/server/config_reloader.go @@ -41,8 +41,6 @@ func signalHandler(ctlr *api.Controller, sigCh chan os.Signal) { // gracefully shutdown http server ctlr.Shutdown() //nolint: contextcheck - - close(sigCh) } } @@ -61,8 +59,6 @@ func initShutDownRoutine(ctlr *api.Controller) { func (hr *HotReloader) Start() { done := make(chan bool) - initShutDownRoutine(hr.ctlr) - // run watcher go func() { defer hr.watcher.Close() diff --git a/pkg/cli/server/root.go b/pkg/cli/server/root.go index afdc1d156..2a4e8d42f 100644 --- a/pkg/cli/server/root.go +++ b/pkg/cli/server/root.go @@ -69,6 +69,8 @@ func newServeCmd(conf *config.Config) *cobra.Command { return err } + initShutDownRoutine(ctlr) + if err := ctlr.Run(); err != nil { log.Error().Err(err).Msg("failed to start controller, exiting") }