Skip to content

Commit 785422b

Browse files
committed
fix: leader election stop deadlock
1 parent c68282a commit 785422b

File tree

2 files changed

+8
-2
lines changed
  • operator-framework-core/src/main/java/io/javaoperatorsdk/operator
  • sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample

2 files changed

+8
-2
lines changed

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,11 @@ public Operator(KubernetesClient kubernetesClient, ConfigurationService configur
6767

6868
/** Adds a shutdown hook that automatically calls {@link #stop()} when the app shuts down. */
6969
public void installShutdownHook() {
70-
Runtime.getRuntime().addShutdownHook(new Thread(this::stop));
70+
if (!leaderElectionManager.isLeaderElectionEnabled()) {
71+
Runtime.getRuntime().addShutdownHook(new Thread(this::stop));
72+
} else {
73+
log.warn("Leader election is on, shutdown hook will not be installed.");
74+
}
7175
}
7276

7377
public KubernetesClient getKubernetesClient() {
@@ -114,6 +118,7 @@ public void stop() throws OperatorException {
114118
"Operator SDK {} is shutting down...", configurationService.getVersion().getSdkVersion());
115119
controllerManager.stop();
116120
ExecutorServiceManager.stop();
121+
leaderElectionManager.stop();
117122
if (configurationService.closeClientOnStop()) {
118123
kubernetesClient.close();
119124
}

sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageOperator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.io.IOException;
44

5+
import io.javaoperatorsdk.operator.api.config.LeaderElectionConfiguration;
56
import org.slf4j.Logger;
67
import org.slf4j.LoggerFactory;
78
import org.takes.facets.fork.FkRegex;
@@ -24,7 +25,7 @@ public static void main(String[] args) throws IOException {
2425
log.info("WebServer Operator starting!");
2526

2627
KubernetesClient client = new KubernetesClientBuilder().build();
27-
Operator operator = new Operator(client);
28+
Operator operator = new Operator(client,o->o.withLeaderElectionConfiguration(new LeaderElectionConfiguration("nameaa")));
2829
String reconcilerEnvVar = System.getenv(WEBPAGE_RECONCILER_ENV);
2930
if (WEBPAGE_CLASSIC_RECONCILER_ENV_VALUE.equals(reconcilerEnvVar)) {
3031
operator.register(new WebPageReconciler(client));

0 commit comments

Comments
 (0)