Skip to content

Commit ce2f0c9

Browse files
authored
Merge pull request #1523 from laverite/honor-LeaderElectionReleaseOnCancel
🐛 honor LeaderElectionReleaseOnCancel
2 parents 7d674fd + 433cc85 commit ce2f0c9

File tree

2 files changed

+55
-21
lines changed

2 files changed

+55
-21
lines changed

pkg/manager/manager.go

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -366,27 +366,28 @@ func New(config *rest.Config, options Options) (Manager, error) {
366366
}
367367

368368
return &controllerManager{
369-
cluster: cluster,
370-
recorderProvider: recorderProvider,
371-
resourceLock: resourceLock,
372-
metricsListener: metricsListener,
373-
metricsExtraHandlers: metricsExtraHandlers,
374-
controllerOptions: options.Controller,
375-
logger: options.Logger,
376-
elected: make(chan struct{}),
377-
port: options.Port,
378-
host: options.Host,
379-
certDir: options.CertDir,
380-
webhookServer: options.WebhookServer,
381-
leaseDuration: *options.LeaseDuration,
382-
renewDeadline: *options.RenewDeadline,
383-
retryPeriod: *options.RetryPeriod,
384-
healthProbeListener: healthProbeListener,
385-
readinessEndpointName: options.ReadinessEndpointName,
386-
livenessEndpointName: options.LivenessEndpointName,
387-
gracefulShutdownTimeout: *options.GracefulShutdownTimeout,
388-
internalProceduresStop: make(chan struct{}),
389-
leaderElectionStopped: make(chan struct{}),
369+
cluster: cluster,
370+
recorderProvider: recorderProvider,
371+
resourceLock: resourceLock,
372+
metricsListener: metricsListener,
373+
metricsExtraHandlers: metricsExtraHandlers,
374+
controllerOptions: options.Controller,
375+
logger: options.Logger,
376+
elected: make(chan struct{}),
377+
port: options.Port,
378+
host: options.Host,
379+
certDir: options.CertDir,
380+
webhookServer: options.WebhookServer,
381+
leaseDuration: *options.LeaseDuration,
382+
renewDeadline: *options.RenewDeadline,
383+
retryPeriod: *options.RetryPeriod,
384+
healthProbeListener: healthProbeListener,
385+
readinessEndpointName: options.ReadinessEndpointName,
386+
livenessEndpointName: options.LivenessEndpointName,
387+
gracefulShutdownTimeout: *options.GracefulShutdownTimeout,
388+
internalProceduresStop: make(chan struct{}),
389+
leaderElectionStopped: make(chan struct{}),
390+
leaderElectionReleaseOnCancel: options.LeaderElectionReleaseOnCancel,
390391
}, nil
391392
}
392393

pkg/manager/manager_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,39 @@ var _ = Describe("manger.Manager", func() {
489489
_, isLeaseLock := cm.resourceLock.(*resourcelock.LeaseLock)
490490
Expect(isLeaseLock).To(BeTrue())
491491
})
492+
It("should release lease if ElectionReleaseOnCancel is true", func() {
493+
var rl resourcelock.Interface
494+
m, err := New(cfg, Options{
495+
LeaderElection: true,
496+
LeaderElectionResourceLock: resourcelock.LeasesResourceLock,
497+
LeaderElectionID: "controller-runtime",
498+
LeaderElectionNamespace: "my-ns",
499+
LeaderElectionReleaseOnCancel: true,
500+
newResourceLock: func(config *rest.Config, recorderProvider recorder.Provider, options leaderelection.Options) (resourcelock.Interface, error) {
501+
var err error
502+
rl, err = fakeleaderelection.NewResourceLock(config, recorderProvider, options)
503+
return rl, err
504+
},
505+
})
506+
Expect(err).To(BeNil())
507+
508+
ctx, cancel := context.WithCancel(context.Background())
509+
doneCh := make(chan struct{})
510+
go func() {
511+
defer GinkgoRecover()
512+
defer close(doneCh)
513+
Expect(m.Start(ctx)).NotTo(HaveOccurred())
514+
}()
515+
<-m.(*controllerManager).elected
516+
cancel()
517+
<-doneCh
518+
519+
ctx, cancel = context.WithCancel(context.Background())
520+
defer cancel()
521+
record, _, err := rl.Get(ctx)
522+
Expect(err).To(BeNil())
523+
Expect(record.HolderIdentity).To(BeEmpty())
524+
})
492525
})
493526

494527
It("should create a listener for the metrics if a valid address is provided", func() {

0 commit comments

Comments
 (0)