This is an automated email from the ASF dual-hosted git repository.
epugh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/main by this push:
new bb45627b2ad SOLR-17931: Deal with deprecated methods on DocCollection
(#3862)
bb45627b2ad is described below
commit bb45627b2ad6ac46d2feb7ce6c6b60000502ed2f
Author: Eric Pugh <[email protected]>
AuthorDate: Mon Nov 17 08:01:21 2025 -0500
SOLR-17931: Deal with deprecated methods on DocCollection (#3862)
Move test only methods to SolrCloudTestCase
---
.../test/org/apache/solr/cloud/AddReplicaTest.java | 18 +++++------
.../org/apache/solr/cloud/CleanupOldIndexTest.java | 3 +-
.../cloud/CloudExitableDirectoryReaderTest.java | 3 +-
.../solr/cloud/CollectionStateZnodeTest.java | 2 +-
.../solr/cloud/DeleteInactiveReplicaTest.java | 3 +-
.../DistribDocExpirationUpdateProcessorTest.java | 2 +-
.../solr/cloud/DistributedVersionInfoTest.java | 3 +-
.../solr/cloud/FullSolrCloudDistribCmdsTest.java | 10 +++---
.../cloud/TestLeaderElectionWithEmptyReplica.java | 3 +-
.../org/apache/solr/cloud/TestPullReplica.java | 33 ++++++++++---------
.../solr/cloud/TestPullReplicaErrorHandling.java | 6 ++--
.../org/apache/solr/cloud/TestTlogReplica.java | 18 +++++------
.../collections/CollectionTooManyReplicasTest.java | 2 +-
.../DistributedQueryComponentOptimizationTest.java | 3 +-
.../schema/ManagedSchemaRoundRobinCloudTest.java | 3 +-
.../apache/solr/schema/SchemaApiFailureTest.java | 3 +-
.../apache/solr/search/TestCoordinatorRole.java | 4 +--
.../solrj/io/stream/CloudAuthStreamTest.java | 3 +-
.../apache/solr/common/cloud/DocCollection.java | 37 ----------------------
.../cloud/TestCloudCollectionsListeners.java | 2 +-
.../common/cloud/TestCollectionStateWatchers.java | 20 ++++++++----
.../common/cloud/TestDocCollectionWatcher.java | 10 +++---
.../org/apache/solr/cloud/SolrCloudTestCase.java | 35 ++++++++++++++++++++
...bstractCollectionsAPIDistributedZkTestBase.java | 4 +--
.../client/solrj/apache/ConnectionReuseTest.java | 3 +-
25 files changed, 114 insertions(+), 119 deletions(-)
diff --git a/solr/core/src/test/org/apache/solr/cloud/AddReplicaTest.java
b/solr/core/src/test/org/apache/solr/cloud/AddReplicaTest.java
index fa2bdf84695..7590311a01f 100644
--- a/solr/core/src/test/org/apache/solr/cloud/AddReplicaTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/AddReplicaTest.java
@@ -74,17 +74,17 @@ public class AddReplicaTest extends SolrCloudTestCase {
DocCollection docCollection =
cloudClient.getClusterState().getCollectionOrNull(collection);
assertNotNull(docCollection);
assertEquals(4, docCollection.getReplicas().size());
- assertEquals(2,
docCollection.getReplicas(EnumSet.of(Replica.Type.NRT)).size());
- assertEquals(1,
docCollection.getReplicas(EnumSet.of(Replica.Type.TLOG)).size());
- assertEquals(1,
docCollection.getReplicas(EnumSet.of(Replica.Type.PULL)).size());
+ assertEquals(2, getReplicas(docCollection,
EnumSet.of(Replica.Type.NRT)).size());
+ assertEquals(1, getReplicas(docCollection,
EnumSet.of(Replica.Type.TLOG)).size());
+ assertEquals(1, getReplicas(docCollection,
EnumSet.of(Replica.Type.PULL)).size());
docCollection =
cloudClient.getClusterState().getCollectionOrNull(collection);
assertNotNull(docCollection);
// sanity check that everything is as before
assertEquals(4, docCollection.getReplicas().size());
- assertEquals(2,
docCollection.getReplicas(EnumSet.of(Replica.Type.NRT)).size());
- assertEquals(1,
docCollection.getReplicas(EnumSet.of(Replica.Type.TLOG)).size());
- assertEquals(1,
docCollection.getReplicas(EnumSet.of(Replica.Type.PULL)).size());
+ assertEquals(2, getReplicas(docCollection,
EnumSet.of(Replica.Type.NRT)).size());
+ assertEquals(1, getReplicas(docCollection,
EnumSet.of(Replica.Type.TLOG)).size());
+ assertEquals(1, getReplicas(docCollection,
EnumSet.of(Replica.Type.PULL)).size());
// adding any number of replicas is supported if an explicit create node
set is specified
// so test that as well
@@ -107,9 +107,9 @@ public class AddReplicaTest extends SolrCloudTestCase {
assertNotNull(docCollection);
// sanity check that everything is as before
assertEquals(9, docCollection.getReplicas().size());
- assertEquals(5,
docCollection.getReplicas(EnumSet.of(Replica.Type.NRT)).size());
- assertEquals(2,
docCollection.getReplicas(EnumSet.of(Replica.Type.TLOG)).size());
- assertEquals(2,
docCollection.getReplicas(EnumSet.of(Replica.Type.PULL)).size());
+ assertEquals(5, getReplicas(docCollection,
EnumSet.of(Replica.Type.NRT)).size());
+ assertEquals(2, getReplicas(docCollection,
EnumSet.of(Replica.Type.TLOG)).size());
+ assertEquals(2, getReplicas(docCollection,
EnumSet.of(Replica.Type.PULL)).size());
}
@Test
diff --git a/solr/core/src/test/org/apache/solr/cloud/CleanupOldIndexTest.java
b/solr/core/src/test/org/apache/solr/cloud/CleanupOldIndexTest.java
index 0a4e0d3c1c9..cc393c1ffab 100644
--- a/solr/core/src/test/org/apache/solr/cloud/CleanupOldIndexTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/CleanupOldIndexTest.java
@@ -23,7 +23,6 @@ import java.util.Date;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
-import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.SolrCore;
import org.apache.solr.embedded.JettySolrRunner;
@@ -117,7 +116,7 @@ public class CleanupOldIndexTest extends SolrCloudTestCase {
COLLECTION,
DEFAULT_TIMEOUT,
TimeUnit.SECONDS,
- (n, c) -> DocCollection.isFullyActive(n, c, 1, 2));
+ (n, c) -> SolrCloudTestCase.replicasForCollectionAreFullyActive(n,
c, 1, 2));
assertFalse(Files.isDirectory(oldIndexDir1));
assertFalse(Files.isDirectory(oldIndexDir2));
diff --git
a/solr/core/src/test/org/apache/solr/cloud/CloudExitableDirectoryReaderTest.java
b/solr/core/src/test/org/apache/solr/cloud/CloudExitableDirectoryReaderTest.java
index 041ab757eb8..e4436b62532 100644
---
a/solr/core/src/test/org/apache/solr/cloud/CloudExitableDirectoryReaderTest.java
+++
b/solr/core/src/test/org/apache/solr/cloud/CloudExitableDirectoryReaderTest.java
@@ -33,7 +33,6 @@ import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.client.solrj.response.QueryResponse;
-import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.embedded.JettySolrRunner;
@@ -93,7 +92,7 @@ public class CloudExitableDirectoryReaderTest extends
SolrCloudTestCase {
COLLECTION,
DEFAULT_TIMEOUT,
TimeUnit.SECONDS,
- (n, c) -> DocCollection.isFullyActive(n, c, 2, 1));
+ (n, c) -> SolrCloudTestCase.replicasForCollectionAreFullyActive(n,
c, 2, 1));
fiveHundredsByNode = new LinkedHashMap<>();
long httpOk = 0;
diff --git
a/solr/core/src/test/org/apache/solr/cloud/CollectionStateZnodeTest.java
b/solr/core/src/test/org/apache/solr/cloud/CollectionStateZnodeTest.java
index 454af307c97..ad31c1317cb 100644
--- a/solr/core/src/test/org/apache/solr/cloud/CollectionStateZnodeTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/CollectionStateZnodeTest.java
@@ -48,7 +48,7 @@ public class CollectionStateZnodeTest extends
SolrCloudTestCase {
waitForState(
"Collection not created",
collectionName,
- (n, c) -> DocCollection.isFullyActive(n, c, 2, 2));
+ (n, c) -> SolrCloudTestCase.replicasForCollectionAreFullyActive(n, c,
2, 2));
assertTrue(
"Collection path does not exist",
zkClient().exists(DocCollection.getCollectionPath(collectionName),
true));
diff --git
a/solr/core/src/test/org/apache/solr/cloud/DeleteInactiveReplicaTest.java
b/solr/core/src/test/org/apache/solr/cloud/DeleteInactiveReplicaTest.java
index 93ced0eeca1..e84e9e436dc 100644
--- a/solr/core/src/test/org/apache/solr/cloud/DeleteInactiveReplicaTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/DeleteInactiveReplicaTest.java
@@ -65,7 +65,8 @@ public class DeleteInactiveReplicaTest extends
SolrCloudTestCase {
"Expected a cluster of 2 shards and 2 replicas",
collectionName,
(n, c) -> {
- return DocCollection.isFullyActive(n, c, numShards,
replicationFactor);
+ return SolrCloudTestCase.replicasForCollectionAreFullyActive(
+ n, c, numShards, replicationFactor);
});
DocCollection collectionState = getCollectionState(collectionName);
diff --git
a/solr/core/src/test/org/apache/solr/cloud/DistribDocExpirationUpdateProcessorTest.java
b/solr/core/src/test/org/apache/solr/cloud/DistribDocExpirationUpdateProcessorTest.java
index b0a6419b233..9b506e2c8ed 100644
---
a/solr/core/src/test/org/apache/solr/cloud/DistribDocExpirationUpdateProcessorTest.java
+++
b/solr/core/src/test/org/apache/solr/cloud/DistribDocExpirationUpdateProcessorTest.java
@@ -100,7 +100,7 @@ public class DistribDocExpirationUpdateProcessorTest
extends SolrCloudTestCase {
waitForState(
"Waiting for collection creation",
COLLECTION,
- (n, c) -> DocCollection.isFullyActive(n, c, 2, 2));
+ (n, c) -> SolrCloudTestCase.replicasForCollectionAreFullyActive(n, c,
2, 2));
}
@Test
diff --git
a/solr/core/src/test/org/apache/solr/cloud/DistributedVersionInfoTest.java
b/solr/core/src/test/org/apache/solr/cloud/DistributedVersionInfoTest.java
index b5c902467a4..28c63f91df2 100644
--- a/solr/core/src/test/org/apache/solr/cloud/DistributedVersionInfoTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/DistributedVersionInfoTest.java
@@ -45,7 +45,6 @@ import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
-import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.ModifiableSolrParams;
@@ -82,7 +81,7 @@ public class DistributedVersionInfoTest extends
SolrCloudTestCase {
COLLECTION,
DEFAULT_TIMEOUT,
TimeUnit.SECONDS,
- (n, c) -> DocCollection.isFullyActive(n, c, 1, 3));
+ (n, c) -> SolrCloudTestCase.replicasForCollectionAreFullyActive(n, c,
1, 3));
final Replica leader = stateReader.getLeaderRetry(COLLECTION, shardId);
diff --git
a/solr/core/src/test/org/apache/solr/cloud/FullSolrCloudDistribCmdsTest.java
b/solr/core/src/test/org/apache/solr/cloud/FullSolrCloudDistribCmdsTest.java
index 74dfe014c23..5f075644d35 100644
--- a/solr/core/src/test/org/apache/solr/cloud/FullSolrCloudDistribCmdsTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/FullSolrCloudDistribCmdsTest.java
@@ -89,7 +89,7 @@ public class FullSolrCloudDistribCmdsTest extends
SolrCloudTestCase {
name,
DEFAULT_TIMEOUT,
TimeUnit.SECONDS,
- (n, c) -> DocCollection.isFullyActive(n, c, 2, 2));
+ (n, c) -> SolrCloudTestCase.replicasForCollectionAreFullyActive(n,
c, 2, 2));
return name;
}
@@ -167,7 +167,7 @@ public class FullSolrCloudDistribCmdsTest extends
SolrCloudTestCase {
testCollectionName,
DEFAULT_TIMEOUT,
TimeUnit.SECONDS,
- (n, c1) -> DocCollection.isFullyActive(n, c1, 2, 2));
+ (n, c1) ->
SolrCloudTestCase.replicasForCollectionAreFullyActive(n, c1, 2, 2));
final DocCollection docCol =
cloudClient.getClusterState().getCollection(testCollectionName);
try (SolrClient shard1 =
getHttpSolrClient(docCol.getSlice("shard1").getLeader());
@@ -288,7 +288,7 @@ public class FullSolrCloudDistribCmdsTest extends
SolrCloudTestCase {
testCollectionName,
DEFAULT_TIMEOUT,
TimeUnit.SECONDS,
- (n, c1) -> DocCollection.isFullyActive(n, c1, 2, 2));
+ (n, c1) ->
SolrCloudTestCase.replicasForCollectionAreFullyActive(n, c1, 2, 2));
// Add a few documents with diff routes
cloudClient.add(testCollectionName, sdoc("id", "1", "routefield_s",
"europe"));
@@ -322,7 +322,7 @@ public class FullSolrCloudDistribCmdsTest extends
SolrCloudTestCase {
testCollectionName,
DEFAULT_TIMEOUT,
TimeUnit.SECONDS,
- (n, c1) -> DocCollection.isFullyActive(n, c1, 2, 2));
+ (n, c1) ->
SolrCloudTestCase.replicasForCollectionAreFullyActive(n, c1, 2, 2));
final DocCollection docCol =
cloudClient.getClusterState().getCollection(testCollectionName);
try (SolrClient shard1 =
getHttpSolrClient(docCol.getSlice("shard1").getLeader());
@@ -464,7 +464,7 @@ public class FullSolrCloudDistribCmdsTest extends
SolrCloudTestCase {
collectionName,
DEFAULT_TIMEOUT,
TimeUnit.SECONDS,
- (n, c) -> DocCollection.isFullyActive(n, c, 2, 1));
+ (n, c) ->
SolrCloudTestCase.replicasForCollectionAreFullyActive(n, c, 2, 1));
{ // HACK: Check the leaderProps for the shard hosted on the node
we're going to kill...
List<Replica> replicas =
diff --git
a/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionWithEmptyReplica.java
b/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionWithEmptyReplica.java
index 991750adcc1..d9cf6fc7128 100644
---
a/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionWithEmptyReplica.java
+++
b/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionWithEmptyReplica.java
@@ -29,7 +29,6 @@ import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrInputDocument;
-import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.Slice;
import org.apache.solr.embedded.JettySolrRunner;
@@ -96,7 +95,7 @@ public class TestLeaderElectionWithEmptyReplica extends
SolrCloudTestCase {
COLLECTION_NAME,
DEFAULT_TIMEOUT,
TimeUnit.SECONDS,
- (n, c) -> DocCollection.isFullyActive(n, c, 1, 2));
+ (n, c) -> SolrCloudTestCase.replicasForCollectionAreFullyActive(n,
c, 1, 2));
// now query each replica and check for consistency
assertConsistentReplicas(
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestPullReplica.java
b/solr/core/src/test/org/apache/solr/cloud/TestPullReplica.java
index d7cf33aad8a..ba349ad9663 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestPullReplica.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestPullReplica.java
@@ -185,11 +185,11 @@ public class TestPullReplica extends SolrCloudTestCase {
assertEquals(
"Expecting 6 pull replicas, 3 per shard",
6,
- docCollection.getReplicas(EnumSet.of(Replica.Type.PULL)).size());
+ getReplicas(docCollection, EnumSet.of(Replica.Type.PULL)).size());
assertEquals(
"Expecting 2 writer replicas, one per shard",
2,
- docCollection.getReplicas(EnumSet.of(Replica.Type.NRT)).size());
+ getReplicas(docCollection, EnumSet.of(Replica.Type.NRT)).size());
for (Slice s : docCollection.getSlices()) {
// read-only replicas can never become leaders
assertNotSame(s.getLeader().getType(), Replica.Type.PULL);
@@ -560,7 +560,7 @@ public class TestPullReplica extends SolrCloudTestCase {
assertEquals(1, leaderClient.query(new
SolrQuery("*:*")).getResults().getNumFound());
}
- waitForNumDocsInAllReplicas(1,
docCollection.getReplicas(EnumSet.of(Replica.Type.PULL)));
+ waitForNumDocsInAllReplicas(1, getReplicas(docCollection,
EnumSet.of(Replica.Type.PULL)));
// Delete leader replica from shard1
ignoreException("No registered leader was found"); // These are expected
@@ -611,7 +611,7 @@ public class TestPullReplica extends SolrCloudTestCase {
// Also fails if I send the update to the pull replica explicitly
try (SolrClient pullReplicaClient =
-
getHttpSolrClient(docCollection.getReplicas(EnumSet.of(Replica.Type.PULL)).get(0)))
{
+ getHttpSolrClient(getReplicas(docCollection,
EnumSet.of(Replica.Type.PULL)).get(0))) {
expectThrows(
SolrException.class,
() ->
@@ -625,7 +625,7 @@ public class TestPullReplica extends SolrCloudTestCase {
}
// Queries should still work
- waitForNumDocsInAllReplicas(1,
docCollection.getReplicas(EnumSet.of(Replica.Type.PULL)));
+ waitForNumDocsInAllReplicas(1, getReplicas(docCollection,
EnumSet.of(Replica.Type.PULL)));
// Add nrt replica back. Since there is no nrt now, new nrt will have no
docs. There will be
// data loss, since it will become the leader and pull replicas will
replicate from it.
// Maybe we want to change this. Replicate from pull replicas is not a
good idea, since they are
@@ -652,7 +652,7 @@ public class TestPullReplica extends SolrCloudTestCase {
// different?
if (removeReplica) {
// Pull replicas will replicate the empty index if a new replica was
added and becomes leader
- waitForNumDocsInAllReplicas(0,
docCollection.getReplicas(EnumSet.of(Replica.Type.PULL)));
+ waitForNumDocsInAllReplicas(0, getReplicas(docCollection,
EnumSet.of(Replica.Type.PULL)));
}
// add docs agin
@@ -663,8 +663,8 @@ public class TestPullReplica extends SolrCloudTestCase {
assertEquals(1, leaderClient.query(new
SolrQuery("*:*")).getResults().getNumFound());
}
waitForNumDocsInAllReplicas(
- 1, docCollection.getReplicas(EnumSet.of(Replica.Type.PULL)), "id:2",
null, null);
- waitForNumDocsInAllReplicas(1,
docCollection.getReplicas(EnumSet.of(Replica.Type.PULL)));
+ 1, getReplicas(docCollection, EnumSet.of(Replica.Type.PULL)), "id:2",
null, null);
+ waitForNumDocsInAllReplicas(1, getReplicas(docCollection,
EnumSet.of(Replica.Type.PULL)));
}
public void testKillPullReplica() throws Exception {
@@ -729,12 +729,11 @@ public class TestPullReplica extends SolrCloudTestCase {
waitForState("Collection init never finished?", collectionName,
activeReplicaCount(0, 1, 2));
assertEquals(
- 2,
getCollectionState(collectionName).getReplicas(EnumSet.of(Replica.Type.PULL)).size());
+ 2, getReplicas(getCollectionState(collectionName),
EnumSet.of(Replica.Type.PULL)).size());
// set our 'skip' property on one of the PULL replicas, and keep track of
this replica
final String pullThatSkipsRecovery =
- getCollectionState(collectionName)
- .getReplicas(EnumSet.of(Replica.Type.PULL))
+ getReplicas(getCollectionState(collectionName),
EnumSet.of(Replica.Type.PULL))
.get(0)
.getName();
CollectionAdminRequest.addReplicaProperty(
@@ -767,7 +766,7 @@ public class TestPullReplica extends SolrCloudTestCase {
activeReplicaCount(0, 0, 2));
waitForNumDocsInAllReplicas(
numDocsAdded,
-
getCollectionState(collectionName).getReplicas(EnumSet.of(Replica.Type.PULL)));
+ getReplicas(getCollectionState(collectionName),
EnumSet.of(Replica.Type.PULL)));
// Add yetanother PULL replica while the leader is down.
// This new replica will immediately stall going into recoveery, since the
leader is down.
@@ -780,7 +779,7 @@ public class TestPullReplica extends SolrCloudTestCase {
(liveNodes, colState) -> {
int active = 0;
int down = 0;
- for (Replica r :
colState.getReplicas(EnumSet.of(Replica.Type.PULL))) {
+ for (Replica r : getReplicas(colState,
EnumSet.of(Replica.Type.PULL))) {
if (r.getState().equals(Replica.State.ACTIVE)) {
active++;
} else if (r.getState().equals(Replica.State.DOWN)) {
@@ -793,7 +792,7 @@ public class TestPullReplica extends SolrCloudTestCase {
// But even if when set our 'skip' property on this new PULL replica, it's
*next* (re)start
// should still block waiting for RECOVERY since it won't have an active
index.
final String pullThatWantsToSkipRecoveryButMustRecoverOnce =
-
getCollectionState(collectionName).getReplicas(EnumSet.of(Replica.Type.PULL)).stream()
+ getReplicas(getCollectionState(collectionName),
EnumSet.of(Replica.Type.PULL)).stream()
.filter(r -> r.getState().equals(Replica.State.DOWN))
.map(r -> r.getName())
.findFirst()
@@ -929,19 +928,19 @@ public class TestPullReplica extends SolrCloudTestCase {
assertEquals(
"Unexpected number of writer replicas: " + docCollection,
numNrtReplicas,
- docCollection.getReplicas(EnumSet.of(Replica.Type.NRT)).stream()
+ getReplicas(docCollection, EnumSet.of(Replica.Type.NRT)).stream()
.filter(r -> !activeOnly || r.getState() == Replica.State.ACTIVE)
.count());
assertEquals(
"Unexpected number of pull replicas: " + docCollection,
numPullReplicas,
- docCollection.getReplicas(EnumSet.of(Replica.Type.PULL)).stream()
+ getReplicas(docCollection, EnumSet.of(Replica.Type.PULL)).stream()
.filter(r -> !activeOnly || r.getState() == Replica.State.ACTIVE)
.count());
assertEquals(
"Unexpected number of active replicas: " + docCollection,
numTlogReplicas,
- docCollection.getReplicas(EnumSet.of(Replica.Type.TLOG)).stream()
+ getReplicas(docCollection, EnumSet.of(Replica.Type.TLOG)).stream()
.filter(r -> !activeOnly || r.getState() == Replica.State.ACTIVE)
.count());
return docCollection;
diff --git
a/solr/core/src/test/org/apache/solr/cloud/TestPullReplicaErrorHandling.java
b/solr/core/src/test/org/apache/solr/cloud/TestPullReplicaErrorHandling.java
index b9a2707f5b3..3dd8f01e614 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestPullReplicaErrorHandling.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestPullReplicaErrorHandling.java
@@ -305,19 +305,19 @@ public class TestPullReplicaErrorHandling extends
SolrCloudTestCase {
assertEquals(
"Unexpected number of writer replicas: " + docCollection,
numWriter,
- docCollection.getReplicas(EnumSet.of(Replica.Type.NRT)).stream()
+ getReplicas(docCollection, EnumSet.of(Replica.Type.NRT)).stream()
.filter(r -> !activeOnly || r.getState() == Replica.State.ACTIVE)
.count());
assertEquals(
"Unexpected number of pull replicas: " + docCollection,
numPassive,
- docCollection.getReplicas(EnumSet.of(Replica.Type.PULL)).stream()
+ getReplicas(docCollection, EnumSet.of(Replica.Type.PULL)).stream()
.filter(r -> !activeOnly || r.getState() == Replica.State.ACTIVE)
.count());
assertEquals(
"Unexpected number of active replicas: " + docCollection,
numActive,
- docCollection.getReplicas(EnumSet.of(Replica.Type.TLOG)).stream()
+ getReplicas(docCollection, EnumSet.of(Replica.Type.TLOG)).stream()
.filter(r -> !activeOnly || r.getState() == Replica.State.ACTIVE)
.count());
return docCollection;
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestTlogReplica.java
b/solr/core/src/test/org/apache/solr/cloud/TestTlogReplica.java
index 46cd780b33f..43ae6866825 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestTlogReplica.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestTlogReplica.java
@@ -211,15 +211,15 @@ public class TestTlogReplica extends SolrCloudTestCase {
assertEquals(
"Expecting 8 tlog replicas, 4 per shard",
8,
- docCollection.getReplicas(EnumSet.of(Replica.Type.TLOG)).size());
+ getReplicas(docCollection, EnumSet.of(Replica.Type.TLOG)).size());
assertEquals(
"Expecting no nrt replicas",
0,
- docCollection.getReplicas(EnumSet.of(Replica.Type.NRT)).size());
+ getReplicas(docCollection, EnumSet.of(Replica.Type.NRT)).size());
assertEquals(
"Expecting no pull replicas",
0,
- docCollection.getReplicas(EnumSet.of(Replica.Type.PULL)).size());
+ getReplicas(docCollection, EnumSet.of(Replica.Type.PULL)).size());
for (Slice s : docCollection.getSlices()) {
assertSame(s.getLeader().getType(), Replica.Type.TLOG);
List<String> shardElectionNodes =
@@ -475,7 +475,7 @@ public class TestTlogReplica extends SolrCloudTestCase {
}
waitForNumDocsInAllReplicas(
- 1, docCollection.getReplicas(EnumSet.of(Replica.Type.TLOG)),
REPLICATION_TIMEOUT_SECS);
+ 1, getReplicas(docCollection, EnumSet.of(Replica.Type.TLOG)),
REPLICATION_TIMEOUT_SECS);
// Delete leader replica from shard1
JettySolrRunner leaderJetty = null;
@@ -503,7 +503,7 @@ public class TestTlogReplica extends SolrCloudTestCase {
// Queries should still work
waitForNumDocsInAllReplicas(
- 2, docCollection.getReplicas(EnumSet.of(Replica.Type.TLOG)),
REPLICATION_TIMEOUT_SECS);
+ 2, getReplicas(docCollection, EnumSet.of(Replica.Type.TLOG)),
REPLICATION_TIMEOUT_SECS);
// Start back the node
if (removeReplica) {
addReplicaWithRetries();
@@ -514,7 +514,7 @@ public class TestTlogReplica extends SolrCloudTestCase {
waitForState("Expected collection to be 1x2", collectionName,
clusterShape(1, 2));
// added replica should replicate from the leader
waitForNumDocsInAllReplicas(
- 2, docCollection.getReplicas(EnumSet.of(Replica.Type.TLOG)),
REPLICATION_TIMEOUT_SECS);
+ 2, getReplicas(docCollection, EnumSet.of(Replica.Type.TLOG)),
REPLICATION_TIMEOUT_SECS);
}
private void addReplicaWithRetries() throws SolrServerException, IOException
{
@@ -1069,19 +1069,19 @@ public class TestTlogReplica extends SolrCloudTestCase {
assertEquals(
"Unexpected number of nrt replicas: " + docCollection,
numNrtReplicas,
- docCollection.getReplicas(EnumSet.of(Replica.Type.NRT)).stream()
+ getReplicas(docCollection, EnumSet.of(Replica.Type.NRT)).stream()
.filter(r -> !activeOnly || r.getState() == Replica.State.ACTIVE)
.count());
assertEquals(
"Unexpected number of pull replicas: " + docCollection,
numPullReplicas,
- docCollection.getReplicas(EnumSet.of(Replica.Type.PULL)).stream()
+ getReplicas(docCollection, EnumSet.of(Replica.Type.PULL)).stream()
.filter(r -> !activeOnly || r.getState() == Replica.State.ACTIVE)
.count());
assertEquals(
"Unexpected number of tlog replicas: " + docCollection,
numTlogReplicas,
- docCollection.getReplicas(EnumSet.of(Replica.Type.TLOG)).stream()
+ getReplicas(docCollection, EnumSet.of(Replica.Type.TLOG)).stream()
.filter(r -> !activeOnly || r.getState() == Replica.State.ACTIVE)
.count());
return docCollection;
diff --git
a/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionTooManyReplicasTest.java
b/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionTooManyReplicasTest.java
index 79cf1c444f0..fae4f9ceaa4 100644
---
a/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionTooManyReplicasTest.java
+++
b/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionTooManyReplicasTest.java
@@ -187,7 +187,7 @@ public class CollectionTooManyReplicasTest extends
SolrCloudTestCase {
"Expected shards shardstart, 1, 2, each with two active replicas",
collectionName,
(n, c) -> {
- return DocCollection.isFullyActive(n, c, 3, 2);
+ return SolrCloudTestCase.replicasForCollectionAreFullyActive(n, c,
3, 2);
});
Map<String, Slice> slices =
getCollectionState(collectionName).getSlicesMap();
assertEquals("There should be exaclty three slices", slices.size(), 3);
diff --git
a/solr/core/src/test/org/apache/solr/handler/component/DistributedQueryComponentOptimizationTest.java
b/solr/core/src/test/org/apache/solr/handler/component/DistributedQueryComponentOptimizationTest.java
index 8df32f40837..c40d002632a 100644
---
a/solr/core/src/test/org/apache/solr/handler/component/DistributedQueryComponentOptimizationTest.java
+++
b/solr/core/src/test/org/apache/solr/handler/component/DistributedQueryComponentOptimizationTest.java
@@ -29,7 +29,6 @@ import
org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.cloud.SolrCloudTestCase;
-import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ShardParams;
import org.apache.solr.common.util.SimpleOrderedMap;
@@ -68,7 +67,7 @@ public class DistributedQueryComponentOptimizationTest
extends SolrCloudTestCase
COLLECTION,
DEFAULT_TIMEOUT,
TimeUnit.SECONDS,
- (n, c) -> DocCollection.isFullyActive(n, c, sliceCount, 1));
+ (n, c) -> SolrCloudTestCase.replicasForCollectionAreFullyActive(n,
c, sliceCount, 1));
new UpdateRequest()
.add(
diff --git
a/solr/core/src/test/org/apache/solr/schema/ManagedSchemaRoundRobinCloudTest.java
b/solr/core/src/test/org/apache/solr/schema/ManagedSchemaRoundRobinCloudTest.java
index b2509d8fff7..18a891fcc2c 100644
---
a/solr/core/src/test/org/apache/solr/schema/ManagedSchemaRoundRobinCloudTest.java
+++
b/solr/core/src/test/org/apache/solr/schema/ManagedSchemaRoundRobinCloudTest.java
@@ -27,7 +27,6 @@ import
org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.request.schema.SchemaRequest;
import org.apache.solr.client.solrj.response.schema.SchemaResponse;
import org.apache.solr.cloud.SolrCloudTestCase;
-import org.apache.solr.common.cloud.DocCollection;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -51,7 +50,7 @@ public class ManagedSchemaRoundRobinCloudTest extends
SolrCloudTestCase {
COLLECTION,
DEFAULT_TIMEOUT,
TimeUnit.SECONDS,
- (n, c) -> DocCollection.isFullyActive(n, c, NUM_SHARDS, 1));
+ (n, c) -> SolrCloudTestCase.replicasForCollectionAreFullyActive(n,
c, NUM_SHARDS, 1));
}
@AfterClass
diff --git
a/solr/core/src/test/org/apache/solr/schema/SchemaApiFailureTest.java
b/solr/core/src/test/org/apache/solr/schema/SchemaApiFailureTest.java
index c1e5a64e03b..f9267d27db2 100644
--- a/solr/core/src/test/org/apache/solr/schema/SchemaApiFailureTest.java
+++ b/solr/core/src/test/org/apache/solr/schema/SchemaApiFailureTest.java
@@ -27,7 +27,6 @@ import
org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.request.schema.SchemaRequest;
import org.apache.solr.client.solrj.response.schema.SchemaResponse;
import org.apache.solr.cloud.SolrCloudTestCase;
-import org.apache.solr.common.cloud.DocCollection;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -46,7 +45,7 @@ public class SchemaApiFailureTest extends SolrCloudTestCase {
COLLECTION,
DEFAULT_TIMEOUT,
TimeUnit.SECONDS,
- (n, c) -> DocCollection.isFullyActive(n, c, 2, 1));
+ (n, c) -> SolrCloudTestCase.replicasForCollectionAreFullyActive(n,
c, 2, 1));
}
@Test
diff --git a/solr/core/src/test/org/apache/solr/search/TestCoordinatorRole.java
b/solr/core/src/test/org/apache/solr/search/TestCoordinatorRole.java
index bb316236012..65ff8220c6d 100644
--- a/solr/core/src/test/org/apache/solr/search/TestCoordinatorRole.java
+++ b/solr/core/src/test/org/apache/solr/search/TestCoordinatorRole.java
@@ -200,10 +200,10 @@ public class TestCoordinatorRole extends
SolrCloudTestCase {
cluster.waitForActiveCollection(COLL, 1, 2);
DocCollection docColl =
cluster.getSolrClient().getClusterStateProvider().getClusterState().getCollection(COLL);
- Replica nrtReplica =
docColl.getReplicas(EnumSet.of(Replica.Type.NRT)).get(0);
+ Replica nrtReplica = getReplicas(docColl,
EnumSet.of(Replica.Type.NRT)).get(0);
assertNotNull(nrtReplica);
String nrtCore = nrtReplica.getCoreName();
- Replica pullReplica =
docColl.getReplicas(EnumSet.of(Replica.Type.PULL)).get(0);
+ Replica pullReplica = getReplicas(docColl,
EnumSet.of(Replica.Type.PULL)).get(0);
assertNotNull(pullReplica);
String pullCore = pullReplica.getCoreName();
diff --git
a/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/CloudAuthStreamTest.java
b/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/CloudAuthStreamTest.java
index 4cc2a1b6e7b..225ca994ec3 100644
---
a/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/CloudAuthStreamTest.java
+++
b/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/CloudAuthStreamTest.java
@@ -35,7 +35,6 @@ import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.cloud.SolrCloudTestCase;
import org.apache.solr.common.SolrException;
-import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.util.TimeSource;
import org.apache.solr.common.util.Utils;
@@ -135,7 +134,7 @@ public class CloudAuthStreamTest extends SolrCloudTestCase {
collection,
DEFAULT_TIMEOUT,
TimeUnit.SECONDS,
- (n, c) -> DocCollection.isFullyActive(n, c, 2, 2));
+ (n, c) ->
SolrCloudTestCase.replicasForCollectionAreFullyActive(n, c, 2, 2));
}
solrUrl = cluster.getRandomJetty(random()).getProxyBaseUrl().toString();
diff --git
a/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java
b/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java
index 3e112b60264..407efd7875b 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java
@@ -23,13 +23,11 @@ import java.lang.invoke.MethodHandles;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.EnumSet;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
-import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BiConsumer;
import java.util.function.Supplier;
@@ -397,32 +395,6 @@ public class DocCollection extends ZkNodeProps implements
Iterable<Slice> {
return slice.getLeader();
}
- /**
- * Check that all replicas in a collection are live
- *
- * @see CollectionStatePredicate
- */
- @Deprecated // only for 2 tests
- public static boolean isFullyActive(
- Set<String> liveNodes,
- DocCollection collectionState,
- int expectedShards,
- int expectedReplicas) {
- Objects.requireNonNull(liveNodes);
- if (collectionState == null) return false;
- int activeShards = 0;
- for (Slice slice : collectionState) {
- int activeReplicas = 0;
- for (Replica replica : slice) {
- if (replica.isActive(liveNodes) == false) return false;
- activeReplicas++;
- }
- if (activeReplicas != expectedReplicas) return false;
- activeShards++;
- }
- return activeShards == expectedShards;
- }
-
@Override
public Iterator<Slice> iterator() {
return slices.values().iterator();
@@ -437,15 +409,6 @@ public class DocCollection extends ZkNodeProps implements
Iterable<Slice> {
return replicas;
}
- @Deprecated // just tests, so move out or make package-protected
- public List<Replica> getReplicas(EnumSet<Replica.Type> s) {
- List<Replica> replicas = new ArrayList<>();
- for (Slice slice : this) {
- replicas.addAll(slice.getReplicas(s));
- }
- return replicas;
- }
-
@Override
public boolean equals(Object that) {
if (!(that instanceof DocCollection other)) return false;
diff --git
a/solr/solrj/src/test/org/apache/solr/common/cloud/TestCloudCollectionsListeners.java
b/solr/solrj/src/test/org/apache/solr/common/cloud/TestCloudCollectionsListeners.java
index 97014c458d6..d04a95d5da4 100644
---
a/solr/solrj/src/test/org/apache/solr/common/cloud/TestCloudCollectionsListeners.java
+++
b/solr/solrj/src/test/org/apache/solr/common/cloud/TestCloudCollectionsListeners.java
@@ -112,7 +112,7 @@ public class TestCloudCollectionsListeners extends
SolrCloudTestCase {
"testcollection1",
MAX_WAIT_TIMEOUT,
TimeUnit.SECONDS,
- (n, c) -> DocCollection.isFullyActive(n, c, 4, 1));
+ (n, c) -> SolrCloudTestCase.replicasForCollectionAreFullyActive(n,
c, 4, 1));
assertFalse(
"CloudCollectionsListener has new collection in old set of
collections",
diff --git
a/solr/solrj/src/test/org/apache/solr/common/cloud/TestCollectionStateWatchers.java
b/solr/solrj/src/test/org/apache/solr/common/cloud/TestCollectionStateWatchers.java
index 9e7960b8c01..d4e99dac696 100644
---
a/solr/solrj/src/test/org/apache/solr/common/cloud/TestCollectionStateWatchers.java
+++
b/solr/solrj/src/test/org/apache/solr/common/cloud/TestCollectionStateWatchers.java
@@ -131,7 +131,8 @@ public class TestCollectionStateWatchers extends
SolrCloudTestCase {
(long) MAX_WAIT_TIMEOUT,
TimeUnit.SECONDS,
(CollectionStatePredicate)
- (n, c) -> DocCollection.isFullyActive(n, c, CLUSTER_SIZE, 1));
+ (n, c) ->
+ SolrCloudTestCase.replicasForCollectionAreFullyActive(n,
c, CLUSTER_SIZE, 1));
final JettySolrRunner extraJetty = cluster.startJettySolrRunner();
final JettySolrRunner jettyToShutdown =
@@ -230,7 +231,8 @@ public class TestCollectionStateWatchers extends
SolrCloudTestCase {
"waitforstate",
(long) MAX_WAIT_TIMEOUT,
TimeUnit.SECONDS,
- (CollectionStatePredicate) (n1, c1) ->
DocCollection.isFullyActive(n1, c1, 1, 1));
+ (CollectionStatePredicate)
+ (n1, c1) ->
SolrCloudTestCase.replicasForCollectionAreFullyActive(n1, c1, 1, 1));
// several goes, to check that we're not getting delayed state changes
for (int i = 0; i < 10; i++) {
@@ -240,7 +242,8 @@ public class TestCollectionStateWatchers extends
SolrCloudTestCase {
"waitforstate",
(long) 1,
TimeUnit.SECONDS,
- (CollectionStatePredicate) (n, c) ->
DocCollection.isFullyActive(n, c, 1, 1));
+ (CollectionStatePredicate)
+ (n, c) ->
SolrCloudTestCase.replicasForCollectionAreFullyActive(n, c, 1, 1));
} catch (TimeoutException e) {
fail("waitForState should return immediately if the predicate is
already satisfied");
}
@@ -256,7 +259,7 @@ public class TestCollectionStateWatchers extends
SolrCloudTestCase {
"delayed",
MAX_WAIT_TIMEOUT,
TimeUnit.SECONDS,
- (n, c) -> DocCollection.isFullyActive(n, c, 1, 1));
+ (n, c) -> SolrCloudTestCase.replicasForCollectionAreFullyActive(n,
c, 1, 1));
CollectionAdminRequest.createCollection("delayed", "config", 1, 1)
.processAndWait(cluster.getSolrClient(), MAX_WAIT_TIMEOUT);
@@ -296,7 +299,8 @@ public class TestCollectionStateWatchers extends
SolrCloudTestCase {
"falsepredicate",
(long) MAX_WAIT_TIMEOUT,
TimeUnit.SECONDS,
- (CollectionStatePredicate) (n, c) ->
DocCollection.isFullyActive(n, c, 4, 1));
+ (CollectionStatePredicate)
+ (n, c) ->
SolrCloudTestCase.replicasForCollectionAreFullyActive(n, c, 4, 1));
final CountDownLatch firstCall = new CountDownLatch(1);
@@ -313,7 +317,8 @@ public class TestCollectionStateWatchers extends
SolrCloudTestCase {
TimeUnit.SECONDS,
(liveNodes, collectionState) -> {
firstCall.countDown();
- return DocCollection.isFullyActive(liveNodes, collectionState,
4, 1);
+ return SolrCloudTestCase.replicasForCollectionAreFullyActive(
+ liveNodes, collectionState, 4, 1);
});
// first, stop another node; the watch should not be fired after this!
@@ -345,7 +350,8 @@ public class TestCollectionStateWatchers extends
SolrCloudTestCase {
"no-such-collection",
(long) 10,
TimeUnit.MILLISECONDS,
- (CollectionStatePredicate) (n, c) ->
DocCollection.isFullyActive(n, c, 1, 1));
+ (CollectionStatePredicate)
+ (n, c) ->
SolrCloudTestCase.replicasForCollectionAreFullyActive(n, c, 1, 1));
});
waitFor(
diff --git
a/solr/solrj/src/test/org/apache/solr/common/cloud/TestDocCollectionWatcher.java
b/solr/solrj/src/test/org/apache/solr/common/cloud/TestDocCollectionWatcher.java
index 23839d13d97..cecdb5cab41 100644
---
a/solr/solrj/src/test/org/apache/solr/common/cloud/TestDocCollectionWatcher.java
+++
b/solr/solrj/src/test/org/apache/solr/common/cloud/TestDocCollectionWatcher.java
@@ -162,7 +162,7 @@ public class TestDocCollectionWatcher extends
SolrCloudTestCase {
"waitforstate",
MAX_WAIT_TIMEOUT,
TimeUnit.SECONDS,
- (n1, c1) -> DocCollection.isFullyActive(n1, c1, 1, 1));
+ (n1, c1) ->
SolrCloudTestCase.replicasForCollectionAreFullyActive(n1, c1, 1, 1));
// several goes, to check that we're not getting delayed state changes
for (int i = 0; i < 10; i++) {
@@ -172,7 +172,7 @@ public class TestDocCollectionWatcher extends
SolrCloudTestCase {
"waitforstate",
1,
TimeUnit.SECONDS,
- (n, c) -> DocCollection.isFullyActive(n, c, 1, 1));
+ (n, c) ->
SolrCloudTestCase.replicasForCollectionAreFullyActive(n, c, 1, 1));
} catch (TimeoutException e) {
fail("waitForState should return immediately if the predicate is
already satisfied");
}
@@ -223,7 +223,7 @@ public class TestDocCollectionWatcher extends
SolrCloudTestCase {
"falsepredicate",
MAX_WAIT_TIMEOUT,
TimeUnit.SECONDS,
- (n1, c1) -> DocCollection.isFullyActive(n1, c1, 1, 1));
+ (n1, c1) ->
SolrCloudTestCase.replicasForCollectionAreFullyActive(n1, c1, 1, 1));
// set watcher waiting for at least 3 replicas (will fail initially)
final AtomicInteger runCount = new AtomicInteger(0);
@@ -251,7 +251,7 @@ public class TestDocCollectionWatcher extends
SolrCloudTestCase {
"falsepredicate",
MAX_WAIT_TIMEOUT,
TimeUnit.SECONDS,
- (n, c) -> DocCollection.isFullyActive(n, c, 1, 2));
+ (n, c) -> SolrCloudTestCase.replicasForCollectionAreFullyActive(n,
c, 1, 2));
// confirm watcher has run at least once and has been retained...
final int runCountSnapshot = runCount.get();
@@ -302,7 +302,7 @@ public class TestDocCollectionWatcher extends
SolrCloudTestCase {
"tobedeleted",
MAX_WAIT_TIMEOUT,
TimeUnit.SECONDS,
- (n, c1) -> DocCollection.isFullyActive(n, c1, 1, 1));
+ (n, c1) ->
SolrCloudTestCase.replicasForCollectionAreFullyActive(n, c1, 1, 1));
Future<Boolean> future =
waitInBackground("tobedeleted", MAX_WAIT_TIMEOUT, TimeUnit.SECONDS,
Objects::isNull);
diff --git
a/solr/test-framework/src/java/org/apache/solr/cloud/SolrCloudTestCase.java
b/solr/test-framework/src/java/org/apache/solr/cloud/SolrCloudTestCase.java
index c7d51040b4b..b2499fc7e2a 100644
--- a/solr/test-framework/src/java/org/apache/solr/cloud/SolrCloudTestCase.java
+++ b/solr/test-framework/src/java/org/apache/solr/cloud/SolrCloudTestCase.java
@@ -30,9 +30,11 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
+import java.util.EnumSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
@@ -146,6 +148,39 @@ public class SolrCloudTestCase extends SolrTestCaseJ4 {
}
}
+ /**
+ * Check that all replicas in a collection are live
+ *
+ * @see CollectionStatePredicate
+ */
+ public static boolean replicasForCollectionAreFullyActive(
+ Set<String> liveNodes,
+ DocCollection collectionState,
+ int expectedShards,
+ int expectedReplicas) {
+ Objects.requireNonNull(liveNodes);
+ if (collectionState == null) return false;
+ int activeShards = 0;
+ for (Slice slice : collectionState) {
+ int activeReplicas = 0;
+ for (Replica replica : slice) {
+ if (replica.isActive(liveNodes) == false) return false;
+ activeReplicas++;
+ }
+ if (activeReplicas != expectedReplicas) return false;
+ activeShards++;
+ }
+ return activeShards == expectedShards;
+ }
+
+ public static List<Replica> getReplicas(DocCollection collectionState,
EnumSet<Replica.Type> s) {
+ List<Replica> replicas = new ArrayList<>();
+ for (Slice slice : collectionState) {
+ replicas.addAll(slice.getReplicas(s));
+ }
+ return replicas;
+ }
+
@Before
public void checkClusterConfiguration() {}
diff --git
a/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractCollectionsAPIDistributedZkTestBase.java
b/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractCollectionsAPIDistributedZkTestBase.java
index f1aa6c29625..98edf7f3e87 100644
---
a/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractCollectionsAPIDistributedZkTestBase.java
+++
b/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractCollectionsAPIDistributedZkTestBase.java
@@ -342,7 +342,7 @@ public abstract class
AbstractCollectionsAPIDistributedZkTestBase extends SolrCl
waitForState(
"Collection creation after a bad delete failed",
"acollectionafterbaddelete",
- (n, c) -> DocCollection.isFullyActive(n, c, 1, 2));
+ (n, c) -> SolrCloudTestCase.replicasForCollectionAreFullyActive(n, c,
1, 2));
}
@Test
@@ -478,7 +478,7 @@ public abstract class
AbstractCollectionsAPIDistributedZkTestBase extends SolrCl
collectionName,
(n, c) -> {
CollectionAdminRequest.Create req = createRequests[j];
- return DocCollection.isFullyActive(
+ return SolrCloudTestCase.replicasForCollectionAreFullyActive(
n, c, req.getNumShards(), req.getReplicationFactor());
});
diff --git
a/solr/test-framework/src/test/org/apache/solr/client/solrj/apache/ConnectionReuseTest.java
b/solr/test-framework/src/test/org/apache/solr/client/solrj/apache/ConnectionReuseTest.java
index a5bbf93a0b2..2a5a4241cc1 100644
---
a/solr/test-framework/src/test/org/apache/solr/client/solrj/apache/ConnectionReuseTest.java
+++
b/solr/test-framework/src/test/org/apache/solr/client/solrj/apache/ConnectionReuseTest.java
@@ -42,7 +42,6 @@ import org.apache.solr.SolrTestCaseJ4.SuppressSSL;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.cloud.SolrCloudTestCase;
-import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.update.AddUpdateCommand;
import org.apache.solr.util.TestInjection;
import org.junit.BeforeClass;
@@ -78,7 +77,7 @@ public class ConnectionReuseTest extends SolrCloudTestCase {
COLLECTION,
DEFAULT_TIMEOUT,
TimeUnit.SECONDS,
- (n, c) -> DocCollection.isFullyActive(n, c, 1, 1));
+ (n, c) -> SolrCloudTestCase.replicasForCollectionAreFullyActive(n,
c, 1, 1));
}
private SolrClient buildClient(CloseableHttpClient httpClient, URL url) {