wangyang0918 commented on code in PR #24132:
URL: https://github.com/apache/flink/pull/24132#discussion_r1469121295
##########
flink-kubernetes/src/main/java/org/apache/flink/kubernetes/kubeclient/resources/KubernetesLeaderElector.java:
##########
@@ -55,17 +59,32 @@ public class KubernetesLeaderElector {
private final Object lock = new Object();
- private final ExecutorService executorService =
- Executors.newFixedThreadPool(
- 3, new
ExecutorThreadFactory("KubernetesLeaderElector-ExecutorService"));
+ private final NamespacedKubernetesClient kubernetesClient;
+ private final LeaderElectionConfig leaderElectionConfig;
+ private final ExecutorService executorService;
- private final LeaderElector internalLeaderElector;
+ private CompletableFuture<?> currentLeaderElectionSession =
FutureUtils.completedVoidFuture();
public KubernetesLeaderElector(
NamespacedKubernetesClient kubernetesClient,
KubernetesLeaderElectionConfiguration leaderConfig,
LeaderCallbackHandler leaderCallbackHandler) {
- final LeaderElectionConfig leaderElectionConfig =
+ this(
+ kubernetesClient,
+ leaderConfig,
+ leaderCallbackHandler,
+ Executors.newFixedThreadPool(
+ 3, new
ExecutorThreadFactory("KubernetesLeaderElector-ExecutorService")));
Review Comment:
Single thread pool is enough for now.
##########
flink-kubernetes/src/main/java/org/apache/flink/kubernetes/kubeclient/resources/KubernetesLeaderElector.java:
##########
@@ -86,12 +106,33 @@ public KubernetesLeaderElector(
newLeader,
leaderConfig.getConfigMapName())))
.build();
- internalLeaderElector =
- new LeaderElector(kubernetesClient, leaderElectionConfig,
executorService);
+ this.executorService = executorService;
+
LOG.info(
- "Create KubernetesLeaderElector {} with lock identity {}.",
- leaderConfig.getConfigMapName(),
- leaderConfig.getLockIdentity());
+ "Create KubernetesLeaderElector on lock {}.",
+ leaderElectionConfig.getLock().describe());
+ }
+
+ @GuardedBy("lock")
+ private void resetInternalLeaderElector() {
+ cancelCurrentLeaderElectionSession();
+
+ currentLeaderElectionSession =
+ currentLeaderElectionSession.thenCompose(
Review Comment:
It seems that `currentLeaderElectionSession.cancel(true)` will not cancel
the future of `LeaderElector#start()`.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]