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; } }
