Skip to content

Commit 00173cf

Browse files
authored
Merge pull request #3028 from alvaroaleman/timeout
⚠️ Use leader elector with client timeout
2 parents 8e44a43 + 5bf5874 commit 00173cf

File tree

3 files changed

+32
-15
lines changed

3 files changed

+32
-15
lines changed

pkg/leaderelection/leader_election.go

+9-15
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,9 @@ import (
2020
"errors"
2121
"fmt"
2222
"os"
23+
"time"
2324

2425
"k8s.io/apimachinery/pkg/util/uuid"
25-
coordinationv1client "k8s.io/client-go/kubernetes/typed/coordination/v1"
26-
corev1client "k8s.io/client-go/kubernetes/typed/core/v1"
2726
"k8s.io/client-go/rest"
2827
"k8s.io/client-go/tools/leaderelection/resourcelock"
2928

@@ -49,6 +48,9 @@ type Options struct {
4948
// LeaderElectionID determines the name of the resource that leader election
5049
// will use for holding the leader lock.
5150
LeaderElectionID string
51+
52+
// RewnewDeadline is the renew deadline for this leader election client
53+
RewnewDeadline time.Duration
5254
}
5355

5456
// NewResourceLock creates a new resource lock for use in a leader election loop.
@@ -88,25 +90,17 @@ func NewResourceLock(config *rest.Config, recorderProvider recorder.Provider, op
8890

8991
// Construct clients for leader election
9092
rest.AddUserAgent(config, "leader-election")
91-
corev1Client, err := corev1client.NewForConfig(config)
92-
if err != nil {
93-
return nil, err
94-
}
95-
96-
coordinationClient, err := coordinationv1client.NewForConfig(config)
97-
if err != nil {
98-
return nil, err
99-
}
10093

101-
return resourcelock.New(options.LeaderElectionResourceLock,
94+
return resourcelock.NewFromKubeconfig(options.LeaderElectionResourceLock,
10295
options.LeaderElectionNamespace,
10396
options.LeaderElectionID,
104-
corev1Client,
105-
coordinationClient,
10697
resourcelock.ResourceLockConfig{
10798
Identity: id,
10899
EventRecorder: recorderProvider.GetEventRecorderFor(id),
109-
})
100+
},
101+
config,
102+
options.RewnewDeadline,
103+
)
110104
}
111105

112106
func getInClusterNamespace() (string, error) {

pkg/manager/manager.go

+1
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,7 @@ func New(config *rest.Config, options Options) (Manager, error) {
389389
LeaderElectionResourceLock: options.LeaderElectionResourceLock,
390390
LeaderElectionID: options.LeaderElectionID,
391391
LeaderElectionNamespace: options.LeaderElectionNamespace,
392+
RewnewDeadline: *options.RenewDeadline,
392393
})
393394
if err != nil {
394395
return nil, err

pkg/manager/manager_test.go

+22
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,28 @@ var _ = Describe("manger.Manager", func() {
317317
<-m2done
318318
})
319319

320+
It("should default RenewDeadline for leader election config", func() {
321+
var rl resourcelock.Interface
322+
m1, err := New(cfg, Options{
323+
LeaderElection: true,
324+
LeaderElectionNamespace: "default",
325+
LeaderElectionID: "test-leader-election-id",
326+
newResourceLock: func(config *rest.Config, recorderProvider recorder.Provider, options leaderelection.Options) (resourcelock.Interface, error) {
327+
if options.RewnewDeadline != 10*time.Second {
328+
return nil, fmt.Errorf("expected RenewDeadline to be 10s, got %v", options.RewnewDeadline)
329+
}
330+
var err error
331+
rl, err = leaderelection.NewResourceLock(config, recorderProvider, options)
332+
return rl, err
333+
},
334+
HealthProbeBindAddress: "0",
335+
Metrics: metricsserver.Options{BindAddress: "0"},
336+
PprofBindAddress: "0",
337+
})
338+
Expect(err).ToNot(HaveOccurred())
339+
Expect(m1).ToNot(BeNil())
340+
})
341+
320342
It("should default ID to controller-runtime if ID is not set", func() {
321343
var rl resourcelock.Interface
322344
m1, err := New(cfg, Options{

0 commit comments

Comments
 (0)