patsonluk commented on code in PR #909: URL: https://github.com/apache/solr/pull/909#discussion_r915363420
########## solr/core/src/test/org/apache/solr/cloud/overseer/ZkStateReaderTest.java: ########## @@ -184,16 +195,210 @@ public void testWatchedCollectionCreation() throws Exception { writer.enqueueUpdate(reader.getClusterState(), Collections.singletonList(wc), null); writer.writePendingUpdates(); - assertTrue(zkClient.exists(ZkStateReader.COLLECTIONS_ZKNODE + "/c1/state.json", true)); + assertTrue( + fixture.zkClient.exists(ZkStateReader.COLLECTIONS_ZKNODE + "/c1/state.json", true)); // reader.forceUpdateCollection("c1"); reader.waitForState("c1", TIMEOUT, TimeUnit.SECONDS, (n, c) -> c != null); ClusterState.CollectionRef ref = reader.getClusterState().getCollectionRef("c1"); assertNotNull(ref); assertFalse(ref.isLazilyLoaded()); + } + } + + public void testForciblyRefreshAllClusterState() throws Exception { + try (TestFixture fixture = setupTestFixture("testForciblyRefreshAllClusterState")) { + ZkStateWriter writer = fixture.writer; + ZkStateReader reader = fixture.reader; + + reader.registerCore("c1"); // watching c1, so it should get non lazy reference + fixture.zkClient.makePath(ZkStateReader.COLLECTIONS_ZKNODE + "/c1", true); + + reader.forciblyRefreshAllClusterStateSlow(); + // Initially there should be no c1 collection. + assertNull(reader.getClusterState().getCollectionRef("c1")); + + // create new collection + DocCollection state = + new DocCollection( + "c1", + new HashMap<>(), + Map.of(ZkStateReader.CONFIGNAME_PROP, ConfigSetsHandler.DEFAULT_CONFIGSET_NAME), + DocRouter.DEFAULT, + 0); + ZkWriteCommand wc = new ZkWriteCommand("c1", state); + writer.enqueueUpdate(reader.getClusterState(), Collections.singletonList(wc), null); + writer.writePendingUpdates(); + + assertTrue( + fixture.zkClient.exists(ZkStateReader.COLLECTIONS_ZKNODE + "/c1/state.json", true)); + + reader.forciblyRefreshAllClusterStateSlow(); + ClusterState.CollectionRef ref = reader.getClusterState().getCollectionRef("c1"); + assertNotNull(ref); + assertFalse(ref.isLazilyLoaded()); + assertEquals(0, ref.get().getZNodeVersion()); + + // update the collection + state = + new DocCollection( + "c1", + new HashMap<>(), + Map.of(ZkStateReader.CONFIGNAME_PROP, ConfigSetsHandler.DEFAULT_CONFIGSET_NAME), + DocRouter.DEFAULT, + ref.get().getZNodeVersion()); + wc = new ZkWriteCommand("c1", state); + writer.enqueueUpdate(reader.getClusterState(), Collections.singletonList(wc), null); + writer.writePendingUpdates(); + + reader.forciblyRefreshAllClusterStateSlow(); + ref = reader.getClusterState().getCollectionRef("c1"); + assertNotNull(ref); + assertFalse(ref.isLazilyLoaded()); + assertEquals(1, ref.get().getZNodeVersion()); + + // delete the collection c1, add a collection c2 that is NOT watched + ZkWriteCommand wc1 = new ZkWriteCommand("c1", null); + + fixture.zkClient.makePath(ZkStateReader.COLLECTIONS_ZKNODE + "/c2", true); + state = + new DocCollection( + "c2", + new HashMap<>(), + Map.of(ZkStateReader.CONFIGNAME_PROP, ConfigSetsHandler.DEFAULT_CONFIGSET_NAME), + DocRouter.DEFAULT, + 0); + ZkWriteCommand wc2 = new ZkWriteCommand("c2", state); + + writer.enqueueUpdate(reader.getClusterState(), Arrays.asList(wc1, wc2), null); + writer.writePendingUpdates(); + + reader.forciblyRefreshAllClusterStateSlow(); + ref = reader.getClusterState().getCollectionRef("c1"); + assertNull(ref); + + ref = reader.getClusterState().getCollectionRef("c2"); + assertNotNull(ref); + assert (ref.isLazilyLoaded()); // c2 should be lazily loaded as it's not watched Review Comment: good catch thanks! -- 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: issues-unsubscr...@solr.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org For additional commands, e-mail: issues-h...@solr.apache.org