Skip to content

Commit e7fcc7d

Browse files
Allow set an owner refernce when creating a lock for leader election
1 parent e19a0ec commit e7fcc7d

File tree

5 files changed

+62
-1
lines changed

5 files changed

+62
-1
lines changed

extended/src/main/java/io/kubernetes/client/extended/leaderelection/LeaderElectionConfig.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
*/
1313
package io.kubernetes.client.extended.leaderelection;
1414

15+
import io.kubernetes.client.openapi.models.V1OwnerReference;
16+
1517
import java.time.Duration;
1618

1719
public class LeaderElectionConfig {
@@ -24,14 +26,22 @@ public class LeaderElectionConfig {
2426

2527
private Duration retryPeriod;
2628

29+
private V1OwnerReference ownerReference;
30+
2731
public LeaderElectionConfig() {}
2832

2933
public LeaderElectionConfig(
3034
Lock lock, Duration leaseDuration, Duration renewDeadline, Duration retryPeriod) {
35+
this(lock, leaseDuration, renewDeadline, retryPeriod, null);
36+
}
37+
38+
public LeaderElectionConfig(
39+
Lock lock, Duration leaseDuration, Duration renewDeadline, Duration retryPeriod, V1OwnerReference ownerReference) {
3140
this.lock = lock;
3241
this.leaseDuration = leaseDuration;
3342
this.renewDeadline = renewDeadline;
3443
this.retryPeriod = retryPeriod;
44+
this.ownerReference = ownerReference;
3545
}
3646

3747
public Lock getLock() {
@@ -65,4 +75,12 @@ public Duration getRetryPeriod() {
6575
public void setRetryPeriod(Duration retryPeriod) {
6676
this.retryPeriod = retryPeriod;
6777
}
78+
79+
public V1OwnerReference getOwnerReference() {
80+
return ownerReference;
81+
}
82+
83+
public void setOwnerReference(V1OwnerReference ownerReference) {
84+
this.ownerReference = ownerReference;
85+
}
6886
}

extended/src/main/java/io/kubernetes/client/extended/leaderelection/LeaderElectionRecord.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
*/
1313
package io.kubernetes.client.extended.leaderelection;
1414

15+
import io.kubernetes.client.openapi.models.V1OwnerReference;
16+
1517
import java.util.Date;
1618

1719
public class LeaderElectionRecord {
@@ -26,6 +28,8 @@ public class LeaderElectionRecord {
2628

2729
private int leaderTransitions;
2830

31+
private V1OwnerReference ownerReference;
32+
2933
public LeaderElectionRecord() {}
3034

3135
public LeaderElectionRecord(
@@ -34,11 +38,22 @@ public LeaderElectionRecord(
3438
Date acquireTime,
3539
Date renewTime,
3640
int leaderTransitions) {
41+
this(holderIdentity, leaseDurationSeconds, acquireTime, renewTime, leaderTransitions, null);
42+
}
43+
44+
public LeaderElectionRecord(
45+
String holderIdentity,
46+
int leaseDurationSeconds,
47+
Date acquireTime,
48+
Date renewTime,
49+
int leaderTransitions,
50+
V1OwnerReference ownerReference) {
3751
this.holderIdentity = holderIdentity;
3852
this.leaseDurationSeconds = leaseDurationSeconds;
3953
this.acquireTime = acquireTime;
4054
this.renewTime = renewTime;
4155
this.leaderTransitions = leaderTransitions;
56+
this.ownerReference = ownerReference;
4257
}
4358

4459
public String getHolderIdentity() {
@@ -81,6 +96,14 @@ public void setLeaderTransitions(int leaderTransitions) {
8196
this.leaderTransitions = leaderTransitions;
8297
}
8398

99+
public V1OwnerReference getOwnerReference() {
100+
return ownerReference;
101+
}
102+
103+
public void setOwnerReference(V1OwnerReference ownerReference) {
104+
this.ownerReference = ownerReference;
105+
}
106+
84107
@Override
85108
public boolean equals(Object o) {
86109
if (this == o) return true;
@@ -95,6 +118,11 @@ public boolean equals(Object o) {
95118
} else {
96119
if (!holderIdentity.equals(that.holderIdentity)) return false;
97120
}
121+
if (ownerReference == null) {
122+
if (that.ownerReference != null) return false;
123+
} else {
124+
if (!ownerReference.equals(that.ownerReference)) return false;
125+
}
98126
if (acquireTime == null) {
99127
if (that.acquireTime != null) return false;
100128
} else {

extended/src/main/java/io/kubernetes/client/extended/leaderelection/resourcelock/ConfigMapLock.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import io.kubernetes.client.openapi.models.V1ConfigMap;
2222
import io.kubernetes.client.openapi.models.V1ObjectMeta;
2323
import java.net.HttpURLConnection;
24+
import java.util.Collections;
2425
import java.util.HashMap;
2526
import java.util.Map;
2627
import java.util.concurrent.atomic.AtomicReference;
@@ -89,6 +90,9 @@ public boolean create(LeaderElectionRecord record) {
8990
LeaderElectionRecordAnnotationKey,
9091
coreV1Client.getApiClient().getJSON().serialize(record));
9192
objectMeta.setAnnotations(annotations);
93+
if (record.getOwnerReference() != null) {
94+
objectMeta.setOwnerReferences(Collections.singletonList(record.getOwnerReference()));
95+
}
9296
configMap.setMetadata(objectMeta);
9397
V1ConfigMap createdConfigMap =
9498
coreV1Client.createNamespacedConfigMap(namespace, configMap, null, null, null);

extended/src/main/java/io/kubernetes/client/extended/leaderelection/resourcelock/EndpointsLock.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import io.kubernetes.client.openapi.models.V1Endpoints;
2222
import io.kubernetes.client.openapi.models.V1ObjectMeta;
2323
import java.net.HttpURLConnection;
24+
import java.util.Collections;
2425
import java.util.HashMap;
2526
import java.util.Map;
2627
import java.util.concurrent.atomic.AtomicReference;
@@ -89,6 +90,9 @@ public boolean create(LeaderElectionRecord record) {
8990
LeaderElectionRecordAnnotationKey,
9091
coreV1Client.getApiClient().getJSON().serialize(record));
9192
objectMeta.setAnnotations(annotations);
93+
if (record.getOwnerReference() != null) {
94+
objectMeta.setOwnerReferences(Collections.singletonList(record.getOwnerReference()));
95+
}
9296
endpoints.setMetadata(objectMeta);
9397
V1Endpoints createdendpoints =
9498
coreV1Client.createNamespacedEndpoints(namespace, endpoints, null, null, null);

extended/src/main/java/io/kubernetes/client/extended/leaderelection/resourcelock/LeaseLock.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.kubernetes.client.openapi.models.V1LeaseSpec;
2323
import io.kubernetes.client.openapi.models.V1ObjectMeta;
2424
import java.net.HttpURLConnection;
25+
import java.util.Collections;
2526
import java.util.concurrent.atomic.AtomicReference;
2627
import org.joda.time.DateTime;
2728
import org.slf4j.Logger;
@@ -62,11 +63,17 @@ public LeaderElectionRecord get() throws ApiException {
6263
@Override
6364
public boolean create(LeaderElectionRecord record) {
6465
try {
66+
V1ObjectMeta objectMeta = new V1ObjectMeta();
67+
objectMeta.setName(name);
68+
objectMeta.setNamespace(namespace);
69+
if (record.getOwnerReference() != null) {
70+
objectMeta.setOwnerReferences(Collections.singletonList(record.getOwnerReference()));
71+
}
6572
V1Lease createdLease =
6673
coordinationV1Api.createNamespacedLease(
6774
namespace,
6875
new V1Lease()
69-
.metadata(new V1ObjectMeta().namespace(namespace).name(name))
76+
.metadata(objectMeta)
7077
.spec(getLeaseFromRecord(record)),
7178
null,
7279
null,

0 commit comments

Comments
 (0)