Skip to content

Commit b3c93f2

Browse files
committed
feat: leader election callbacks (#2015)
Signed-off-by: csviri <[email protected]> Signed-off-by: Attila Mészáros <[email protected]>
1 parent e84a7ee commit b3c93f2

File tree

3 files changed

+90
-10
lines changed

3 files changed

+90
-10
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/LeaderElectionManager.java

+14-5
Original file line numberDiff line numberDiff line change
@@ -66,19 +66,28 @@ private void init(LeaderElectionConfiguration config) {
6666
config.getLeaseDuration(),
6767
config.getRenewDeadline(),
6868
config.getRetryPeriod(),
69-
leaderCallbacks(),
69+
leaderCallbacks(config),
7070
true,
7171
config.getLeaseName()))
7272
.build();
7373
}
7474

7575

7676

77-
private LeaderCallbacks leaderCallbacks() {
77+
private LeaderCallbacks leaderCallbacks(LeaderElectionConfiguration config) {
7878
return new LeaderCallbacks(
79-
this::startLeading,
80-
this::stopLeading,
81-
leader -> log.info("New leader with identity: {}", leader));
79+
() -> {
80+
config.getLeaderCallbacks().ifPresent(LeaderCallbacks::onStartLeading);
81+
LeaderElectionManager.this.startLeading();
82+
},
83+
() -> {
84+
config.getLeaderCallbacks().ifPresent(LeaderCallbacks::onStopLeading);
85+
LeaderElectionManager.this.stopLeading();
86+
},
87+
leader -> {
88+
config.getLeaderCallbacks().ifPresent(cb -> cb.onNewLeader(leader));
89+
log.info("New leader with identity: {}", leader);
90+
});
8291
}
8392

8493
private void startLeading() {

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/LeaderElectionConfiguration.java

+15-5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import java.time.Duration;
44
import java.util.Optional;
55

6+
import io.fabric8.kubernetes.client.extended.leaderelection.LeaderCallbacks;
7+
68
public class LeaderElectionConfiguration {
79

810
public static final Duration LEASE_DURATION_DEFAULT_VALUE = Duration.ofSeconds(15);
@@ -17,13 +19,15 @@ public class LeaderElectionConfiguration {
1719
private final Duration renewDeadline;
1820
private final Duration retryPeriod;
1921

22+
private final LeaderCallbacks leaderCallbacks;
23+
2024
public LeaderElectionConfiguration(String leaseName, String leaseNamespace, String identity) {
2125
this(
2226
leaseName,
2327
leaseNamespace,
2428
LEASE_DURATION_DEFAULT_VALUE,
2529
RENEW_DEADLINE_DEFAULT_VALUE,
26-
RETRY_PERIOD_DEFAULT_VALUE, identity);
30+
RETRY_PERIOD_DEFAULT_VALUE, identity, null);
2731
}
2832

2933
public LeaderElectionConfiguration(String leaseName, String leaseNamespace) {
@@ -32,7 +36,7 @@ public LeaderElectionConfiguration(String leaseName, String leaseNamespace) {
3236
leaseNamespace,
3337
LEASE_DURATION_DEFAULT_VALUE,
3438
RENEW_DEADLINE_DEFAULT_VALUE,
35-
RETRY_PERIOD_DEFAULT_VALUE, null);
39+
RETRY_PERIOD_DEFAULT_VALUE, null, null);
3640
}
3741

3842
public LeaderElectionConfiguration(String leaseName) {
@@ -41,7 +45,7 @@ public LeaderElectionConfiguration(String leaseName) {
4145
null,
4246
LEASE_DURATION_DEFAULT_VALUE,
4347
RENEW_DEADLINE_DEFAULT_VALUE,
44-
RETRY_PERIOD_DEFAULT_VALUE, null);
48+
RETRY_PERIOD_DEFAULT_VALUE, null, null);
4549
}
4650

4751
public LeaderElectionConfiguration(
@@ -50,7 +54,7 @@ public LeaderElectionConfiguration(
5054
Duration leaseDuration,
5155
Duration renewDeadline,
5256
Duration retryPeriod) {
53-
this(leaseName, leaseNamespace, leaseDuration, renewDeadline, retryPeriod, null);
57+
this(leaseName, leaseNamespace, leaseDuration, renewDeadline, retryPeriod, null, null);
5458
}
5559

5660
public LeaderElectionConfiguration(
@@ -59,13 +63,15 @@ public LeaderElectionConfiguration(
5963
Duration leaseDuration,
6064
Duration renewDeadline,
6165
Duration retryPeriod,
62-
String identity) {
66+
String identity,
67+
LeaderCallbacks leaderCallbacks) {
6368
this.leaseName = leaseName;
6469
this.leaseNamespace = leaseNamespace;
6570
this.leaseDuration = leaseDuration;
6671
this.renewDeadline = renewDeadline;
6772
this.retryPeriod = retryPeriod;
6873
this.identity = identity;
74+
this.leaderCallbacks = leaderCallbacks;
6975
}
7076

7177
public Optional<String> getLeaseNamespace() {
@@ -91,4 +97,8 @@ public Duration getRetryPeriod() {
9197
public Optional<String> getIdentity() {
9298
return Optional.ofNullable(identity);
9399
}
100+
101+
public Optional<LeaderCallbacks> getLeaderCallbacks() {
102+
return Optional.ofNullable(leaderCallbacks);
103+
}
94104
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package io.javaoperatorsdk.operator.api.config;
2+
3+
import java.time.Duration;
4+
5+
import io.fabric8.kubernetes.client.extended.leaderelection.LeaderCallbacks;
6+
7+
import static io.javaoperatorsdk.operator.api.config.LeaderElectionConfiguration.*;
8+
9+
public final class LeaderElectionConfigurationBuilder {
10+
11+
private String leaseName;
12+
private String leaseNamespace;
13+
private String identity;
14+
private Duration leaseDuration = LEASE_DURATION_DEFAULT_VALUE;
15+
private Duration renewDeadline = RENEW_DEADLINE_DEFAULT_VALUE;
16+
private Duration retryPeriod = RETRY_PERIOD_DEFAULT_VALUE;
17+
private LeaderCallbacks leaderCallbacks;
18+
19+
private LeaderElectionConfigurationBuilder(String leaseName) {
20+
this.leaseName = leaseName;
21+
}
22+
23+
public static LeaderElectionConfigurationBuilder aLeaderElectionConfiguration(String leaseName) {
24+
return new LeaderElectionConfigurationBuilder(leaseName);
25+
}
26+
27+
public LeaderElectionConfigurationBuilder withLeaseNamespace(String leaseNamespace) {
28+
this.leaseNamespace = leaseNamespace;
29+
return this;
30+
}
31+
32+
public LeaderElectionConfigurationBuilder withIdentity(String identity) {
33+
this.identity = identity;
34+
return this;
35+
}
36+
37+
public LeaderElectionConfigurationBuilder withLeaseDuration(Duration leaseDuration) {
38+
this.leaseDuration = leaseDuration;
39+
return this;
40+
}
41+
42+
public LeaderElectionConfigurationBuilder withRenewDeadline(Duration renewDeadline) {
43+
this.renewDeadline = renewDeadline;
44+
return this;
45+
}
46+
47+
public LeaderElectionConfigurationBuilder withRetryPeriod(Duration retryPeriod) {
48+
this.retryPeriod = retryPeriod;
49+
return this;
50+
}
51+
52+
public LeaderElectionConfigurationBuilder withLeaderCallbacks(LeaderCallbacks leaderCallbacks) {
53+
this.leaderCallbacks = leaderCallbacks;
54+
return this;
55+
}
56+
57+
public LeaderElectionConfiguration build() {
58+
return new LeaderElectionConfiguration(leaseName, leaseNamespace, leaseDuration, renewDeadline,
59+
retryPeriod, identity, leaderCallbacks);
60+
}
61+
}

0 commit comments

Comments
 (0)