diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java index 7aa29c98ae..0da3d6742b 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java @@ -203,6 +203,11 @@ public synchronized void start() { public void stop() throws OperatorException { Duration reconciliationTerminationTimeout = configurationService.reconciliationTerminationTimeout(); + + // Always stop the executor service manager to prevent dangling threads, + // even if the operator didn't fully start + configurationService.getExecutorServiceManager().stop(reconciliationTerminationTimeout); + if (!started) { return; } @@ -210,7 +215,6 @@ public void stop() throws OperatorException { "Operator SDK {} is shutting down...", configurationService.getVersion().getSdkVersion()); controllerManager.stop(); - configurationService.getExecutorServiceManager().stop(reconciliationTerminationTimeout); leaderElectionManager.stop(); if (configurationService.closeClientOnStop()) { getKubernetesClient().close();