This is an automated email from the ASF dual-hosted git repository.

dsmiley pushed a commit to branch branch_10x
in repository https://gitbox.apache.org/repos/asf/solr.git

commit 82cb67b96bd05c2fe16f9618a59deb6a57bd9d2f
Author: Jan Høydahl <[email protected]>
AuthorDate: Wed Aug 5 11:30:04 2026 +0200

    Speed up TestOnReconnectListenerSupport by porting to SolrCloudTestCase 
(#4702)
    
    (cherry picked from commit e8cc2dc373a31341d3b9562c65a71f707f9724f6)
---
 .../solr/cloud/TestOnReconnectListenerSupport.java | 131 +++++++--------------
 1 file changed, 41 insertions(+), 90 deletions(-)

diff --git 
a/solr/core/src/test/org/apache/solr/cloud/TestOnReconnectListenerSupport.java 
b/solr/core/src/test/org/apache/solr/cloud/TestOnReconnectListenerSupport.java
index e5cefb2b231..39dc89dd877 100644
--- 
a/solr/core/src/test/org/apache/solr/cloud/TestOnReconnectListenerSupport.java
+++ 
b/solr/core/src/test/org/apache/solr/cloud/TestOnReconnectListenerSupport.java
@@ -17,63 +17,42 @@
 
 package org.apache.solr.cloud;
 
-import static org.apache.solr.common.cloud.ZkStateReader.CORE_NAME_PROP;
-
-import java.lang.invoke.MethodHandles;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import org.apache.solr.SolrTestCaseJ4.SuppressSSL;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.common.cloud.OnReconnect;
 import org.apache.solr.common.cloud.Replica;
+import org.apache.solr.common.util.TimeSource;
 import org.apache.solr.core.CoreContainer;
 import org.apache.solr.core.SolrCore;
-import org.apache.solr.embedded.JettySolrRunner;
 import org.apache.solr.schema.ZkIndexSchemaReader;
+import org.apache.solr.util.TimeOut;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 @SuppressSSL(bugUrl = "https://issues.apache.org/jira/browse/SOLR-5776";)
-public class TestOnReconnectListenerSupport extends 
AbstractFullDistribZkTestBase {
-
-  private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
-  public TestOnReconnectListenerSupport() {
-    super();
-    sliceCount = 2;
-    fixShardCount(3);
-  }
+public class TestOnReconnectListenerSupport extends SolrCloudTestCase {
 
   @BeforeClass
-  public static void initSysProperties() {
+  public static void setupCluster() throws Exception {
     System.setProperty("managed.schema.mutable", "false");
-    System.setProperty("solr.index.updatelog.enabled", "true");
-  }
-
-  @Override
-  protected String getCloudSolrConfig() {
-    return "solrconfig-managed-schema.xml";
+    configureCluster(1).addConfig("conf1", 
configset("cloud-managed")).configure();
   }
 
   @Test
   public void test() throws Exception {
-    waitForThingsToLevelOut(30, TimeUnit.SECONDS);
-
     String testCollectionName = "c8n_onreconnect_1x1";
-    String shardId = "shard1";
-    createCollectionRetry(testCollectionName, "conf1", 1, 1);
+    CollectionAdminRequest.createCollection(testCollectionName, "conf1", 1, 1)
+        .process(cluster.getSolrClient());
+    cluster.waitForActiveCollection(testCollectionName, 1, 1);
 
-    Replica leader = getShardLeader(testCollectionName, shardId, 30 /* timeout 
secs */);
-    JettySolrRunner leaderJetty = getJettyOnPort(getReplicaPort(leader));
-
-    // get the ZkController for the node hosting the leader
-    CoreContainer cores = leaderJetty.getCoreContainer();
+    Replica leader = 
getCollectionState(testCollectionName).getReplicas().get(0);
+    CoreContainer cores = cluster.getJettySolrRunner(0).getCoreContainer();
     ZkController zkController = cores.getZkController();
     assertNotNull("ZkController is null", zkController);
 
-    String leaderCoreName = leader.getStr(CORE_NAME_PROP);
+    String leaderCoreName = leader.getCoreName();
     String leaderCoreId;
     try (SolrCore leaderCore = cores.getCore(leaderCoreName)) {
       assertNotNull("SolrCore for " + leaderCoreName + " not found!", 
leaderCore);
@@ -81,33 +60,16 @@ public class TestOnReconnectListenerSupport extends 
AbstractFullDistribZkTestBas
     }
 
     // verify the ZkIndexSchemaReader is a registered OnReconnect listener
-    Set<OnReconnect> listeners = zkController.getCurrentOnReconnectListeners();
-    assertNotNull("ZkController returned null OnReconnect listeners", 
listeners);
-    ZkIndexSchemaReader expectedListener = null;
-    for (OnReconnect listener : listeners) {
-      if (listener instanceof ZkIndexSchemaReader reader) {
-        if (leaderCoreId.equals(reader.getUniqueCoreId())) {
-          expectedListener = reader;
-          break;
-        }
-      }
-    }
     assertNotNull(
         "ZkIndexSchemaReader for core "
             + leaderCoreName
             + " not registered as an OnReconnect listener and should be",
-        expectedListener);
+        findSchemaReaderListener(zkController, leaderCoreId));
 
-    // reload the collection
-    boolean wasReloaded = reloadCollection(leader, testCollectionName);
-    assertTrue(
-        "Collection '"
-            + testCollectionName
-            + "' failed to reload within a reasonable amount of time!",
-        wasReloaded);
+    // reload the collection; the reloaded core should be registered as an 
OnReconnect listener
+    // and the old core should not be
+    
CollectionAdminRequest.reloadCollection(testCollectionName).process(cluster.getSolrClient());
 
-    // after reload, the new core should be registered as an OnReconnect 
listener and the old should
-    // not be
     String reloadedLeaderCoreId;
     try (SolrCore leaderCore = cores.getCore(leaderCoreName)) {
       reloadedLeaderCoreId = leaderCore.getName() + ":" + 
leaderCore.getStartNanoTime();
@@ -116,51 +78,40 @@ public class TestOnReconnectListenerSupport extends 
AbstractFullDistribZkTestBas
     // they shouldn't be equal after reload
     assertNotEquals(leaderCoreId, reloadedLeaderCoreId);
 
-    listeners = zkController.getCurrentOnReconnectListeners();
-    assertNotNull("ZkController returned null OnReconnect listeners", 
listeners);
-
-    expectedListener = null; // reset
-    for (OnReconnect listener : listeners) {
-      if (listener instanceof ZkIndexSchemaReader reader) {
-        if (leaderCoreId.equals(reader.getUniqueCoreId())) {
-          fail(
-              "Previous core "
-                  + leaderCoreId
-                  + " should no longer be a registered OnReconnect listener! 
Current listeners: "
-                  + listeners);
-        } else if (reloadedLeaderCoreId.equals(reader.getUniqueCoreId())) {
-          expectedListener = reader;
-          break;
-        }
-      }
-    }
-
+    assertNull(
+        "Previous core "
+            + leaderCoreId
+            + " should no longer be a registered OnReconnect listener! Current 
listeners: "
+            + zkController.getCurrentOnReconnectListeners(),
+        findSchemaReaderListener(zkController, leaderCoreId));
     assertNotNull(
         "ZkIndexSchemaReader for core "
             + reloadedLeaderCoreId
             + " not registered as an OnReconnect listener and should be",
-        expectedListener);
+        findSchemaReaderListener(zkController, reloadedLeaderCoreId));
 
-    // try to clean up
-    try {
-      
CollectionAdminRequest.deleteCollection(testCollectionName).process(cloudClient);
-    } catch (Exception e) {
-      // don't fail the test
-      log.warn("Could not delete collection {} after test completed", 
testCollectionName);
-    }
+    // deleting the collection should unregister the listener once the core 
closes
+    
CollectionAdminRequest.deleteCollection(testCollectionName).process(cluster.getSolrClient());
 
-    listeners = zkController.getCurrentOnReconnectListeners();
+    TimeOut timeOut = new TimeOut(30, TimeUnit.SECONDS, TimeSource.NANO_TIME);
+    timeOut.waitFor(
+        "Core "
+            + reloadedLeaderCoreId
+            + " should no longer be a registered OnReconnect listener after 
collection delete!",
+        () -> findSchemaReaderListener(zkController, reloadedLeaderCoreId) == 
null);
+  }
+
+  /** Returns the registered {@link ZkIndexSchemaReader} listener for the 
given core id, if any. */
+  private static ZkIndexSchemaReader findSchemaReaderListener(
+      ZkController zkController, String coreId) {
+    Set<OnReconnect> listeners = zkController.getCurrentOnReconnectListeners();
+    assertNotNull("ZkController returned null OnReconnect listeners", 
listeners);
     for (OnReconnect listener : listeners) {
-      if (listener instanceof ZkIndexSchemaReader reader) {
-        if (reloadedLeaderCoreId.equals(reader.getUniqueCoreId())) {
-          fail(
-              "Previous core "
-                  + reloadedLeaderCoreId
-                  + " should no longer be a registered OnReconnect listener 
after collection delete!");
-        }
+      if (listener instanceof ZkIndexSchemaReader reader
+          && coreId.equals(reader.getUniqueCoreId())) {
+        return reader;
       }
     }
-
-    log.info("TestOnReconnectListenerSupport succeeded ... shutting down 
now!");
+    return null;
   }
 }

Reply via email to