From 8b6e0f127f662df1e254b574464bf1be27b40ebf Mon Sep 17 00:00:00 2001 From: Pierre Salagnac Date: Thu, 18 Dec 2025 18:54:05 +0100 Subject: [PATCH 1/2] Leader election: Remove pauseBeforeStart parameter --- .../java/org/apache/solr/cloud/ElectionContext.java | 2 +- .../java/org/apache/solr/cloud/LeaderElector.java | 2 +- .../apache/solr/cloud/OverseerElectionContext.java | 12 ++---------- .../solr/cloud/ShardLeaderElectionContext.java | 5 ++--- .../solr/cloud/ShardLeaderElectionContextBase.java | 3 +-- .../org/apache/solr/cloud/LeaderElectionTest.java | 5 ++--- 6 files changed, 9 insertions(+), 20 deletions(-) diff --git a/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java b/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java index b97681423cd..01d65a75492 100644 --- a/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java +++ b/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java @@ -65,7 +65,7 @@ public void cancelElection() throws InterruptedException, KeeperException { } } - abstract void runLeaderProcess(boolean weAreReplacement, int pauseBeforeStartMs) + abstract void runLeaderProcess(boolean weAreReplacement) throws KeeperException, InterruptedException; public void checkIfIamLeaderFired() {} diff --git a/solr/core/src/java/org/apache/solr/cloud/LeaderElector.java b/solr/core/src/java/org/apache/solr/cloud/LeaderElector.java index f058aefe295..f0d9026b69a 100644 --- a/solr/core/src/java/org/apache/solr/cloud/LeaderElector.java +++ b/solr/core/src/java/org/apache/solr/cloud/LeaderElector.java @@ -166,7 +166,7 @@ context.leaderSeqPath, watchedNode, getSeq(context.leaderSeqPath), context), protected void runIamLeaderProcess(final ElectionContext context, boolean weAreReplacement) throws KeeperException, InterruptedException { - context.runLeaderProcess(weAreReplacement, 0); + context.runLeaderProcess(weAreReplacement); } /** diff --git a/solr/core/src/java/org/apache/solr/cloud/OverseerElectionContext.java b/solr/core/src/java/org/apache/solr/cloud/OverseerElectionContext.java index 8eb8a6d1386..feb54b20c7a 100644 --- a/solr/core/src/java/org/apache/solr/cloud/OverseerElectionContext.java +++ b/solr/core/src/java/org/apache/solr/cloud/OverseerElectionContext.java @@ -53,8 +53,7 @@ public OverseerElectionContext( } @Override - void runLeaderProcess(boolean weAreReplacement, int pauseBeforeStartMs) - throws KeeperException, InterruptedException { + void runLeaderProcess(boolean weAreReplacement) throws KeeperException, InterruptedException { if (isClosed) { return; } @@ -63,14 +62,7 @@ void runLeaderProcess(boolean weAreReplacement, int pauseBeforeStartMs) ZkNodeProps myProps = new ZkNodeProps(ID, id); zkClient.makePath(leaderPath, Utils.toJSON(myProps), CreateMode.EPHEMERAL, true); - if (pauseBeforeStartMs > 0) { - try { - Thread.sleep(pauseBeforeStartMs); - } catch (InterruptedException e) { - Thread.interrupted(); - log.warn("Wait interrupted ", e); - } - } + synchronized (this) { if (!this.isClosed && !overseer.getZkController().getCoreContainer().isShutDown()) { overseer.start(id); diff --git a/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContext.java b/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContext.java index 116aee57d3f..df8cfff59d2 100644 --- a/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContext.java +++ b/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContext.java @@ -103,8 +103,7 @@ public ElectionContext copy() { * weAreReplacement: has someone else been the leader already? */ @Override - void runLeaderProcess(boolean weAreReplacement, int pauseBeforeStart) - throws KeeperException, InterruptedException { + void runLeaderProcess(boolean weAreReplacement) throws KeeperException, InterruptedException { String coreName = leaderProps.getStr(ZkStateReader.CORE_NAME_PROP); ActionThrottle lt; try (SolrCore core = cc.getCore(coreName)) { @@ -296,7 +295,7 @@ void runLeaderProcess(boolean weAreReplacement, int pauseBeforeStart) coreNodeName); zkController.getShardTerms(collection, shardId).setTermEqualsToLeader(coreNodeName); } - super.runLeaderProcess(weAreReplacement, 0); + super.runLeaderProcess(weAreReplacement); try (SolrCore core = cc.getCore(coreName)) { if (core != null) { core.getCoreDescriptor().getCloudDescriptor().setLeader(true); diff --git a/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContextBase.java b/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContextBase.java index 7f4548b6912..b9173384595 100644 --- a/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContextBase.java +++ b/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContextBase.java @@ -121,8 +121,7 @@ public void cancelElection() throws InterruptedException, KeeperException { } @Override - void runLeaderProcess(boolean weAreReplacement, int pauseBeforeStartMs) - throws KeeperException, InterruptedException { + void runLeaderProcess(boolean weAreReplacement) throws KeeperException, InterruptedException { // register as leader - if an ephemeral is already there, wait to see if it goes away String parent = ZkMaintenanceUtils.getZkParent(leaderPath); diff --git a/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java b/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java index c92645ed710..349c32506df 100644 --- a/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java @@ -93,9 +93,8 @@ public TestLeaderElectionContext( } @Override - void runLeaderProcess(boolean weAreReplacement, int pauseBeforeStartMs) - throws KeeperException, InterruptedException { - super.runLeaderProcess(weAreReplacement, pauseBeforeStartMs); + void runLeaderProcess(boolean weAreReplacement) throws KeeperException, InterruptedException { + super.runLeaderProcess(weAreReplacement); if (runLeaderDelay > 0) { log.info("Sleeping for {}ms to simulate leadership takeover delay", runLeaderDelay); Thread.sleep(runLeaderDelay); From 05591291a076fcf3261d0712becbfaa046962677 Mon Sep 17 00:00:00 2001 From: Pierre Salagnac Date: Thu, 18 Dec 2025 19:27:43 +0100 Subject: [PATCH 2/2] Changelog --- .../SOLR-18035-remove-election-pause-parameter.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 changelog/unreleased/SOLR-18035-remove-election-pause-parameter.yml diff --git a/changelog/unreleased/SOLR-18035-remove-election-pause-parameter.yml b/changelog/unreleased/SOLR-18035-remove-election-pause-parameter.yml new file mode 100644 index 00000000000..8032d4b62ae --- /dev/null +++ b/changelog/unreleased/SOLR-18035-remove-election-pause-parameter.yml @@ -0,0 +1,7 @@ +title: Remove unused parameter pauseBeforeStart from leader election code +type: removed +authors: + - name: Pierre Salagnac +links: + - name: SOLR-18035 + url: https://issues.apache.org/jira/browse/SOLR-18035