From f130c30b421d6caedde5466479cf32b067796bf0 Mon Sep 17 00:00:00 2001
From: kaiyou <dev@kaiyou.fr>
Date: Sun, 26 Feb 2023 22:57:06 +0100
Subject: [PATCH] Start informers and event broadcast *after* initializing the
 scheduler to avoid races

---
 services/k8s.go | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/services/k8s.go b/services/k8s.go
index 1ccb9db..7b62c6e 100644
--- a/services/k8s.go
+++ b/services/k8s.go
@@ -162,15 +162,10 @@ var kubeScheduler = &Unit{
 		u.Logger.Info("preparing scheduler informers")
 		// Setup scheduler dependencies
 		broadcaster := events.NewEventBroadcasterAdapter(eventsClient)
-		broadcaster.StartRecordingToSink(ctx.Done())
 		informers := scheduler.NewInformerFactory(client, 0)
-		informers.Start(ctx.Done())
 		dynInformers := dynamicinformer.NewFilteredDynamicSharedInformerFactory(
 			dynamic.NewForConfigOrDie(kc), 0, core.NamespaceAll, nil,
 		)
-		dynInformers.Start(ctx.Done())
-		informers.WaitForCacheSync(ctx.Done())
-		dynInformers.WaitForCacheSync(ctx.Done())
 		// Start the scheduler itself
 		u.Logger.Info("informers are ready, preparing the scheduler")
 		sched, err := scheduler.New(client, informers, dynInformers, broadcaster.NewRecorder, ctx.Done(),
@@ -180,6 +175,12 @@ var kubeScheduler = &Unit{
 			return err
 		}
 		u.Logger.Info("starting the scheduler")
+		broadcaster.StartRecordingToSink(ctx.Done())
+		defer broadcaster.Shutdown()
+		informers.Start(ctx.Done())
+		dynInformers.Start(ctx.Done())
+		informers.WaitForCacheSync(ctx.Done())
+		dynInformers.WaitForCacheSync(ctx.Done())
 		sched.Run(ctx)
 		return nil
 	},
-- 
GitLab