Skip to content

Commit

Permalink
Merge pull request #1523 from laverite/honor-LeaderElectionReleaseOnC…
Browse files Browse the repository at this point in the history
…ancel

🐛 honor LeaderElectionReleaseOnCancel
  • Loading branch information
k8s-ci-robot committed May 12, 2021
2 parents 7d674fd + 433cc85 commit ce2f0c9
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 21 deletions.
43 changes: 22 additions & 21 deletions pkg/manager/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -366,27 +366,28 @@ func New(config *rest.Config, options Options) (Manager, error) {
}

return &controllerManager{
cluster: cluster,
recorderProvider: recorderProvider,
resourceLock: resourceLock,
metricsListener: metricsListener,
metricsExtraHandlers: metricsExtraHandlers,
controllerOptions: options.Controller,
logger: options.Logger,
elected: make(chan struct{}),
port: options.Port,
host: options.Host,
certDir: options.CertDir,
webhookServer: options.WebhookServer,
leaseDuration: *options.LeaseDuration,
renewDeadline: *options.RenewDeadline,
retryPeriod: *options.RetryPeriod,
healthProbeListener: healthProbeListener,
readinessEndpointName: options.ReadinessEndpointName,
livenessEndpointName: options.LivenessEndpointName,
gracefulShutdownTimeout: *options.GracefulShutdownTimeout,
internalProceduresStop: make(chan struct{}),
leaderElectionStopped: make(chan struct{}),
cluster: cluster,
recorderProvider: recorderProvider,
resourceLock: resourceLock,
metricsListener: metricsListener,
metricsExtraHandlers: metricsExtraHandlers,
controllerOptions: options.Controller,
logger: options.Logger,
elected: make(chan struct{}),
port: options.Port,
host: options.Host,
certDir: options.CertDir,
webhookServer: options.WebhookServer,
leaseDuration: *options.LeaseDuration,
renewDeadline: *options.RenewDeadline,
retryPeriod: *options.RetryPeriod,
healthProbeListener: healthProbeListener,
readinessEndpointName: options.ReadinessEndpointName,
livenessEndpointName: options.LivenessEndpointName,
gracefulShutdownTimeout: *options.GracefulShutdownTimeout,
internalProceduresStop: make(chan struct{}),
leaderElectionStopped: make(chan struct{}),
leaderElectionReleaseOnCancel: options.LeaderElectionReleaseOnCancel,
}, nil
}

Expand Down
33 changes: 33 additions & 0 deletions pkg/manager/manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -489,6 +489,39 @@ var _ = Describe("manger.Manager", func() {
_, isLeaseLock := cm.resourceLock.(*resourcelock.LeaseLock)
Expect(isLeaseLock).To(BeTrue())
})
It("should release lease if ElectionReleaseOnCancel is true", func() {
var rl resourcelock.Interface
m, err := New(cfg, Options{
LeaderElection: true,
LeaderElectionResourceLock: resourcelock.LeasesResourceLock,
LeaderElectionID: "controller-runtime",
LeaderElectionNamespace: "my-ns",
LeaderElectionReleaseOnCancel: true,
newResourceLock: func(config *rest.Config, recorderProvider recorder.Provider, options leaderelection.Options) (resourcelock.Interface, error) {
var err error
rl, err = fakeleaderelection.NewResourceLock(config, recorderProvider, options)
return rl, err
},
})
Expect(err).To(BeNil())

ctx, cancel := context.WithCancel(context.Background())
doneCh := make(chan struct{})
go func() {
defer GinkgoRecover()
defer close(doneCh)
Expect(m.Start(ctx)).NotTo(HaveOccurred())
}()
<-m.(*controllerManager).elected
cancel()
<-doneCh

ctx, cancel = context.WithCancel(context.Background())
defer cancel()
record, _, err := rl.Get(ctx)
Expect(err).To(BeNil())
Expect(record.HolderIdentity).To(BeEmpty())
})
})

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

0 comments on commit ce2f0c9

Please sign in to comment.