@@ -353,35 +353,7 @@ func (cm *controllerManager) Start(ctx context.Context) (err error) {
353
353
354
354
var leaderElector * leaderelection.LeaderElector
355
355
if cm .resourceLock != nil {
356
- leaderElector , err = leaderelection .NewLeaderElector (leaderelection.LeaderElectionConfig {
357
- Lock : cm .resourceLock ,
358
- LeaseDuration : cm .leaseDuration ,
359
- RenewDeadline : cm .renewDeadline ,
360
- RetryPeriod : cm .retryPeriod ,
361
- Callbacks : leaderelection.LeaderCallbacks {
362
- OnStartedLeading : func (_ context.Context ) {
363
- if err := cm .startLeaderElectionRunnables (); err != nil {
364
- cm .errChan <- err
365
- return
366
- }
367
- close (cm .elected )
368
- },
369
- OnStoppedLeading : func () {
370
- if cm .onStoppedLeading != nil {
371
- cm .onStoppedLeading ()
372
- }
373
- // Make sure graceful shutdown is skipped if we lost the leader lock without
374
- // intending to.
375
- cm .gracefulShutdownTimeout = time .Duration (0 )
376
- // Most implementations of leader election log.Fatal() here.
377
- // Since Start is wrapped in log.Fatal when called, we can just return
378
- // an error here which will cause the program to exit.
379
- cm .errChan <- errors .New ("leader election lost" )
380
- },
381
- },
382
- ReleaseOnCancel : cm .leaderElectionReleaseOnCancel ,
383
- Name : cm .leaderElectionID ,
384
- })
356
+ leaderElector , err = cm .initLeaderElector ()
385
357
if err != nil {
386
358
return fmt .Errorf ("failed during initialization leader election process: %w" , err )
387
359
}
@@ -603,6 +575,43 @@ func (cm *controllerManager) engageStopProcedure(stopComplete <-chan struct{}) e
603
575
return nil
604
576
}
605
577
578
+ func (cm * controllerManager ) initLeaderElector () (* leaderelection.LeaderElector , error ) {
579
+ leaderElector , err := leaderelection .NewLeaderElector (leaderelection.LeaderElectionConfig {
580
+ Lock : cm .resourceLock ,
581
+ LeaseDuration : cm .leaseDuration ,
582
+ RenewDeadline : cm .renewDeadline ,
583
+ RetryPeriod : cm .retryPeriod ,
584
+ Callbacks : leaderelection.LeaderCallbacks {
585
+ OnStartedLeading : func (_ context.Context ) {
586
+ if err := cm .startLeaderElectionRunnables (); err != nil {
587
+ cm .errChan <- err
588
+ return
589
+ }
590
+ close (cm .elected )
591
+ },
592
+ OnStoppedLeading : func () {
593
+ if cm .onStoppedLeading != nil {
594
+ cm .onStoppedLeading ()
595
+ }
596
+ // Make sure graceful shutdown is skipped if we lost the leader lock without
597
+ // intending to.
598
+ cm .gracefulShutdownTimeout = time .Duration (0 )
599
+ // Most implementations of leader election log.Fatal() here.
600
+ // Since Start is wrapped in log.Fatal when called, we can just return
601
+ // an error here which will cause the program to exit.
602
+ cm .errChan <- errors .New ("leader election lost" )
603
+ },
604
+ },
605
+ ReleaseOnCancel : cm .leaderElectionReleaseOnCancel ,
606
+ Name : cm .leaderElectionID ,
607
+ })
608
+ if err != nil {
609
+ return nil , err
610
+ }
611
+
612
+ return leaderElector , nil
613
+ }
614
+
606
615
func (cm * controllerManager ) startLeaderElectionRunnables () error {
607
616
return cm .runnables .LeaderElection .Start (cm .internalCtx )
608
617
}
0 commit comments