From f13b7f496d10cc23ec7d96f4d61bb2572edb9647 Mon Sep 17 00:00:00 2001 From: r4mercur Date: Sun, 1 Mar 2026 15:49:46 +0100 Subject: [PATCH 1/4] SOLR-17550: preferred Overseer might not work add testcase to identify wrong method behaviour of setPreferredOverseer() in ZkController --- .../org/apache/solr/cloud/ZkController.java | 2 +- .../apache/solr/cloud/ZkControllerTest.java | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java b/solr/core/src/java/org/apache/solr/cloud/ZkController.java index 06bfdf24df88..900f43a0410a 100644 --- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java +++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java @@ -2609,7 +2609,7 @@ public void setPreferredOverseer() throws KeeperException, InterruptedException MapWriter props = ew -> ew.put(Overseer.QUEUE_OPERATION, ADDROLE.toString().toLowerCase(Locale.ROOT)) - .put(getNodeName(), getNodeName()) + .put(getNodeName(), getNodeName()) // should the bug be fixed by using "node" instead of getNodeName() as key? .put("role", "overseer") .put("persist", "false"); log.warn( diff --git a/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java b/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java index ebe2640bcb58..ee88eed23211 100644 --- a/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java @@ -37,6 +37,8 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; + +import org.apache.logging.log4j.core.Core; import org.apache.solr.SolrTestCaseJ4; import org.apache.solr.client.api.util.SolrVersion; import org.apache.solr.client.solrj.jetty.HttpJettySolrClient; @@ -767,6 +769,45 @@ public void testOverseerEnabledClusterPropertyTrue() throws Exception { } } + @Test + public void testSetPreferredOverseer() throws Exception { + Path zkDir = createTempDir("testSetPreferredOverseer"); + ZkTestServer server = new ZkTestServer(zkDir); + try { + server.run(); + CoreContainer cc = getCoreContainer(); + CloudConfig cloudConfig = new CloudConfig.CloudConfigBuilder("127.0.0.1", 8983).build(); + try (ZkController zkController = + new ZkController(cc, server.getZkAddress(), TIMEOUT, cloudConfig)) { + zkController.setPreferredOverseer(); + OverseerTaskQueue queue = zkController.getOverseerCollectionQueue(); + byte[] messageBytes = queue.peek(); + @SuppressWarnings("unchecked") + Map message = (Map) Utils.fromJSON(messageBytes); + String nodeName = zkController.getNodeName(); + assertEquals( + "addrole operation", + "addrole", + message.get(Overseer.QUEUE_OPERATION)); + assertEquals( + "node key with node name as value", + nodeName, + message.get("node")); + assertEquals("overseer role", "overseer", message.get("role")); + assertEquals( + "persist as false", "false", message.get("persist")); + assertFalse( + "Node name '" + nodeName + "' != as message key", + message.containsKey(nodeName)); + assertEquals("4 keys", 4, message.size()); + } finally { + cc.shutdown(); + } + } finally { + server.shutdown(); + } + } + private CoreContainer getCoreContainer() { return new MockCoreContainer(); } From 740fb974f387c5439860574cc827de648d5ebe7c Mon Sep 17 00:00:00 2001 From: r4mercur Date: Sun, 1 Mar 2026 19:21:48 +0100 Subject: [PATCH 2/4] SOLR-17550: preferred Overseer might not work fix import after ./gradlew check & ./gradlew tidy --- .../org/apache/solr/cloud/ZkController.java | 5 ++++- .../apache/solr/cloud/ZkControllerTest.java | 18 ++++-------------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java b/solr/core/src/java/org/apache/solr/cloud/ZkController.java index 900f43a0410a..b7a6358bedf1 100644 --- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java +++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java @@ -2609,7 +2609,10 @@ public void setPreferredOverseer() throws KeeperException, InterruptedException MapWriter props = ew -> ew.put(Overseer.QUEUE_OPERATION, ADDROLE.toString().toLowerCase(Locale.ROOT)) - .put(getNodeName(), getNodeName()) // should the bug be fixed by using "node" instead of getNodeName() as key? + .put( + getNodeName(), + getNodeName()) // should the bug be fixed by using "node" instead of + // getNodeName() as key? .put("role", "overseer") .put("persist", "false"); log.warn( diff --git a/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java b/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java index ee88eed23211..f44f32428fa8 100644 --- a/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java @@ -37,8 +37,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; - -import org.apache.logging.log4j.core.Core; import org.apache.solr.SolrTestCaseJ4; import org.apache.solr.client.api.util.SolrVersion; import org.apache.solr.client.solrj.jetty.HttpJettySolrClient; @@ -785,20 +783,12 @@ public void testSetPreferredOverseer() throws Exception { @SuppressWarnings("unchecked") Map message = (Map) Utils.fromJSON(messageBytes); String nodeName = zkController.getNodeName(); - assertEquals( - "addrole operation", - "addrole", - message.get(Overseer.QUEUE_OPERATION)); - assertEquals( - "node key with node name as value", - nodeName, - message.get("node")); + assertEquals("addrole operation", "addrole", message.get(Overseer.QUEUE_OPERATION)); + assertEquals("node key with node name as value", nodeName, message.get("node")); assertEquals("overseer role", "overseer", message.get("role")); - assertEquals( - "persist as false", "false", message.get("persist")); + assertEquals("persist as false", "false", message.get("persist")); assertFalse( - "Node name '" + nodeName + "' != as message key", - message.containsKey(nodeName)); + "Node name '" + nodeName + "' != as message key", message.containsKey(nodeName)); assertEquals("4 keys", 4, message.size()); } finally { cc.shutdown(); From eafcea6fc552fd4f8360b8f5f79a8ab41e785d23 Mon Sep 17 00:00:00 2001 From: r4mercur Date: Sun, 1 Mar 2026 19:49:53 +0100 Subject: [PATCH 3/4] SOLR-17550: preferred Overseer might not work fix import after ./gradlew check & ./gradlew tidy & change test --- .../org/apache/solr/cloud/ZkController.java | 5 +--- .../apache/solr/cloud/ZkControllerTest.java | 25 ++++++++++--------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java b/solr/core/src/java/org/apache/solr/cloud/ZkController.java index b7a6358bedf1..fe35992b1f93 100644 --- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java +++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java @@ -2609,10 +2609,7 @@ public void setPreferredOverseer() throws KeeperException, InterruptedException MapWriter props = ew -> ew.put(Overseer.QUEUE_OPERATION, ADDROLE.toString().toLowerCase(Locale.ROOT)) - .put( - getNodeName(), - getNodeName()) // should the bug be fixed by using "node" instead of - // getNodeName() as key? + .put("node", getNodeName()) .put("role", "overseer") .put("persist", "false"); log.warn( diff --git a/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java b/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java index f44f32428fa8..205f311140fd 100644 --- a/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java @@ -32,6 +32,7 @@ import java.util.Map; import java.util.Optional; import java.util.Properties; +import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; @@ -768,8 +769,8 @@ public void testOverseerEnabledClusterPropertyTrue() throws Exception { } @Test - public void testSetPreferredOverseer() throws Exception { - Path zkDir = createTempDir("testSetPreferredOverseer"); + public void testSetPreferredOverseerHasRightKeysSet() throws Exception { + Path zkDir = createTempDir("testSetPreferredOverseerHasRightKeysSet"); ZkTestServer server = new ZkTestServer(zkDir); try { server.run(); @@ -778,18 +779,18 @@ public void testSetPreferredOverseer() throws Exception { try (ZkController zkController = new ZkController(cc, server.getZkAddress(), TIMEOUT, cloudConfig)) { zkController.setPreferredOverseer(); - OverseerTaskQueue queue = zkController.getOverseerCollectionQueue(); - byte[] messageBytes = queue.peek(); + byte[] messageBytes = zkController.getOverseerCollectionQueue().peek(); + @SuppressWarnings("unchecked") Map message = (Map) Utils.fromJSON(messageBytes); - String nodeName = zkController.getNodeName(); - assertEquals("addrole operation", "addrole", message.get(Overseer.QUEUE_OPERATION)); - assertEquals("node key with node name as value", nodeName, message.get("node")); - assertEquals("overseer role", "overseer", message.get("role")); - assertEquals("persist as false", "false", message.get("persist")); - assertFalse( - "Node name '" + nodeName + "' != as message key", message.containsKey(nodeName)); - assertEquals("4 keys", 4, message.size()); + + assertEquals( + Set.of(Overseer.QUEUE_OPERATION, "node", "role", "persist"), + message.keySet()); + assertEquals("addrole", message.get(Overseer.QUEUE_OPERATION)); + assertEquals(zkController.getNodeName(), message.get("node")); + assertEquals("overseer", message.get("role")); + assertEquals("false", message.get("persist")); } finally { cc.shutdown(); } From 9e238efa57e23b100dc826973d418ab1846e9802 Mon Sep 17 00:00:00 2001 From: r4mercur Date: Sun, 1 Mar 2026 19:59:12 +0100 Subject: [PATCH 4/4] SOLR-17550: preferred Overseer might not work ./gradlew tidy --- .../core/src/test/org/apache/solr/cloud/ZkControllerTest.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java b/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java index 205f311140fd..96ee3fde3274 100644 --- a/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java @@ -784,9 +784,7 @@ public void testSetPreferredOverseerHasRightKeysSet() throws Exception { @SuppressWarnings("unchecked") Map message = (Map) Utils.fromJSON(messageBytes); - assertEquals( - Set.of(Overseer.QUEUE_OPERATION, "node", "role", "persist"), - message.keySet()); + assertEquals(Set.of(Overseer.QUEUE_OPERATION, "node", "role", "persist"), message.keySet()); assertEquals("addrole", message.get(Overseer.QUEUE_OPERATION)); assertEquals(zkController.getNodeName(), message.get("node")); assertEquals("overseer", message.get("role"));