Skip to content

Commit 4777236

Browse files
committed
Use manager Elected channel
1 parent 9aec12f commit 4777236

File tree

1 file changed

+51
-36
lines changed

1 file changed

+51
-36
lines changed

components/ws-manager-mk2/main.go

Lines changed: 51 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"google.golang.org/grpc/credentials"
1919
"google.golang.org/grpc/credentials/insecure"
2020
_ "k8s.io/client-go/plugin/pkg/client/auth"
21+
"k8s.io/client-go/rest"
2122

2223
"github.com/bombsimon/logrusr/v2"
2324
grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
@@ -123,52 +124,63 @@ func main() {
123124
HealthProbeBindAddress: cfg.Health.Addr,
124125
LeaderElection: true,
125126
LeaderElectionID: "ws-manager-mk2-leader.gitpod.io",
126-
NewCache: cache.MultiNamespacedCacheBuilder([]string{cfg.Manager.Namespace, cfg.Manager.SecretsNamespace}),
127+
NewCache: func(config *rest.Config, opts cache.Options) (cache.Cache, error) {
128+
opts.Namespaces = []string{cfg.Manager.Namespace, cfg.Manager.SecretsNamespace}
129+
return cache.New(config, opts)
130+
},
127131
})
128132
if err != nil {
129133
setupLog.Error(err, "unable to start manager")
130134
os.Exit(1)
131135
}
132136

133-
maintenanceReconciler, err := controllers.NewMaintenanceReconciler(mgr.GetClient())
134-
if err != nil {
135-
setupLog.Error(err, "unable to create maintenance controller", "controller", "Maintenance")
136-
os.Exit(1)
137-
}
137+
go func() {
138+
<-mgr.Elected()
138139

139-
workspaceReconciler, err := controllers.NewWorkspaceReconciler(
140-
mgr.GetClient(), mgr.GetScheme(), mgr.GetEventRecorderFor("workspace"), &cfg.Manager, metrics.Registry, maintenanceReconciler)
141-
if err != nil {
142-
setupLog.Error(err, "unable to create controller", "controller", "Workspace")
143-
os.Exit(1)
144-
}
140+
maintenanceReconciler, err := controllers.NewMaintenanceReconciler(mgr.GetClient())
141+
if err != nil {
142+
setupLog.Error(err, "unable to create maintenance controller", "controller", "Maintenance")
143+
os.Exit(1)
144+
}
145145

146-
activity := activity.NewWorkspaceActivity()
147-
timeoutReconciler, err := controllers.NewTimeoutReconciler(mgr.GetClient(), mgr.GetEventRecorderFor("workspace"), cfg.Manager, activity, maintenanceReconciler)
148-
if err != nil {
149-
setupLog.Error(err, "unable to create timeout controller", "controller", "Timeout")
150-
os.Exit(1)
151-
}
146+
workspaceReconciler, err := controllers.NewWorkspaceReconciler(
147+
mgr.GetClient(), mgr.GetScheme(), mgr.GetEventRecorderFor("workspace"), &cfg.Manager, metrics.Registry, maintenanceReconciler)
148+
if err != nil {
149+
setupLog.Error(err, "unable to create controller", "controller", "Workspace")
150+
os.Exit(1)
151+
}
152152

153-
wsmanService, err := setupGRPCService(cfg, mgr.GetClient(), activity, maintenanceReconciler)
154-
if err != nil {
155-
setupLog.Error(err, "unable to start manager service")
156-
os.Exit(1)
157-
}
153+
activity := activity.NewWorkspaceActivity()
158154

159-
workspaceReconciler.OnReconcile = wsmanService.OnWorkspaceReconcile
160-
if err = workspaceReconciler.SetupWithManager(mgr); err != nil {
161-
setupLog.Error(err, "unable to setup workspace controller with manager", "controller", "Workspace")
162-
os.Exit(1)
163-
}
164-
if err = timeoutReconciler.SetupWithManager(mgr); err != nil {
165-
setupLog.Error(err, "unable to setup timeout controller with manager", "controller", "Timeout")
166-
os.Exit(1)
167-
}
168-
if err = maintenanceReconciler.SetupWithManager(mgr); err != nil {
169-
setupLog.Error(err, "unable to setup maintenance controller with manager", "controller", "Maintenance")
170-
os.Exit(1)
171-
}
155+
timeoutReconciler, err := controllers.NewTimeoutReconciler(mgr.GetClient(), mgr.GetEventRecorderFor("workspace"), cfg.Manager, activity, maintenanceReconciler)
156+
if err != nil {
157+
setupLog.Error(err, "unable to create timeout controller", "controller", "Timeout")
158+
os.Exit(1)
159+
}
160+
161+
wsmanService, err := setupGRPCService(cfg, mgr.GetClient(), activity, maintenanceReconciler)
162+
if err != nil {
163+
setupLog.Error(err, "unable to start manager service")
164+
os.Exit(1)
165+
}
166+
167+
workspaceReconciler.OnReconcile = wsmanService.OnWorkspaceReconcile
168+
169+
if err = workspaceReconciler.SetupWithManager(mgr); err != nil {
170+
setupLog.Error(err, "unable to setup workspace controller with manager", "controller", "Workspace")
171+
os.Exit(1)
172+
}
173+
174+
if err = timeoutReconciler.SetupWithManager(mgr); err != nil {
175+
setupLog.Error(err, "unable to setup timeout controller with manager", "controller", "Timeout")
176+
os.Exit(1)
177+
}
178+
179+
if err = maintenanceReconciler.SetupWithManager(mgr); err != nil {
180+
setupLog.Error(err, "unable to setup maintenance controller with manager", "controller", "Maintenance")
181+
os.Exit(1)
182+
}
183+
}()
172184

173185
// if err = (&workspacev1.Workspace{}).SetupWebhookWithManager(mgr); err != nil {
174186
// setupLog.Error(err, "unable to create webhook", "webhook", "Workspace")
@@ -191,6 +203,9 @@ func main() {
191203
setupLog.Error(err, "problem running manager")
192204
os.Exit(1)
193205
}
206+
207+
setupLog.Info("new leader elected")
208+
os.Exit(1)
194209
}
195210

196211
func setupGRPCService(cfg *config.ServiceConfiguration, k8s client.Client, activity *activity.WorkspaceActivity, maintenance maintenance.Maintenance) (*service.WorkspaceManagerServer, error) {

0 commit comments

Comments
 (0)