You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2020/07/01 15:29:44 UTC

[lucene-solr] branch jira/solr-12847-2 created (now d1d5aec)

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

ab pushed a change to branch jira/solr-12847-2
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git.


      at d1d5aec  Merge branch 'master' into jira/solr-12847-2

This branch includes the following new commits:

     new 25f1351  SOLR-12847: Remove maxShardsPerNode, step 1.
     new 93af8ce  Merge branch 'master' into jira/solr-12847-2
     new 4b691ec  SOLR-12847: Remove maxShardsPerNode, step 2.
     new 17678f6  Merge branch 'master' into jira/solr-12847-2
     new 6c45484  SOLR-12847: WIP.
     new 09ee721  Merge branch 'master' into jira/solr-12847-2
     new 2fbff5d  Merge branch 'master' into jira/solr-12847-2
     new 3a1bf10  SOLR-12847: Fix test expectations.
     new cb517d3  SOLR-12847: WIP, further cleanup.
     new 8c1d076  SOLR-12847: More cleanups.
     new d1d5aec  Merge branch 'master' into jira/solr-12847-2

The 11 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[lucene-solr] 03/11: SOLR-12847: Remove maxShardsPerNode, step 2.

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ab pushed a commit to branch jira/solr-12847-2
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 4b691ecac24cd700bd7a008235b757d70cd09a4d
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Thu Apr 16 09:50:23 2020 +0200

    SOLR-12847: Remove maxShardsPerNode, step 2.
---
 .../solr/cloud/api/collections/AddReplicaCmd.java  | 11 ++--
 .../solr/handler/admin/CollectionsHandler.java     |  4 +-
 .../apache/solr/cloud/CollectionsAPISolrJTest.java |  7 ---
 .../collections/CollectionTooManyReplicasTest.java | 59 ++++++++++++++--------
 .../cloud/api/collections/TestCollectionAPI.java   | 25 ---------
 .../test/org/apache/solr/cloud/rule/RulesTest.java |  2 +-
 .../solrj/request/CollectionAdminRequest.java      | 10 ++++
 .../solr/common/params/CollectionAdminParams.java  |  5 ++
 8 files changed, 60 insertions(+), 63 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/AddReplicaCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/AddReplicaCmd.java
index 8c6f002..b88867c 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/AddReplicaCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/AddReplicaCmd.java
@@ -62,6 +62,7 @@ import org.apache.solr.common.cloud.ReplicaPosition;
 import org.apache.solr.common.cloud.Slice;
 import org.apache.solr.common.cloud.ZkNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
+import org.apache.solr.common.params.CollectionAdminParams;
 import org.apache.solr.common.params.CommonAdminParams;
 import org.apache.solr.common.params.CoreAdminParams;
 import org.apache.solr.common.params.ModifiableSolrParams;
@@ -76,12 +77,6 @@ import org.slf4j.LoggerFactory;
 public class AddReplicaCmd implements OverseerCollectionMessageHandler.Cmd {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
-  /**
-   * When AddReplica is called with this set to true, then we do not try to find node assignments
-   * for the add replica API. If set to true, a valid "node" should be specified.
-   */
-  public static final String SKIP_NODE_ASSIGNMENT = "skipNodeAssignment";
-
   private final OverseerCollectionMessageHandler ocmh;
 
   public AddReplicaCmd(OverseerCollectionMessageHandler ocmh) {
@@ -230,7 +225,7 @@ public class AddReplicaCmd implements OverseerCollectionMessageHandler.Cmd {
             ZkStateReader.SHARD_ID_PROP, withCollectionShard,
             "node", createReplica.node,
             // since we already computed node assignments (which include assigning a node for this withCollection replica) we want to skip the assignment step
-            SKIP_NODE_ASSIGNMENT, "true",
+            CollectionAdminParams.SKIP_NODE_ASSIGNMENT, "true",
             CommonAdminParams.WAIT_FOR_FINAL_STATE, Boolean.TRUE.toString()); // set to true because we want `withCollection` to be ready after this collection is created
         addReplica(clusterState, props, results, null);
       }
@@ -346,7 +341,7 @@ public class AddReplicaCmd implements OverseerCollectionMessageHandler.Cmd {
                                                             EnumMap<Replica.Type, Integer> replicaTypeVsCount,
                                                             AtomicReference< PolicyHelper.SessionWrapper> sessionWrapper) throws IOException, InterruptedException {
     boolean skipCreateReplicaInClusterState = message.getBool(SKIP_CREATE_REPLICA_IN_CLUSTER_STATE, false);
-    boolean skipNodeAssignment = message.getBool(SKIP_NODE_ASSIGNMENT, false);
+    boolean skipNodeAssignment = message.getBool(CollectionAdminParams.SKIP_NODE_ASSIGNMENT, false);
     String sliceName = message.getStr(SHARD_ID_PROP);
     DocCollection collection = clusterState.getCollection(collectionName);
 
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
index 7593d4a..13ecc27 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
@@ -144,6 +144,7 @@ import static org.apache.solr.common.params.CollectionAdminParams.COUNT_PROP;
 import static org.apache.solr.common.params.CollectionAdminParams.FOLLOW_ALIASES;
 import static org.apache.solr.common.params.CollectionAdminParams.PROPERTY_NAME;
 import static org.apache.solr.common.params.CollectionAdminParams.PROPERTY_VALUE;
+import static org.apache.solr.common.params.CollectionAdminParams.SKIP_NODE_ASSIGNMENT;
 import static org.apache.solr.common.params.CollectionAdminParams.WITH_COLLECTION;
 import static org.apache.solr.common.params.CollectionParams.CollectionAction.*;
 import static org.apache.solr.common.params.CommonAdminParams.ASYNC;
@@ -937,7 +938,8 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
           TLOG_REPLICAS,
           PULL_REPLICAS,
           CREATE_NODE_SET,
-          FOLLOW_ALIASES);
+          FOLLOW_ALIASES,
+          SKIP_NODE_ASSIGNMENT);
       return copyPropertiesWithPrefix(req.getParams(), props, COLL_PROP_PREFIX);
     }),
     OVERSEERSTATUS_OP(OVERSEERSTATUS, (req, rsp, h) -> new LinkedHashMap<>()),
diff --git a/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java b/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java
index c4f9bdd..94290e7 100644
--- a/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java
@@ -1075,13 +1075,6 @@ public class CollectionsAPISolrJTest extends SolrCloudTestCase {
     waitForState("Expecting attribute 'replicationFactor' to be 25", collection,
         (n, c) -> 25 == c.getReplicationFactor());
 
-    CollectionAdminRequest.modifyCollection(collection, null)
-        .unsetAttribute("maxShardsPerNode")
-        .process(cluster.getSolrClient());
-
-    waitForState("Expecting attribute 'maxShardsPerNode' to be deleted", collection,
-        (n, c) -> null == c.get("maxShardsPerNode"));
-
     expectThrows(IllegalArgumentException.class,
         "An attempt to set unknown collection attribute should have failed",
         () -> CollectionAdminRequest.modifyCollection(collection, null)
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 95dfc4b..6d2ea05 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
@@ -21,8 +21,10 @@ import java.util.Map;
 import java.util.stream.Collectors;
 
 import org.apache.lucene.util.LuceneTestCase.Slow;
+import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.embedded.JettySolrRunner;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
+import org.apache.solr.cloud.CloudTestUtils;
 import org.apache.solr.cloud.SolrCloudTestCase;
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
@@ -49,6 +51,7 @@ public class CollectionTooManyReplicasTest extends SolrCloudTestCase {
 
   @Test
   public void testAddTooManyReplicas() throws Exception {
+
     final String collectionName = "TooManyReplicasInSeveralFlavors";
     CollectionAdminRequest.createCollection(collectionName, "conf", 2, 1)
         .process(cluster.getSolrClient());
@@ -60,24 +63,33 @@ public class CollectionTooManyReplicasTest extends SolrCloudTestCase {
     // Get a node to use for the "node" parameter.
     String nodeName = getAllNodeNames(collectionName).get(0);
 
-    // Add a replica using the "node" parameter (no "too many replicas check")
+    // Add a replica using the "node" parameter
+    // AND force skipping the node assignment (no "too many replicas check")
     // this node should have 2 replicas on it
     CollectionAdminRequest.addReplicaToShard(collectionName, "shard1")
         .setNode(nodeName)
+        //.setSkipNodeAssignment(true)
         .process(cluster.getSolrClient());
 
-    // Three replicas so far, should be able to create another one "normally"
-    CollectionAdminRequest.addReplicaToShard(collectionName, "shard1")
-        .process(cluster.getSolrClient());
+    // equivalent to maxShardsPerNode=1
+    String commands =  "{ set-cluster-policy: [ {replica: '<2', shard: '#ANY', node: '#ANY', strict: true} ] }";
+    cluster.getSolrClient().request(CloudTestUtils.AutoScalingRequest.create(SolrRequest.METHOD.POST, commands));
 
-    // This one should fail though, no "node" parameter specified
-    Exception e = expectThrows(Exception.class, () -> {
+    for (int i = 0; i < 10; i++) {
+      // Three replicas so far, should be able to create another one "normally"
       CollectionAdminRequest.addReplicaToShard(collectionName, "shard1")
           .process(cluster.getSolrClient());
-    });
+    }
+    CollectionAdminRequest.addReplicaToShard(collectionName, "shard1")
+        .process(cluster.getSolrClient());
+    // This one should fail though, no "node" parameter specified
+//    Exception e = expectThrows(Exception.class, () -> {
+//      CollectionAdminRequest.addReplicaToShard(collectionName, "shard1")
+//          .process(cluster.getSolrClient());
+//    });
 
-    assertTrue("Should have gotten the right error message back",
-          e.getMessage().contains("given the current number of eligible live nodes"));
+//    assertTrue("Should have gotten the right error message back",
+//          e.getMessage().contains("given the current number of eligible live nodes"));
 
 
     // Oddly, we should succeed next just because setting property.name will not check for nodes being "full up"
@@ -118,6 +130,9 @@ public class CollectionTooManyReplicasTest extends SolrCloudTestCase {
 
   @Test
   public void testAddShard() throws Exception {
+    // equivalent to maxShardsPerNode=2
+    String commands =  "{ set-cluster-policy: [ {replica: '<3', shard: '#ANY', node: '#ANY', strict: true} ] }";
+    cluster.getSolrClient().request(CloudTestUtils.AutoScalingRequest.create(SolrRequest.METHOD.POST, commands));
 
     String collectionName = "TooManyReplicasWhenAddingShards";
     CollectionAdminRequest.createCollectionWithImplicitRouter(collectionName, "conf", "shardstart", 2)
@@ -138,38 +153,40 @@ public class CollectionTooManyReplicasTest extends SolrCloudTestCase {
           .process(cluster.getSolrClient());
     });
     assertTrue("Should have gotten the right error message back",
-        e.getMessage().contains("given the current number of eligible live nodes"));
+        e.getMessage().contains("No node can satisfy the rules"));
 
     // Hmmm, providing a nodeset also overrides the checks for max replicas, so prove it.
     List<String> nodes = getAllNodeNames(collectionName);
 
-    CollectionAdminRequest.createShard(collectionName, "shard4")
-        .setNodeSet(String.join(",", nodes))
-        .process(cluster.getSolrClient());
-
-    // And just for yucks, insure we fail the "regular" one again.
     Exception e2 = expectThrows(Exception.class, () -> {
+      CollectionAdminRequest.createShard(collectionName, "shard4")
+          .setNodeSet(String.join(",", nodes))
+          .process(cluster.getSolrClient());
+    });
+    assertTrue("Should have gotten the right error message back",
+        e2.getMessage().contains("No node can satisfy the rules"));
+
+//    // And just for yucks, insure we fail the "regular" one again.
+    Exception e3 = expectThrows(Exception.class, () -> {
       CollectionAdminRequest.createShard(collectionName, "shard5")
           .process(cluster.getSolrClient());
     });
     assertTrue("Should have gotten the right error message back",
-        e2.getMessage().contains("given the current number of eligible live nodes"));
+        e3.getMessage().contains("No node can satisfy the rules"));
 
     // And finally, ensure that there are all the replicas we expect. We should have shards 1, 2 and 4 and each
     // should have exactly two replicas
-    waitForState("Expected shards shardstart, 1, 2 and 4, each with two active replicas", collectionName, (n, c) -> {
-      return DocCollection.isFullyActive(n, c, 4, 2);
+    waitForState("Expected shards shardstart, 1, 2, each with two active replicas", collectionName, (n, c) -> {
+      return DocCollection.isFullyActive(n, c, 3, 2);
     });
     Map<String, Slice> slices = getCollectionState(collectionName).getSlicesMap();
-    assertEquals("There should be exaclty four slices", slices.size(), 4);
+    assertEquals("There should be exaclty three slices", slices.size(), 3);
     assertNotNull("shardstart should exist", slices.get("shardstart"));
     assertNotNull("shard1 should exist", slices.get("shard1"));
     assertNotNull("shard2 should exist", slices.get("shard2"));
-    assertNotNull("shard4 should exist", slices.get("shard4"));
     assertEquals("Shardstart should have exactly 2 replicas", 2, slices.get("shardstart").getReplicas().size());
     assertEquals("Shard1 should have exactly 2 replicas", 2, slices.get("shard1").getReplicas().size());
     assertEquals("Shard2 should have exactly 2 replicas", 2, slices.get("shard2").getReplicas().size());
-    assertEquals("Shard4 should have exactly 2 replicas", 2, slices.get("shard4").getReplicas().size());
 
   }
 
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java
index 291f0e8..96e32f9 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java
@@ -95,7 +95,6 @@ public class TestCollectionAPI extends ReplicaPropertiesBase {
     clusterStatusZNodeVersion();
     testClusterStateMigration();
     testCollectionCreationCollectionNameValidation();
-    testCollectionCreationTooManyShards();
     testReplicationFactorValidaton();
     testCollectionCreationShardNameValidation();
     testAliasCreationNameValidation();
@@ -104,30 +103,6 @@ public class TestCollectionAPI extends ReplicaPropertiesBase {
     testModifyCollection(); // deletes replicationFactor property from collections, be careful adding new tests after this one!
   }
 
-  private void testCollectionCreationTooManyShards() throws Exception {
-    try (CloudSolrClient client = createCloudClient(null)) {
-      ModifiableSolrParams params = new ModifiableSolrParams();
-      params.set("action", CollectionParams.CollectionAction.CREATE.toString());
-      params.set("name", "collection_too_many");
-      params.set("router.name", "implicit");
-      params.set("numShards", "10");
-      params.set("maxShardsPerNode", 1);
-      params.set("shards", "b0,b1,b2,b3,b4,b5,b6,b7,b8,b9");
-      SolrRequest request = new QueryRequest(params);
-      request.setPath("/admin/collections");
-
-      try {
-        client.request(request);
-        fail("A collection creation request with too many shards than allowed by maxShardsPerNode should not have succeeded");
-      } catch (BaseHttpSolrClient.RemoteSolrException e) {
-        final String errorMessage = e.getMessage();
-        assertTrue(errorMessage.contains("Cannot create collection"));
-        assertTrue(errorMessage.contains("This requires 10 shards to be created (higher than the allowed number)"));
-        assertMissingCollection(client, "collection_too_many");
-      }
-    }
-  }
-
   private void assertMissingCollection(CloudSolrClient client, String collectionName) throws Exception {
     ClusterState clusterState = client.getZkStateReader().getClusterState();
     assertNull(clusterState.getCollectionOrNull(collectionName));
diff --git a/solr/core/src/test/org/apache/solr/cloud/rule/RulesTest.java b/solr/core/src/test/org/apache/solr/cloud/rule/RulesTest.java
index 17dd019..45a9cde 100644
--- a/solr/core/src/test/org/apache/solr/cloud/rule/RulesTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/rule/RulesTest.java
@@ -153,7 +153,7 @@ public class RulesTest extends SolrCloudTestCase {
     // adding an additional replica should fail since our rule says at most one replica
     // per node, and we know every node already has one replica
     expectedException.expect(BaseHttpSolrClient.RemoteSolrException.class);
-    expectedException.expectMessage(containsString("current number of eligible live nodes 0"));
+    expectedException.expectMessage(containsString("Could not identify nodes matching the rules"));
     CollectionAdminRequest.addReplicaToShard(rulesColl, "shard2").process(cluster.getSolrClient());
     
   }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java b/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
index be419fb..981f8d3 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
@@ -71,6 +71,7 @@ import static org.apache.solr.common.params.CollectionAdminParams.COUNT_PROP;
 import static org.apache.solr.common.params.CollectionAdminParams.CREATE_NODE_SET_PARAM;
 import static org.apache.solr.common.params.CollectionAdminParams.CREATE_NODE_SET_SHUFFLE_PARAM;
 import static org.apache.solr.common.params.CollectionAdminParams.ROUTER_PREFIX;
+import static org.apache.solr.common.params.CollectionAdminParams.SKIP_NODE_ASSIGNMENT;
 import static org.apache.solr.common.params.CollectionAdminParams.WITH_COLLECTION;
 
 /**
@@ -2099,6 +2100,7 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     protected Properties properties;
     protected Replica.Type type;
     protected Integer nrtReplicas, tlogReplicas, pullReplicas;
+    protected Boolean skipNodeAssignment;
     protected String createNodeSet;
 
     private AddReplica(String collection, String shard, String routeKey, Replica.Type type) {
@@ -2134,6 +2136,11 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
       return this;
     }
 
+    public AddReplica setSkipNodeAssignment(Boolean skipNodeAssignment) {
+      this.skipNodeAssignment = skipNodeAssignment;
+      return this;
+    }
+
     public String getRouteKey() {
       return routeKey;
     }
@@ -2229,6 +2236,9 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
       if (node != null) {
         params.add(CoreAdminParams.NODE, node);
       }
+      if (skipNodeAssignment != null) {
+        params.add(SKIP_NODE_ASSIGNMENT, String.valueOf(skipNodeAssignment));
+      }
       if (instanceDir != null)  {
         params.add(CoreAdminParams.INSTANCE_DIR, instanceDir);
       }
diff --git a/solr/solrj/src/java/org/apache/solr/common/params/CollectionAdminParams.java b/solr/solrj/src/java/org/apache/solr/common/params/CollectionAdminParams.java
index 5af2345..5b6af2e 100644
--- a/solr/solrj/src/java/org/apache/solr/common/params/CollectionAdminParams.java
+++ b/solr/solrj/src/java/org/apache/solr/common/params/CollectionAdminParams.java
@@ -127,4 +127,9 @@ public interface CollectionAdminParams {
 
   /** Option to follow aliases when deciding the target of a collection admin command. */
   String FOLLOW_ALIASES = "followAliases";
+  /**
+   * When AddReplica is called with this set to true, then we do not try to find node assignments
+   * for the add replica API. If set to true, a valid "node" should be specified.
+   */
+  String SKIP_NODE_ASSIGNMENT = "skipNodeAssignment";
 }


[lucene-solr] 10/11: SOLR-12847: More cleanups.

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ab pushed a commit to branch jira/solr-12847-2
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 8c1d076fd87461d004506a09cc6ba669caaaeec2
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Wed Jul 1 17:19:47 2020 +0200

    SOLR-12847: More cleanups.
---
 .../apache/solr/cloud/api/collections/Assign.java  |  4 ++--
 .../solr/cloud/api/collections/SplitShardCmd.java  |  2 --
 .../src/java/org/apache/solr/util/SolrCLI.java     | 16 ++-------------
 .../test-files/solr/simSnapshot/clusterState.json  | 18 +----------------
 .../test-files/solr/simSnapshot/statistics.json    |  2 +-
 .../solr/cloud/MultiSolrCloudTestCaseTest.java     |  1 -
 .../OverseerCollectionConfigSetProcessorTest.java  |  1 -
 .../org/apache/solr/cloud/TestPullReplica.java     |  8 +++-----
 .../AbstractCloudBackupRestoreTestCase.java        | 15 --------------
 .../api/collections/CustomCollectionTest.java      |  1 -
 .../TestRequestStatusCollectionAPI.java            |  3 ---
 .../cloud/autoscaling/sim/TestSimScenario.java     |  8 ++++----
 .../conf/solrconfig.xml                            |  2 +-
 .../resources/apispec/collections.Commands.json    |  4 ----
 .../solr/autoscaling/testAddMissingReplica.json    |  1 -
 ...testAutoscalingPreferencesUsedWithNoPolicy.json |  1 -
 .../solr/autoscaling/testEmptyCollection.json      |  3 +--
 .../solrj/solr/autoscaling/testInfiniteLoop.json   | 23 ----------------------
 .../testMoveReplicasInMultipleCollections.json     |  4 +---
 .../solr/autoscaling/testUnresolvedSuggestion.json |  3 +--
 .../solrj/impl/CloudSolrClientCacheTest.java       |  1 -
 21 files changed, 17 insertions(+), 104 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/Assign.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/Assign.java
index 383b250..1d2d1dc 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/Assign.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/Assign.java
@@ -322,8 +322,8 @@ public class Assign {
 
   // Only called from addReplica (and by extension createShard) (so far).
   //
-  // Gets a list of candidate nodes to put the required replica(s) on. Throws errors if not enough replicas
-  // could be created on live nodes given maxShardsPerNode, Replication factor (if from createShard) etc.
+  // Gets a list of candidate nodes to put the required replica(s) on. Throws errors if the AssignStrategy
+  // can't allocate valid positions.
   @SuppressWarnings({"unchecked"})
   public static List<ReplicaPosition> getNodesForNewReplicas(ClusterState clusterState, String collectionName,
                                                           String shard, int nrtReplicas, int tlogReplicas, int pullReplicas,
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/SplitShardCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/SplitShardCmd.java
index 2d04947..368d64c 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/SplitShardCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/SplitShardCmd.java
@@ -434,8 +434,6 @@ public class SplitShardCmd implements OverseerCollectionMessageHandler.Cmd {
       List<String> nodeList = new ArrayList<>(nodes.size());
       nodeList.addAll(nodes);
 
-      // TODO: Have maxShardsPerNode param for this operation?
-
       // Remove the node that hosts the parent shard for replica creation.
       nodeList.remove(nodeName);
 
diff --git a/solr/core/src/java/org/apache/solr/util/SolrCLI.java b/solr/core/src/java/org/apache/solr/util/SolrCLI.java
index 7260ec1..9e188f9 100755
--- a/solr/core/src/java/org/apache/solr/util/SolrCLI.java
+++ b/solr/core/src/java/org/apache/solr/util/SolrCLI.java
@@ -1727,12 +1727,6 @@ public class SolrCLI implements CLIO {
           .required(false)
           .desc("Number of copies of each document across the collection (replicas per shard); default is 1")
           .build(),
-      Option.builder("maxShardsPerNode")
-          .argName("#")
-          .hasArg()
-          .required(false)
-          .desc("Maximum number of shards per Solr node; default is determined based on the number of shards, replication factor, and live nodes.")
-          .build(),
       Option.builder("confdir")
           .argName("NAME")
           .hasArg()
@@ -1923,11 +1917,6 @@ public class SolrCLI implements CLIO {
       // build a URL to create the collection
       int numShards = optionAsInt(cli, "shards", 1);
       int replicationFactor = optionAsInt(cli, "replicationFactor", 1);
-      int maxShardsPerNode = -1;
-
-      if (cli.hasOption("maxShardsPerNode")) {
-        maxShardsPerNode = Integer.parseInt(cli.getOptionValue("maxShardsPerNode"));
-      }
 
       String confname = cli.getOptionValue("confname");
       String confdir = cli.getOptionValue("confdir");
@@ -1963,12 +1952,11 @@ public class SolrCLI implements CLIO {
       // doesn't seem to exist ... try to create
       String createCollectionUrl =
           String.format(Locale.ROOT,
-              "%s/admin/collections?action=CREATE&name=%s&numShards=%d&replicationFactor=%d&maxShardsPerNode=%d",
+              "%s/admin/collections?action=CREATE&name=%s&numShards=%d&replicationFactor=%d",
               baseUrl,
               collectionName,
               numShards,
-              replicationFactor,
-              maxShardsPerNode);
+              replicationFactor);
       if (confname != null && !"".equals(confname.trim())) {
         createCollectionUrl = createCollectionUrl + String.format(Locale.ROOT, "&collection.configName=%s", confname);
       }
diff --git a/solr/core/src/test-files/solr/simSnapshot/clusterState.json b/solr/core/src/test-files/solr/simSnapshot/clusterState.json
index 004d202..acaa340 100644
--- a/solr/core/src/test-files/solr/simSnapshot/clusterState.json
+++ b/solr/core/src/test-files/solr/simSnapshot/clusterState.json
@@ -80,7 +80,6 @@
               "type":"NRT",
               "force_set_state":"false"}}}},
       "router":{"name":"compositeId"},
-      "maxShardsPerNode":"1",
       "autoAddReplicas":"true",
       "nrtReplicas":"3",
       "tlogReplicas":"0"},
@@ -114,7 +113,6 @@
               "force_set_state":"false",
               "leader":"true"}}}},
       "router":{"name":"compositeId"},
-      "maxShardsPerNode":"1",
       "autoAddReplicas":"true",
       "nrtReplicas":"3",
       "tlogReplicas":"0"},
@@ -148,7 +146,6 @@
               "force_set_state":"false",
               "leader":"true"}}}},
       "router":{"name":"compositeId"},
-      "maxShardsPerNode":"1",
       "autoAddReplicas":"true",
       "nrtReplicas":"3",
       "tlogReplicas":"0"},
@@ -182,7 +179,6 @@
               "type":"NRT",
               "force_set_state":"false"}}}},
       "router":{"name":"compositeId"},
-      "maxShardsPerNode":"1",
       "autoAddReplicas":"true",
       "nrtReplicas":"3",
       "tlogReplicas":"0"},
@@ -216,7 +212,6 @@
               "type":"NRT",
               "force_set_state":"false"}}}},
       "router":{"name":"compositeId"},
-      "maxShardsPerNode":"1",
       "autoAddReplicas":"true",
       "nrtReplicas":"3",
       "tlogReplicas":"0"},
@@ -549,7 +544,6 @@
               "force_set_state":"false"}},
           "stateTimestamp":"1562040233681548279"}},
       "router":{"name":"compositeId"},
-      "maxShardsPerNode":"1",
       "autoAddReplicas":"true",
       "nrtReplicas":"3",
       "tlogReplicas":"0"},
@@ -584,7 +578,6 @@
               "type":"NRT",
               "force_set_state":"false"}}}},
       "router":{"name":"compositeId"},
-      "maxShardsPerNode":"1",
       "autoAddReplicas":"true",
       "nrtReplicas":"3",
       "tlogReplicas":"0"},
@@ -2538,7 +2531,6 @@
               "force_set_state":"false"}},
           "stateTimestamp":"1565369006475856752"}},
       "router":{"name":"compositeId"},
-      "maxShardsPerNode":"1",
       "autoAddReplicas":"true",
       "nrtReplicas":"2",
       "tlogReplicas":"0"},
@@ -2572,7 +2564,6 @@
               "force_set_state":"false",
               "leader":"true"}}}},
       "router":{"name":"compositeId"},
-      "maxShardsPerNode":"1",
       "autoAddReplicas":"true",
       "nrtReplicas":"3",
       "tlogReplicas":"0"},
@@ -2606,7 +2597,6 @@
               "force_set_state":"false",
               "leader":"true"}}}},
       "router":{"name":"compositeId"},
-      "maxShardsPerNode":"1",
       "autoAddReplicas":"true",
       "nrtReplicas":"3",
       "tlogReplicas":"0"},
@@ -2640,7 +2630,6 @@
               "force_set_state":"false",
               "leader":"true"}}}},
       "router":{"name":"compositeId"},
-      "maxShardsPerNode":"1",
       "autoAddReplicas":"true",
       "nrtReplicas":"3",
       "tlogReplicas":"0"},
@@ -2659,7 +2648,6 @@
               "force_set_state":"false",
               "leader":"true"}}}},
       "router":{"name":"compositeId"},
-      "maxShardsPerNode":"1",
       "autoAddReplicas":"true",
       "nrtReplicas":"1",
       "tlogReplicas":"0"},
@@ -2693,7 +2681,6 @@
               "force_set_state":"false",
               "leader":"true"}}}},
       "router":{"name":"compositeId"},
-      "maxShardsPerNode":"1",
       "autoAddReplicas":"true",
       "nrtReplicas":"3",
       "tlogReplicas":"0"},
@@ -2727,7 +2714,6 @@
               "force_set_state":"false",
               "leader":"true"}}}},
       "router":{"name":"compositeId"},
-      "maxShardsPerNode":"1",
       "autoAddReplicas":"true",
       "nrtReplicas":"3",
       "tlogReplicas":"0"},
@@ -2814,7 +2800,6 @@
               "type":"NRT",
               "force_set_state":"false"}}}},
       "router":{"name":"compositeId"},
-      "maxShardsPerNode":"1",
       "autoAddReplicas":"true",
       "nrtReplicas":"3",
       "tlogReplicas":"0"},
@@ -2848,7 +2833,6 @@
               "force_set_state":"false",
               "leader":"true"}}}},
       "router":{"name":"compositeId"},
-      "maxShardsPerNode":"1",
       "autoAddReplicas":"true",
       "nrtReplicas":"3",
-      "tlogReplicas":"0"}}}
\ No newline at end of file
+      "tlogReplicas":"0"}}}
diff --git a/solr/core/src/test-files/solr/simSnapshot/statistics.json b/solr/core/src/test-files/solr/simSnapshot/statistics.json
index 735c36e..e806612 100644
--- a/solr/core/src/test-files/solr/simSnapshot/statistics.json
+++ b/solr/core/src/test-files/solr/simSnapshot/statistics.json
@@ -2042,4 +2042,4 @@
       "minCoresPerNode":1,
       "avgShardSize":22.679232054390013,
       "maxShardSize":22.679232054390013,
-      "minShardSize":22.679232054390013}}}
\ No newline at end of file
+      "minShardSize":22.679232054390013}}}
diff --git a/solr/core/src/test/org/apache/solr/cloud/MultiSolrCloudTestCaseTest.java b/solr/core/src/test/org/apache/solr/cloud/MultiSolrCloudTestCaseTest.java
index 21cf5631..e4b7551 100644
--- a/solr/core/src/test/org/apache/solr/cloud/MultiSolrCloudTestCaseTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/MultiSolrCloudTestCaseTest.java
@@ -27,7 +27,6 @@ public class MultiSolrCloudTestCaseTest extends MultiSolrCloudTestCase {
 
   private static int numShards;
   private static int numReplicas;
-  private static int maxShardsPerNode;
   private static int nodesPerCluster;
 
   @BeforeClass
diff --git a/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionConfigSetProcessorTest.java b/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionConfigSetProcessorTest.java
index 9e49fdf..d618653 100644
--- a/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionConfigSetProcessorTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionConfigSetProcessorTest.java
@@ -782,7 +782,6 @@ public class OverseerCollectionConfigSetProcessorTest extends SolrTestCaseJ4 {
     CreateNodeListOptions createNodeListOptions = CreateNodeListOptions.DONT_SEND;
     Integer replicationFactor = 2;
     Integer numberOfSlices = 4;
-    Integer maxShardsPerNode = 2;
     testTemplate(numberOfNodes, numberOfNodesToCreateOn, createNodeListOptions, replicationFactor, numberOfSlices,
         true);
   }
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 955c4b5..5e06c28 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestPullReplica.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestPullReplica.java
@@ -134,12 +134,11 @@ public class TestPullReplica extends SolrCloudTestCase {
           break;
         case 1:
           // Sometimes use v1 API
-          String url = String.format(Locale.ROOT, "%s/admin/collections?action=CREATE&name=%s&collection.configName=%s&numShards=%s&pullReplicas=%s&maxShardsPerNode=%s",
+          String url = String.format(Locale.ROOT, "%s/admin/collections?action=CREATE&name=%s&collection.configName=%s&numShards=%s&pullReplicas=%s",
               cluster.getRandomJetty(random()).getBaseUrl(),
               collectionName, "conf",
               2,    // numShards
-              3,    // pullReplicas
-              100); // maxShardsPerNode
+              3);   // pullReplicas
           url = url + pickRandom("", "&nrtReplicas=1", "&replicationFactor=1"); // These options should all mean the same
           HttpGet createCollectionGet = new HttpGet(url);
           cluster.getSolrClient().getHttpClient().execute(createCollectionGet);
@@ -147,11 +146,10 @@ public class TestPullReplica extends SolrCloudTestCase {
         case 2:
           // Sometimes use V2 API
           url = cluster.getRandomJetty(random()).getBaseUrl().toString() + "/____v2/c";
-          String requestBody = String.format(Locale.ROOT, "{create:{name:%s, config:%s, numShards:%s, pullReplicas:%s, maxShardsPerNode:%s %s}}",
+          String requestBody = String.format(Locale.ROOT, "{create:{name:%s, config:%s, numShards:%s, pullReplicas:%s, %s}}",
               collectionName, "conf",
               2,    // numShards
               3,    // pullReplicas
-              100, // maxShardsPerNode
               pickRandom("", ", nrtReplicas:1", ", replicationFactor:1")); // These options should all mean the same
           HttpPost createCollectionPost = new HttpPost(url);
           createCollectionPost.setHeader("Content-type", "application/json");
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/AbstractCloudBackupRestoreTestCase.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/AbstractCloudBackupRestoreTestCase.java
index a7da88f..09d86ab 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/AbstractCloudBackupRestoreTestCase.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/AbstractCloudBackupRestoreTestCase.java
@@ -189,10 +189,6 @@ public abstract class AbstractCloudBackupRestoreTestCase extends SolrCloudTestCa
     {
       CollectionAdminRequest.Restore restore = CollectionAdminRequest.restoreCollection(restoreCollectionName, backupName)
           .setLocation(backupLocation).setRepositoryName(getBackupRepoName());
-      if (backupCollection.getReplicas().size() > cluster.getJettySolrRunners().size()) {
-        // may need to increase maxShardsPerNode (e.g. if it was shard split, then now we need more)
-        //restore.setMaxShardsPerNode((int)Math.ceil(backupCollection.getReplicas().size()/cluster.getJettySolrRunners().size()));
-      }
 
       restore.setConfigName("confFaulty");
       assertEquals(RequestStatusState.FAILED, restore.processAndWait(solrClient, 30));
@@ -331,20 +327,9 @@ public abstract class AbstractCloudBackupRestoreTestCase extends SolrCloudTestCa
     }
     int computeRestoreMaxShardsPerNode = (int) Math.ceil((restoreReplFactor * numShards/(double) cluster.getJettySolrRunners().size()));
 
-    if (restoreReplFactor > backupReplFactor) { //else the backup maxShardsPerNode should be enough
-      if (log.isInfoEnabled()) {
-        log.info("numShards={} restoreReplFactor={} maxShardsPerNode={} totalNodes={}",
-            numShards, restoreReplFactor, computeRestoreMaxShardsPerNode, cluster.getJettySolrRunners().size());
-      }
-
-    }
-
     if (rarely()) { // Try with createNodeSet configuration
       //Always 1 as cluster.getJettySolrRunners().size()=NUM_SHARDS=2
       restore.setCreateNodeSet(cluster.getJettySolrRunners().get(0).getNodeName());
-//      // we need to double maxShardsPerNode value since we reduced number of available nodes by half.
-//      computeRestoreMaxShardsPerNode = origShardToDocCount.size() * restoreReplFactor;
-//      restore.setMaxShardsPerNode(computeRestoreMaxShardsPerNode);
     }
 
     final int restoreMaxShardsPerNode = computeRestoreMaxShardsPerNode;
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/CustomCollectionTest.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/CustomCollectionTest.java
index 5e1524e..69187a0 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/CustomCollectionTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/CustomCollectionTest.java
@@ -148,7 +148,6 @@ public class CustomCollectionTest extends SolrCloudTestCase {
     String collectionName = "routeFieldColl";
     int numShards = 4;
     int replicationFactor = 2;
-    int maxShardsPerNode = ((numShards * replicationFactor) / NODE_COUNT) + 1;
     String shard_fld = "shard_s";
 
     CollectionAdminRequest.createCollection(collectionName, "conf", numShards, replicationFactor)
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestRequestStatusCollectionAPI.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestRequestStatusCollectionAPI.java
index 58c4686..3c21200 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestRequestStatusCollectionAPI.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestRequestStatusCollectionAPI.java
@@ -49,7 +49,6 @@ public class TestRequestStatusCollectionAPI extends BasicDistributedZkTest {
     params.set("numShards", numShards);
     int replicationFactor = 1;
     params.set("replicationFactor", replicationFactor);
-    params.set("maxShardsPerNode", 100);
     params.set("collection.configName", "conf1");
     params.set(CommonAdminParams.ASYNC, "1000");
     try {
@@ -130,7 +129,6 @@ public class TestRequestStatusCollectionAPI extends BasicDistributedZkTest {
     params.set("name", "collection2");
     params.set("numShards", 2);
     params.set("replicationFactor", 1);
-    params.set("maxShardsPerNode", 100);
     params.set("collection.configName", "conf1");
     params.set(CommonAdminParams.ASYNC, "1002");
     try {
@@ -158,7 +156,6 @@ public class TestRequestStatusCollectionAPI extends BasicDistributedZkTest {
     params.set("name", "collection3");
     params.set("numShards", 1);
     params.set("replicationFactor", 1);
-    params.set("maxShardsPerNode", 100);
     params.set("collection.configName", "conf1");
     params.set(CommonAdminParams.ASYNC, "1002");
     try {
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimScenario.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimScenario.java
index f246062..38e921a 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimScenario.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimScenario.java
@@ -42,7 +42,7 @@ public class TestSimScenario extends SimSolrCloudTestCase {
       "// java comment\n" +
       "create_cluster numNodes=2 // inline comment\n" +
       "load_autoscaling json={'cluster-policy'+:+[{'replica'+:+'<3',+'shard'+:+'#EACH',+'collection'+:+'testCollection','node':'#ANY'}]}&defaultWaitFor=10\n" +
-      "solr_request /admin/collections?action=CREATE&autoAddReplicas=true&name=testCollection&numShards=2&replicationFactor=2&maxShardsPerNode=2\n" +
+      "solr_request /admin/collections?action=CREATE&autoAddReplicas=true&name=testCollection&numShards=2&replicationFactor=2\n" +
       "wait_collection collection=testCollection&shards=2&replicas=2\n" +
       "event_listener trigger=.auto_add_replicas&stage=SUCCEEDED\n" +
       "kill_nodes node=${_random_node_}\n" +
@@ -65,7 +65,7 @@ public class TestSimScenario extends SimSolrCloudTestCase {
   String testSuggestionsScenario =
       "create_cluster numNodes=2\n" +
       "load_autoscaling json={'cluster-policy':[]}\n" +
-      "solr_request /admin/collections?action=CREATE&autoAddReplicas=true&name=testCollection&numShards=2&replicationFactor=2&maxShardsPerNode=2\n" +
+      "solr_request /admin/collections?action=CREATE&autoAddReplicas=true&name=testCollection&numShards=2&replicationFactor=2\n" +
       "wait_collection collection=testCollection&shards=2&replicas=2\n" +
       "ctx_set key=myNode&value=${_random_node_}\n" +
       "solr_request /admin/collections?action=ADDREPLICA&collection=testCollection&shard=shard1&node=${myNode}\n" +
@@ -124,7 +124,7 @@ public class TestSimScenario extends SimSolrCloudTestCase {
   String indexingScenario =
       "create_cluster numNodes=100\n" +
       "load_autoscaling json={'cluster-policy':[]}\n" +
-      "solr_request /admin/collections?action=CREATE&autoAddReplicas=true&name=testCollection&numShards=2&replicationFactor=2&maxShardsPerNode=2\n" +
+      "solr_request /admin/collections?action=CREATE&autoAddReplicas=true&name=testCollection&numShards=2&replicationFactor=2\n" +
       "wait_collection collection=testCollection&shards=2&replicas=2\n" +
       "solr_request /admin/autoscaling?httpMethod=POST&stream.body=" +
           "{'set-trigger':{'name':'indexSizeTrigger','event':'indexSize','waitFor':'10s','aboveDocs':1000,'enabled':true,"+
@@ -148,7 +148,7 @@ public class TestSimScenario extends SimSolrCloudTestCase {
   String splitShardScenario =
       "create_cluster numNodes=2\n" +
           "load_autoscaling json={'cluster-policy':[]}\n" +
-          "solr_request /admin/collections?action=CREATE&name=testCollection&numShards=2&replicationFactor=2&maxShardsPerNode=5\n" +
+          "solr_request /admin/collections?action=CREATE&name=testCollection&numShards=2&replicationFactor=2\n" +
           "wait_collection collection=testCollection&shards=2&replicas=2\n" +
           "set_shard_metrics collection=testCollection&shard=shard1&INDEX.sizeInBytes=1000000000\n" +
           "set_node_metrics nodeset=#ANY&freedisk=1.5\n" +
diff --git a/solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml b/solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
index 45a5ef8..e1daa87 100644
--- a/solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
+++ b/solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
@@ -742,7 +742,7 @@
          -->
        <!-- Controls the distribution of a query to shards other than itself.
             Consider making 'preferLocalShards' true when:
-              1) maxShardsPerNode > 1
+              1) more than 1 replica may be located on a node
               2) Number of shards > 1
               3) CloudSolrClient or LbHttpSolrServer is used by clients.
             Without this option, every core broadcasts the distributed query to
diff --git a/solr/solrj/src/resources/apispec/collections.Commands.json b/solr/solrj/src/resources/apispec/collections.Commands.json
index 5fc7f76..2eb700f 100644
--- a/solr/solrj/src/resources/apispec/collections.Commands.json
+++ b/solr/solrj/src/resources/apispec/collections.Commands.json
@@ -76,10 +76,6 @@
           "type": "boolean",
           "description": "Controls whether or not the shard-replicas created for this collection will be assigned to the nodes specified by the nodeSet property in a sequential manner, or if the list of nodes should be shuffled prior to creating individual replicas. A 'false' value makes the results of a collection creation predictable and gives more exact control over the location of the individual shard-replicas, but 'true' can be a better choice for ensuring replicas are distributed e [...]
         },
-        "maxShardsPerNode": {
-          "type": "integer",
-          "description": "When creating collections, the shards and/or replicas are spread across all available, live, nodes, and two replicas of the same shard will never be on the same node. If a node is not live when the collection is created, it will not get any parts of the new collection, which could lead to too many replicas being created on a single live node. Defining maxShardsPerNode sets a limit on the number of replicas can be spread to each node. If the entire collection can [...]
-        },
         "autoAddReplicas": {
           "type": "boolean",
           "description": "When set to true, enables auto addition of replicas when the number of active replicas falls below the value set for replicationFactor.",
diff --git a/solr/solrj/src/test-files/solrj/solr/autoscaling/testAddMissingReplica.json b/solr/solrj/src/test-files/solrj/solr/autoscaling/testAddMissingReplica.json
index 6046945..6c202a5 100644
--- a/solr/solrj/src/test-files/solrj/solr/autoscaling/testAddMissingReplica.json
+++ b/solr/solrj/src/test-files/solrj/solr/autoscaling/testAddMissingReplica.json
@@ -112,7 +112,6 @@
                 "force_set_state":"false",
                 "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"-1",
         "autoAddReplicas":"false",
         "nrtReplicas":"2",
         "tlogReplicas":"0",
diff --git a/solr/solrj/src/test-files/solrj/solr/autoscaling/testAutoscalingPreferencesUsedWithNoPolicy.json b/solr/solrj/src/test-files/solrj/solr/autoscaling/testAutoscalingPreferencesUsedWithNoPolicy.json
index a4c39d4..4974eef 100644
--- a/solr/solrj/src/test-files/solrj/solr/autoscaling/testAutoscalingPreferencesUsedWithNoPolicy.json
+++ b/solr/solrj/src/test-files/solrj/solr/autoscaling/testAutoscalingPreferencesUsedWithNoPolicy.json
@@ -29,7 +29,6 @@
       "port":8985}},
 "clusterstate":{"c1":{
   "router":{"name":"compositeId"},
-  "maxShardsPerNode":-1,
   "shards":{
     "s1":{"replicas":{
       "r1":{
diff --git a/solr/solrj/src/test-files/solrj/solr/autoscaling/testEmptyCollection.json b/solr/solrj/src/test-files/solrj/solr/autoscaling/testEmptyCollection.json
index 7dd4295..0da18b4 100644
--- a/solr/solrj/src/test-files/solrj/solr/autoscaling/testEmptyCollection.json
+++ b/solr/solrj/src/test-files/solrj/solr/autoscaling/testEmptyCollection.json
@@ -19,9 +19,8 @@
   "router":{
     "name":"compositeId",
     "field":"shard_s"},
-  "maxShardsPerNode":"-1",
   "autoAddReplicas":"false",
   "nrtReplicas":1,
   "tlogReplicas":0}},
 
-  "replicaInfo":{}}
\ No newline at end of file
+  "replicaInfo":{}}
diff --git a/solr/solrj/src/test-files/solrj/solr/autoscaling/testInfiniteLoop.json b/solr/solrj/src/test-files/solrj/solr/autoscaling/testInfiniteLoop.json
index ff1bf2a..dbc425d 100644
--- a/solr/solrj/src/test-files/solrj/solr/autoscaling/testInfiniteLoop.json
+++ b/solr/solrj/src/test-files/solrj/solr/autoscaling/testInfiniteLoop.json
@@ -9699,7 +9699,6 @@
               "force_set_state":"false",
               "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -10073,7 +10072,6 @@
               "force_set_state":"false",
               "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -10183,7 +10181,6 @@
               "force_set_state":"false",
               "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -10232,7 +10229,6 @@
                 "force_set_state":"false",
                 "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -10474,7 +10470,6 @@
               "force_set_state":"false",
               "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -10827,7 +10822,6 @@
                 "type":"NRT",
                 "force_set_state":"false"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"4",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -10952,7 +10946,6 @@
                 "force_set_state":"false",
                 "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"2",
         "tlogReplicas":"0",
@@ -11001,7 +10994,6 @@
                 "force_set_state":"false",
                 "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -11111,7 +11103,6 @@
               "force_set_state":"false",
               "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -11806,7 +11797,6 @@
                 "type":"NRT",
                 "force_set_state":"false"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -11855,7 +11845,6 @@
                 "type":"NRT",
                 "force_set_state":"false"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -11965,7 +11954,6 @@
               "force_set_state":"false",
               "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -12014,7 +12002,6 @@
                 "type":"NRT",
                 "force_set_state":"false"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -12050,7 +12037,6 @@
               "type":"NRT",
               "force_set_state":"false"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -12099,7 +12085,6 @@
                 "force_set_state":"false",
                 "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -12148,7 +12133,6 @@
                 "force_set_state":"false",
                 "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -12258,7 +12242,6 @@
               "force_set_state":"false",
               "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -12566,7 +12549,6 @@
               "force_set_state":"false",
               "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -12615,7 +12597,6 @@
                 "force_set_state":"false",
                 "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -12664,7 +12645,6 @@
                 "force_set_state":"false",
                 "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -12713,7 +12693,6 @@
                 "force_set_state":"false",
                 "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
@@ -12781,7 +12760,6 @@
                 "force_set_state":"false",
                 "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"2",
         "tlogReplicas":"0",
@@ -13155,7 +13133,6 @@
               "force_set_state":"false",
               "leader":"true"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"1",
         "autoAddReplicas":"false",
         "nrtReplicas":"1",
         "tlogReplicas":"0",
diff --git a/solr/solrj/src/test-files/solrj/solr/autoscaling/testMoveReplicasInMultipleCollections.json b/solr/solrj/src/test-files/solrj/solr/autoscaling/testMoveReplicasInMultipleCollections.json
index 16ba1a7..b515050 100644
--- a/solr/solrj/src/test-files/solrj/solr/autoscaling/testMoveReplicasInMultipleCollections.json
+++ b/solr/solrj/src/test-files/solrj/solr/autoscaling/testMoveReplicasInMultipleCollections.json
@@ -38,7 +38,6 @@
             "type":"NRT"}}}},
     "router":{
       "name":"compositeId"},
-    "maxShardsPerNode":"2",
     "autoAddReplicas":"true",
     "nrtReplicas":"2",
     "tlogReplicas":"0"},
@@ -82,7 +81,6 @@
             "leader":"true"}}}},
     "router":{
       "name":"compositeId"},
-    "maxShardsPerNode":"2",
     "autoAddReplicas":"true",
     "nrtReplicas":"2",
-    "tlogReplicas":"0"}}
\ No newline at end of file
+    "tlogReplicas":"0"}}
diff --git a/solr/solrj/src/test-files/solrj/solr/autoscaling/testUnresolvedSuggestion.json b/solr/solrj/src/test-files/solrj/solr/autoscaling/testUnresolvedSuggestion.json
index 19401de..e22b652 100644
--- a/solr/solrj/src/test-files/solrj/solr/autoscaling/testUnresolvedSuggestion.json
+++ b/solr/solrj/src/test-files/solrj/solr/autoscaling/testUnresolvedSuggestion.json
@@ -200,7 +200,6 @@
                 "type":"NRT",
                 "force_set_state":"false"}}}},
         "router":{"name":"compositeId"},
-        "maxShardsPerNode":"-1",
         "autoAddReplicas":"false",
         "nrtReplicas":"2",
         "tlogReplicas":"0",
@@ -209,4 +208,4 @@
     "live_nodes":["10.0.0.80:8983_solr",
       "10.0.0.80:7574_solr",
       "10.0.0.80:8984_solr"]}
-}
\ No newline at end of file
+}
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientCacheTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientCacheTest.java
index 1a671a8..d35f4d9 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientCacheTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientCacheTest.java
@@ -157,7 +157,6 @@ public class CloudSolrClientCacheTest extends SolrTestCaseJ4 {
   private String coll1State = "{'gettingstarted':{\n" +
       "    'replicationFactor':'2',\n" +
       "    'router':{'name':'compositeId'},\n" +
-      "    'maxShardsPerNode':'2',\n" +
       "    'autoAddReplicas':'false',\n" +
       "    'shards':{\n" +
       "      'shard1':{\n" +


[lucene-solr] 01/11: SOLR-12847: Remove maxShardsPerNode, step 1.

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ab pushed a commit to branch jira/solr-12847-2
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 25f1351845af20631d9e703e2b86943159e4a458
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Tue Apr 14 18:48:53 2020 +0200

    SOLR-12847: Remove maxShardsPerNode, step 1.
---
 .../org/apache/solr/ltr/TestLTROnSolrCloud.java    | 12 ++--
 .../prometheus/PrometheusExporterTestBase.java     |  4 +-
 .../apache/solr/cloud/api/collections/Assign.java  | 18 ------
 .../cloud/api/collections/CreateCollectionCmd.java | 19 ------
 .../OverseerCollectionMessageHandler.java          |  1 -
 .../api/collections/ReindexCollectionCmd.java      |  3 -
 .../solr/cloud/api/collections/RestoreCmd.java     | 12 ----
 .../autoscaling/sim/SimClusterStateProvider.java   |  3 -
 .../solr/cloud/autoscaling/sim/SimUtils.java       |  1 -
 .../solr/handler/admin/CollectionsHandler.java     |  5 +-
 .../apache/solr/HelloWorldSolrCloudTestCase.java   |  4 +-
 .../test/org/apache/solr/cloud/AddReplicaTest.java |  2 -
 .../cloud/AssignBackwardCompatibilityTest.java     |  1 -
 .../apache/solr/cloud/BasicDistributedZkTest.java  |  5 +-
 .../solr/cloud/ChaosMonkeyNothingIsSafeTest.java   |  2 +-
 ...aosMonkeyNothingIsSafeWithPullReplicasTest.java |  3 +-
 .../solr/cloud/ChaosMonkeySafeLeaderTest.java      |  2 +-
 .../ChaosMonkeySafeLeaderWithPullReplicasTest.java |  2 +-
 .../apache/solr/cloud/ClusterStateMockUtil.java    |  9 +--
 .../apache/solr/cloud/CollectionsAPISolrJTest.java |  1 -
 .../apache/solr/cloud/CreateRoutedAliasTest.java   |  2 -
 .../solr/cloud/DeleteInactiveReplicaTest.java      |  2 -
 .../cloud/DeleteLastCustomShardedReplicaTest.java  |  1 -
 .../test/org/apache/solr/cloud/DeleteNodeTest.java |  2 +-
 .../org/apache/solr/cloud/DeleteShardTest.java     |  1 -
 .../apache/solr/cloud/DocValuesNotIndexedTest.java |  1 -
 .../org/apache/solr/cloud/ForceLeaderTest.java     |  2 +-
 .../solr/cloud/HttpPartitionOnCommitTest.java      |  4 +-
 .../org/apache/solr/cloud/HttpPartitionTest.java   |  8 +--
 .../solr/cloud/LeaderElectionContextKeyTest.java   |  1 -
 .../solr/cloud/LeaderElectionIntegrationTest.java  |  2 +-
 .../cloud/LeaderFailoverAfterPartitionTest.java    |  2 +-
 .../solr/cloud/LegacyCloudClusterPropTest.java     |  1 -
 .../solr/cloud/MissingSegmentRecoveryTest.java     |  1 -
 .../org/apache/solr/cloud/MoveReplicaTest.java     |  1 -
 .../solr/cloud/MultiSolrCloudTestCaseTest.java     |  5 +-
 .../org/apache/solr/cloud/NodeMutatorTest.java     |  4 +-
 .../OverseerCollectionConfigSetProcessorTest.java  | 70 +++++-----------------
 .../test/org/apache/solr/cloud/OverseerTest.java   |  7 +--
 .../test/org/apache/solr/cloud/RecoveryZkTest.java |  1 -
 .../apache/solr/cloud/ReindexCollectionTest.java   |  1 -
 .../org/apache/solr/cloud/ReplaceNodeTest.java     |  2 +-
 .../apache/solr/cloud/ReplicationFactorTest.java   | 12 ++--
 .../cloud/SharedFSAutoReplicaFailoverTest.java     |  4 --
 .../test/org/apache/solr/cloud/SplitShardTest.java |  3 -
 .../solr/cloud/SystemCollectionCompatTest.java     |  1 -
 .../solr/cloud/TestAuthenticationFramework.java    |  5 +-
 .../apache/solr/cloud/TestBaseStatsCacheCloud.java |  1 -
 .../org/apache/solr/cloud/TestCloudRecovery.java   |  1 -
 .../org/apache/solr/cloud/TestCloudRecovery2.java  |  1 -
 .../solr/cloud/TestCloudSearcherWarming.java       |  2 +-
 .../cloud/TestDeleteCollectionOnDownNodes.java     |  1 -
 .../cloud/TestDynamicFieldNamesIndexCorrectly.java |  2 +-
 .../solr/cloud/TestOnReconnectListenerSupport.java |  2 +-
 .../org/apache/solr/cloud/TestPullReplica.java     |  7 ---
 .../solr/cloud/TestPullReplicaErrorHandling.java   |  3 -
 .../apache/solr/cloud/TestRebalanceLeaders.java    |  1 -
 .../apache/solr/cloud/TestRequestForwarding.java   |  1 -
 .../solr/cloud/TestSkipOverseerOperations.java     |  1 -
 .../solr/cloud/TestSolrCloudWithKerberosAlt.java   |  4 +-
 .../TestSolrCloudWithSecureImpersonation.java      |  1 -
 .../org/apache/solr/cloud/TestTlogReplica.java     |  3 -
 .../org/apache/solr/cloud/TestUtilizeNode.java     |  3 +-
 .../org/apache/solr/cloud/ZkShardTermsTest.java    |  1 -
 .../AbstractCloudBackupRestoreTestCase.java        | 29 ---------
 .../AsyncCallRequestStatusResponseTest.java        |  1 -
 .../collections/CollectionTooManyReplicasTest.java |  3 -
 .../CollectionsAPIDistributedZkTest.java           |  5 +-
 .../ConcurrentCreateCollectionTest.java            |  6 +-
 .../api/collections/CustomCollectionTest.java      |  7 ---
 .../solr/cloud/api/collections/ShardSplitTest.java | 10 ----
 .../cloud/api/collections/SplitByPrefixTest.java   |  1 -
 .../cloud/api/collections/TestCollectionAPI.java   |  5 +-
 .../TestCollectionsAPIViaSolrCloudCluster.java     |  3 -
 .../api/collections/TestReplicaProperties.java     |  4 +-
 .../AutoAddReplicasIntegrationTest.java            |  5 --
 .../autoscaling/AutoAddReplicasPlanActionTest.java |  3 -
 .../cloud/autoscaling/AutoScalingHandlerTest.java  |  5 +-
 .../cloud/autoscaling/ComputePlanActionTest.java   |  9 ++-
 .../cloud/autoscaling/ExecutePlanActionTest.java   |  4 --
 .../IndexSizeTriggerMixedBoundsTest.java           |  2 +-
 .../IndexSizeTriggerSizeEstimationTest.java        |  2 +-
 .../cloud/autoscaling/IndexSizeTriggerTest.java    | 10 ++--
 .../autoscaling/MetricTriggerIntegrationTest.java  |  2 +-
 .../solr/cloud/autoscaling/MetricTriggerTest.java  |  1 -
 .../ScheduledTriggerIntegrationTest.java           |  2 +-
 .../cloud/autoscaling/SearchRateTriggerTest.java   |  3 -
 .../cloud/autoscaling/SystemLogListenerTest.java   |  1 -
 .../solr/cloud/autoscaling/TestPolicyCloud.java    |  1 -
 .../autoscaling/sim/TestSimComputePlanAction.java  |  3 +-
 .../autoscaling/sim/TestSimExecutePlanAction.java  |  2 -
 .../autoscaling/sim/TestSimExtremeIndexing.java    |  2 +-
 .../cloud/autoscaling/sim/TestSimLargeCluster.java |  5 --
 .../cloud/autoscaling/sim/TestSimPolicyCloud.java  |  1 -
 .../solr/cloud/cdcr/BaseCdcrDistributedZkTest.java |  9 +--
 .../solr/cloud/cdcr/CdcrBidirectionalTest.java     |  2 -
 .../apache/solr/cloud/cdcr/CdcrBootstrapTest.java  |  1 -
 .../apache/solr/cloud/hdfs/HdfsNNFailoverTest.java |  2 +-
 .../hdfs/HdfsWriteToMultipleCollectionsTest.java   |  2 +-
 .../org/apache/solr/cloud/hdfs/StressHdfsTest.java |  7 +--
 .../cloud/overseer/TestClusterStateMutator.java    |  5 +-
 .../admin/AutoscalingHistoryHandlerTest.java       |  1 -
 .../solr/handler/admin/DaemonStreamApiTest.java    |  3 -
 .../solr/handler/admin/HealthCheckHandlerTest.java |  2 +-
 .../solr/handler/admin/IndexSizeEstimatorTest.java |  2 +-
 .../component/CustomHighlightComponentTest.java    |  4 +-
 .../DistributedQueryComponentOptimizationTest.java |  1 -
 .../handler/component/ShardsWhitelistTest.java     |  3 +-
 .../component/TestTrackingShardHandlerFactory.java |  2 +-
 .../reporters/SolrJmxReporterCloudTest.java        |  1 -
 .../reporters/solr/SolrCloudReportersTest.java     |  2 -
 .../src/test/org/apache/solr/pkg/TestPackages.java |  1 -
 .../schema/ManagedSchemaRoundRobinCloudTest.java   |  1 -
 .../PreAnalyzedFieldManagedSchemaCloudTest.java    |  1 -
 .../apache/solr/schema/SchemaApiFailureTest.java   |  1 -
 .../solr/search/CurrencyRangeFacetCloudTest.java   |  2 -
 .../solr/search/facet/RangeFacetCloudTest.java     |  2 -
 .../apache/solr/search/stats/TestDistribIDF.java   |  2 -
 .../solr/security/BasicAuthOnSingleNodeTest.java   |  1 -
 .../solr/servlet/HttpSolrCallGetCoreTest.java      |  1 -
 .../update/TestInPlaceUpdateWithRouteField.java    |  1 -
 .../processor/AtomicUpdateRemovalJavabinTest.java  |  2 -
 .../CategoryRoutedAliasUpdateProcessorTest.java    | 18 ++----
 .../DimensionalRoutedAliasUpdateProcessorTest.java |  6 +-
 .../TimeRoutedAliasUpdateProcessorTest.java        | 26 ++++----
 .../test/org/apache/solr/util/TestExportTool.java  |  2 -
 .../solrj/request/CollectionAdminRequest.java      | 11 ----
 .../apache/solr/common/cloud/DocCollection.java    | 12 ----
 .../apache/solr/common/cloud/ZkStateReader.java    |  1 -
 .../solrj/impl/CloudHttp2SolrClientTest.java       |  3 -
 .../client/solrj/impl/CloudSolrClientTest.java     |  3 -
 .../solr/client/solrj/io/stream/StreamingTest.java |  1 -
 .../apache/solr/common/cloud/SolrZkClientTest.java |  1 -
 .../solr/cloud/AbstractFullDistribZkTestBase.java  | 23 +++----
 .../apache/solr/cloud/MultiSolrCloudTestCase.java  |  5 +-
 135 files changed, 124 insertions(+), 479 deletions(-)

diff --git a/solr/contrib/ltr/src/test/org/apache/solr/ltr/TestLTROnSolrCloud.java b/solr/contrib/ltr/src/test/org/apache/solr/ltr/TestLTROnSolrCloud.java
index c8f96d1..21b71c3 100644
--- a/solr/contrib/ltr/src/test/org/apache/solr/ltr/TestLTROnSolrCloud.java
+++ b/solr/contrib/ltr/src/test/org/apache/solr/ltr/TestLTROnSolrCloud.java
@@ -53,11 +53,10 @@ public class TestLTROnSolrCloud extends TestRerankBase {
 
     int numberOfShards = random().nextInt(4)+1;
     int numberOfReplicas = random().nextInt(2)+1;
-    int maxShardsPerNode = random().nextInt(4)+1;
 
-    int numberOfNodes = (numberOfShards*numberOfReplicas + (maxShardsPerNode-1))/maxShardsPerNode;
+    int numberOfNodes = numberOfShards * numberOfReplicas;
 
-    setupSolrCluster(numberOfShards, numberOfReplicas, numberOfNodes, maxShardsPerNode);
+    setupSolrCluster(numberOfShards, numberOfReplicas, numberOfNodes);
 
 
   }
@@ -197,7 +196,7 @@ public class TestLTROnSolrCloud extends TestRerankBase {
         queryResponse.getResults().get(7).get("features").toString());
   }
 
-  private void setupSolrCluster(int numShards, int numReplicas, int numServers, int maxShardsPerNode) throws Exception {
+  private void setupSolrCluster(int numShards, int numReplicas, int numServers) throws Exception {
     JettyConfig jc = buildJettyConfig("/solr");
     jc = JettyConfig.builder(jc).withServlets(extraServlets).build();
     solrCluster = new MiniSolrCloudCluster(numServers, tmpSolrHome.toPath(), jc);
@@ -206,7 +205,7 @@ public class TestLTROnSolrCloud extends TestRerankBase {
 
     solrCluster.getSolrClient().setDefaultCollection(COLLECTION);
 
-    createCollection(COLLECTION, "conf1", numShards, numReplicas, maxShardsPerNode);
+    createCollection(COLLECTION, "conf1", numShards, numReplicas);
     indexDocuments(COLLECTION);
     for (JettySolrRunner solrRunner : solrCluster.getJettySolrRunners()) {
       if (!solrRunner.getCoreContainer().getCores().isEmpty()){
@@ -219,12 +218,11 @@ public class TestLTROnSolrCloud extends TestRerankBase {
   }
 
 
-  private void createCollection(String name, String config, int numShards, int numReplicas, int maxShardsPerNode)
+  private void createCollection(String name, String config, int numShards, int numReplicas)
       throws Exception {
     CollectionAdminResponse response;
     CollectionAdminRequest.Create create =
         CollectionAdminRequest.createCollection(name, config, numShards, numReplicas);
-    create.setMaxShardsPerNode(maxShardsPerNode);
     response = create.process(solrCluster.getSolrClient());
 
     if (response.getStatus() != 0 || response.getErrorMessages() != null) {
diff --git a/solr/contrib/prometheus-exporter/src/test/org/apache/solr/prometheus/PrometheusExporterTestBase.java b/solr/contrib/prometheus-exporter/src/test/org/apache/solr/prometheus/PrometheusExporterTestBase.java
index f0b9d2c..81069d7 100644
--- a/solr/contrib/prometheus-exporter/src/test/org/apache/solr/prometheus/PrometheusExporterTestBase.java
+++ b/solr/contrib/prometheus-exporter/src/test/org/apache/solr/prometheus/PrometheusExporterTestBase.java
@@ -31,8 +31,7 @@ public class PrometheusExporterTestBase extends SolrCloudTestCase {
   public static final String CONF_DIR = getFile("solr/" + COLLECTION + "/conf").getAbsolutePath();
   public static final int NUM_SHARDS = 2;
   public static final int NUM_REPLICAS = 2;
-  public static final int MAX_SHARDS_PER_NODE = 1;
-  public static final int NUM_NODES = (NUM_SHARDS * NUM_REPLICAS + (MAX_SHARDS_PER_NODE - 1)) / MAX_SHARDS_PER_NODE;
+  public static final int NUM_NODES = NUM_SHARDS * NUM_REPLICAS;
   public static final int TIMEOUT = 60;
 
   public static final ImmutableMap<String, Double> FACET_VALUES = ImmutableMap.<String, Double>builder()
@@ -66,7 +65,6 @@ public class PrometheusExporterTestBase extends SolrCloudTestCase {
 
     CollectionAdminRequest
         .createCollection(COLLECTION, CONF_NAME, NUM_SHARDS, NUM_REPLICAS)
-        .setMaxShardsPerNode(MAX_SHARDS_PER_NODE)
         .process(cluster.getSolrClient());
 
     AbstractDistribZkTestBase
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/Assign.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/Assign.java
index cf47ab4..3915f80 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/Assign.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/Assign.java
@@ -328,7 +328,6 @@ public class Assign {
                                                           Object createNodeSet, SolrCloudManager cloudManager) throws IOException, InterruptedException, AssignmentException {
     log.debug("getNodesForNewReplicas() shard: {} , nrtReplicas : {} , tlogReplicas: {} , pullReplicas: {} , createNodeSet {}", shard, nrtReplicas, tlogReplicas, pullReplicas, createNodeSet );
     DocCollection coll = clusterState.getCollection(collectionName);
-    Integer maxShardsPerNode = coll.getMaxShardsPerNode() == -1 ? Integer.MAX_VALUE : coll.getMaxShardsPerNode();
     List<String> createNodeList = null;
 
     if (createNodeSet instanceof List) {
@@ -340,21 +339,6 @@ public class Assign {
 
     HashMap<String, ReplicaCount> nodeNameVsShardCount = getNodeNameVsShardCount(collectionName, clusterState, createNodeList);
 
-    if (createNodeList == null) { // We only care if we haven't been told to put new replicas on specific nodes.
-      long availableSlots = 0;
-      for (Map.Entry<String, ReplicaCount> ent : nodeNameVsShardCount.entrySet()) {
-        //ADDREPLICA can put more than maxShardsPerNode on an instance, so this test is necessary.
-        if (maxShardsPerNode > ent.getValue().thisCollectionNodes) {
-          availableSlots += (maxShardsPerNode - ent.getValue().thisCollectionNodes);
-        }
-      }
-      if (availableSlots < nrtReplicas + tlogReplicas + pullReplicas) {
-        throw new AssignmentException(
-            String.format(Locale.ROOT, "Cannot create %d new replicas for collection %s given the current number of eligible live nodes %d and a maxShardsPerNode of %d",
-                nrtReplicas, collectionName, nodeNameVsShardCount.size(), maxShardsPerNode));
-      }
-    }
-
     AssignRequest assignRequest = new AssignRequestBuilder()
         .forCollection(collectionName)
         .forShard(Collections.singletonList(shard))
@@ -422,7 +406,6 @@ public class Assign {
       return nodeNameVsShardCount;
     }
     DocCollection coll = clusterState.getCollection(collectionName);
-    int maxShardsPerNode = coll.getMaxShardsPerNode() == -1 ? Integer.MAX_VALUE : coll.getMaxShardsPerNode();
     Map<String, DocCollection> collections = clusterState.getCollectionsMap();
     for (Map.Entry<String, DocCollection> entry : collections.entrySet()) {
       DocCollection c = entry.getValue();
@@ -435,7 +418,6 @@ public class Assign {
             count.totalNodes++; // Used to "weigh" whether this node should be used later.
             if (entry.getKey().equals(collectionName)) {
               count.thisCollectionNodes++;
-              if (count.thisCollectionNodes >= maxShardsPerNode) nodeNameVsShardCount.remove(replica.getNodeName());
             }
           }
         }
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
index 2e81d51..8cc9734 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
@@ -75,7 +75,6 @@ import org.apache.zookeeper.KeeperException.NoNodeException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.apache.solr.common.cloud.ZkStateReader.MAX_SHARDS_PER_NODE;
 import static org.apache.solr.common.cloud.ZkStateReader.NRT_REPLICAS;
 import static org.apache.solr.common.cloud.ZkStateReader.PULL_REPLICAS;
 import static org.apache.solr.common.cloud.ZkStateReader.REPLICATION_FACTOR;
@@ -358,8 +357,6 @@ public class CreateCollectionCmd implements OverseerCollectionMessageHandler.Cmd
     int numPullReplicas = message.getInt(PULL_REPLICAS, 0);
 
     int numSlices = shardNames.size();
-    int maxShardsPerNode = message.getInt(MAX_SHARDS_PER_NODE, 1);
-    if (maxShardsPerNode == -1) maxShardsPerNode = Integer.MAX_VALUE;
 
     // we need to look at every node and see how many cores it serves
     // add our new cores to existing nodes serving the least number of cores
@@ -383,22 +380,6 @@ public class CreateCollectionCmd implements OverseerCollectionMessageHandler.Cmd
             + "). It's unusual to run two replica of the same slice on the same Solr-instance.");
       }
 
-      int maxShardsAllowedToCreate = maxShardsPerNode == Integer.MAX_VALUE ?
-          Integer.MAX_VALUE :
-          maxShardsPerNode * nodeList.size();
-      int requestedShardsToCreate = numSlices * totalNumReplicas;
-      if (maxShardsAllowedToCreate < requestedShardsToCreate) {
-        throw new Assign.AssignmentException("Cannot create collection " + collectionName + ". Value of "
-            + MAX_SHARDS_PER_NODE + " is " + maxShardsPerNode
-            + ", and the number of nodes currently live or live and part of your "+OverseerCollectionMessageHandler.CREATE_NODE_SET+" is " + nodeList.size()
-            + ". This allows a maximum of " + maxShardsAllowedToCreate
-            + " to be created. Value of " + OverseerCollectionMessageHandler.NUM_SLICES + " is " + numSlices
-            + ", value of " + NRT_REPLICAS + " is " + numNrtReplicas
-            + ", value of " + TLOG_REPLICAS + " is " + numTlogReplicas
-            + " and value of " + PULL_REPLICAS + " is " + numPullReplicas
-            + ". This requires " + requestedShardsToCreate
-            + " shards to be created (higher than the allowed number)");
-      }
       Assign.AssignRequest assignRequest = new Assign.AssignRequestBuilder()
           .forCollection(collectionName)
           .forShard(shardNames)
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java
index 4cba765..6e1809a 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java
@@ -147,7 +147,6 @@ public class OverseerCollectionMessageHandler implements OverseerMessageHandler,
       ZkStateReader.NRT_REPLICAS, "1",
       ZkStateReader.TLOG_REPLICAS, "0",
       ZkStateReader.PULL_REPLICAS, "0",
-      ZkStateReader.MAX_SHARDS_PER_NODE, "1",
       ZkStateReader.AUTO_ADD_REPLICAS, "false",
       DocCollection.RULE, null,
       POLICY, null,
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java
index 6059d3b..143e51e 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java
@@ -110,7 +110,6 @@ public class ReindexCollectionCmd implements OverseerCollectionMessageHandler.Cm
       ZkStateReader.PULL_REPLICAS,
       ZkStateReader.TLOG_REPLICAS,
       ZkStateReader.REPLICATION_FACTOR,
-      ZkStateReader.MAX_SHARDS_PER_NODE,
       "shards",
       Policy.POLICY,
       CollectionAdminParams.CREATE_NODE_SET_PARAM,
@@ -243,7 +242,6 @@ public class ReindexCollectionCmd implements OverseerCollectionMessageHandler.Cm
     Integer numTlog = message.getInt(ZkStateReader.TLOG_REPLICAS, coll.getNumTlogReplicas());
     Integer numPull = message.getInt(ZkStateReader.PULL_REPLICAS, coll.getNumPullReplicas());
     int numShards = message.getInt(ZkStateReader.NUM_SHARDS_PROP, coll.getActiveSlices().size());
-    int maxShardsPerNode = message.getInt(ZkStateReader.MAX_SHARDS_PER_NODE, coll.getMaxShardsPerNode());
     DocRouter router = coll.getRouter();
     if (router == null) {
       router = DocRouter.DEFAULT;
@@ -322,7 +320,6 @@ public class ReindexCollectionCmd implements OverseerCollectionMessageHandler.Cm
         }
       }
 
-      propMap.put(ZkStateReader.MAX_SHARDS_PER_NODE, maxShardsPerNode);
       propMap.put(CommonAdminParams.WAIT_FOR_FINAL_STATE, true);
       propMap.put(DocCollection.STATE_FORMAT, message.getInt(DocCollection.STATE_FORMAT, coll.getStateFormat()));
       if (rf != null) {
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/RestoreCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/RestoreCmd.java
index aa5cbe9..697fd25 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/RestoreCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/RestoreCmd.java
@@ -66,7 +66,6 @@ import org.slf4j.LoggerFactory;
 
 import static org.apache.solr.common.cloud.DocCollection.STATE_FORMAT;
 import static org.apache.solr.common.cloud.ZkStateReader.COLLECTION_PROP;
-import static org.apache.solr.common.cloud.ZkStateReader.MAX_SHARDS_PER_NODE;
 import static org.apache.solr.common.cloud.ZkStateReader.NRT_REPLICAS;
 import static org.apache.solr.common.cloud.ZkStateReader.PULL_REPLICAS;
 import static org.apache.solr.common.cloud.ZkStateReader.REPLICATION_FACTOR;
@@ -131,16 +130,6 @@ public class RestoreCmd implements OverseerCollectionMessageHandler.Cmd {
     int totalReplicasPerShard = numNrtReplicas + numTlogReplicas + numPullReplicas;
     assert totalReplicasPerShard > 0;
     
-    int maxShardsPerNode = message.getInt(MAX_SHARDS_PER_NODE, backupCollectionState.getMaxShardsPerNode());
-    int availableNodeCount = nodeList.size();
-    if (maxShardsPerNode != -1 && (numShards * totalReplicasPerShard) > (availableNodeCount * maxShardsPerNode)) {
-      throw new SolrException(ErrorCode.BAD_REQUEST,
-          String.format(Locale.ROOT, "Solr cloud with available number of nodes:%d is insufficient for"
-              + " restoring a collection with %d shards, total replicas per shard %d and maxShardsPerNode %d."
-              + " Consider increasing maxShardsPerNode value OR number of available nodes.",
-              availableNodeCount, numShards, totalReplicasPerShard, maxShardsPerNode));
-    }
-
     //Upload the configs
     String configName = (String) properties.get(CollectionAdminParams.COLL_CONF);
     String restoreConfigName = message.getStr(CollectionAdminParams.COLL_CONF, configName);
@@ -167,7 +156,6 @@ public class RestoreCmd implements OverseerCollectionMessageHandler.Cmd {
       propMap.put(NRT_REPLICAS, numNrtReplicas);
       propMap.put(TLOG_REPLICAS, numTlogReplicas);
       propMap.put(PULL_REPLICAS, numPullReplicas);
-      properties.put(MAX_SHARDS_PER_NODE, maxShardsPerNode);
 
       // inherit settings from input API, defaulting to the backup's setting.  Ex: replicationFactor
       for (String collProp : OverseerCollectionMessageHandler.COLLECTION_PROPS_AND_DEFAULTS.keySet()) {
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimClusterStateProvider.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimClusterStateProvider.java
index bf5aef1..b9d55bd 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimClusterStateProvider.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimClusterStateProvider.java
@@ -102,7 +102,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static org.apache.solr.common.cloud.ZkStateReader.COLLECTION_PROP;
-import static org.apache.solr.common.cloud.ZkStateReader.MAX_SHARDS_PER_NODE;
 import static org.apache.solr.common.cloud.ZkStateReader.NRT_REPLICAS;
 import static org.apache.solr.common.cloud.ZkStateReader.PULL_REPLICAS;
 import static org.apache.solr.common.cloud.ZkStateReader.REPLICATION_FACTOR;
@@ -880,8 +879,6 @@ public class SimClusterStateProvider implements ClusterStateProvider {
 
     // fail fast if parameters are wrong or incomplete
     List<String> shardNames = CreateCollectionCmd.populateShardNames(props, router);
-    int maxShardsPerNode = props.getInt(MAX_SHARDS_PER_NODE, 1);
-    if (maxShardsPerNode == -1) maxShardsPerNode = Integer.MAX_VALUE;
     CreateCollectionCmd.checkReplicaTypes(props);
 
     // always force getting fresh state
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimUtils.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimUtils.java
index a41886f..97e0313 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimUtils.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimUtils.java
@@ -225,7 +225,6 @@ public class SimUtils {
       perColl.put("activeShards", coll.getActiveSlices().size());
       perColl.put("inactiveShards", coll.getSlices().size() - coll.getActiveSlices().size());
       perColl.put("rf", coll.getReplicationFactor());
-      perColl.put("maxShardsPerNode", coll.getMaxShardsPerNode());
       perColl.put("maxActualShardsPerNode", maxActualShardsPerNode);
       perColl.put("minActualShardsPerNode", minActualShardsPerNode);
       perColl.put("maxShardReplicasPerNode", maxShardReplicasPerNode);
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
index 72cc751..7593d4a 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
@@ -128,7 +128,6 @@ import static org.apache.solr.common.cloud.DocCollection.SNITCH;
 import static org.apache.solr.common.cloud.DocCollection.STATE_FORMAT;
 import static org.apache.solr.common.cloud.ZkStateReader.AUTO_ADD_REPLICAS;
 import static org.apache.solr.common.cloud.ZkStateReader.COLLECTION_PROP;
-import static org.apache.solr.common.cloud.ZkStateReader.MAX_SHARDS_PER_NODE;
 import static org.apache.solr.common.cloud.ZkStateReader.NRT_REPLICAS;
 import static org.apache.solr.common.cloud.ZkStateReader.PROPERTY_PROP;
 import static org.apache.solr.common.cloud.ZkStateReader.PROPERTY_VALUE_PROP;
@@ -456,7 +455,6 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
           REPLICATION_FACTOR,
           COLL_CONF,
           NUM_SLICES,
-          MAX_SHARDS_PER_NODE,
           CREATE_NODE_SET,
           CREATE_NODE_SET_SHUFFLE,
           SHARDS_PROP,
@@ -558,7 +556,6 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
           PULL_REPLICAS,
           TLOG_REPLICAS,
           REPLICATION_FACTOR,
-          MAX_SHARDS_PER_NODE,
           POLICY,
           CREATE_NODE_SET,
           CREATE_NODE_SET_SHUFFLE,
@@ -1169,7 +1166,7 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
       }
       // from CREATE_OP:
       copy(req.getParams(), params, COLL_CONF, REPLICATION_FACTOR, NRT_REPLICAS, TLOG_REPLICAS,
-          PULL_REPLICAS, MAX_SHARDS_PER_NODE, STATE_FORMAT, AUTO_ADD_REPLICAS, CREATE_NODE_SET, CREATE_NODE_SET_SHUFFLE);
+          PULL_REPLICAS, STATE_FORMAT, AUTO_ADD_REPLICAS, CREATE_NODE_SET, CREATE_NODE_SET_SHUFFLE);
       copyPropertiesWithPrefix(req.getParams(), params, COLL_PROP_PREFIX);
       return params;
     }),
diff --git a/solr/core/src/test/org/apache/solr/HelloWorldSolrCloudTestCase.java b/solr/core/src/test/org/apache/solr/HelloWorldSolrCloudTestCase.java
index 56a813c..820640b 100644
--- a/solr/core/src/test/org/apache/solr/HelloWorldSolrCloudTestCase.java
+++ b/solr/core/src/test/org/apache/solr/HelloWorldSolrCloudTestCase.java
@@ -41,8 +41,7 @@ public class HelloWorldSolrCloudTestCase extends SolrCloudTestCase {
 
   private static final int numShards = 3;
   private static final int numReplicas = 2;
-  private static final int maxShardsPerNode = 2;
-  private static final int nodeCount = (numShards*numReplicas + (maxShardsPerNode-1))/maxShardsPerNode;
+  private static final int nodeCount = numShards*numReplicas;
 
   private static final String id = "id";
 
@@ -56,7 +55,6 @@ public class HelloWorldSolrCloudTestCase extends SolrCloudTestCase {
 
     // create an empty collection
     CollectionAdminRequest.createCollection(COLLECTION, "conf", numShards, numReplicas)
-        .setMaxShardsPerNode(maxShardsPerNode)
         .process(cluster.getSolrClient());
 
     // add a document
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 3bfda38..982c371 100644
--- a/solr/core/src/test/org/apache/solr/cloud/AddReplicaTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/AddReplicaTest.java
@@ -62,7 +62,6 @@ public class AddReplicaTest extends SolrCloudTestCase {
     CloudSolrClient cloudClient = cluster.getSolrClient();
 
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collection, "conf1", 1, 1);
-    create.setMaxShardsPerNode(2);
     cloudClient.request(create);
     cluster.waitForActiveCollection(collection, 1, 1);
 
@@ -130,7 +129,6 @@ public class AddReplicaTest extends SolrCloudTestCase {
     CloudSolrClient cloudClient = cluster.getSolrClient();
 
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collection, "conf1", 2, 1);
-    create.setMaxShardsPerNode(2);
     cloudClient.request(create);
     
     cluster.waitForActiveCollection(collection, 2, 2);
diff --git a/solr/core/src/test/org/apache/solr/cloud/AssignBackwardCompatibilityTest.java b/solr/core/src/test/org/apache/solr/cloud/AssignBackwardCompatibilityTest.java
index c1ba972..8baa360 100644
--- a/solr/core/src/test/org/apache/solr/cloud/AssignBackwardCompatibilityTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/AssignBackwardCompatibilityTest.java
@@ -51,7 +51,6 @@ public class AssignBackwardCompatibilityTest extends SolrCloudTestCase {
         .addConfig("conf1", TEST_PATH().resolve("configsets").resolve("cloud-dynamic").resolve("conf"))
         .configure();
     CollectionAdminRequest.createCollection(COLLECTION, 1, 4)
-        .setMaxShardsPerNode(1000)
         .process(cluster.getSolrClient());
     cluster.waitForActiveCollection(COLLECTION, 1, 4);
   }
diff --git a/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZkTest.java b/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZkTest.java
index 413e55a..9ba34e3 100644
--- a/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZkTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZkTest.java
@@ -776,14 +776,13 @@ public class BasicDistributedZkTest extends AbstractFullDistribZkTestBase {
 
   @Override
   protected CollectionAdminResponse createCollection(Map<String, List<Integer>> collectionInfos,
-                                                     String collectionName, String configSetName, int numShards, int numReplicas, int maxShardsPerNode, SolrClient client, String createNodeSetStr) throws SolrServerException, IOException {
+                                                     String collectionName, String configSetName, int numShards, int numReplicas, SolrClient client, String createNodeSetStr) throws SolrServerException, IOException {
     // TODO: Use CollectionAdminRequest for this test
     ModifiableSolrParams params = new ModifiableSolrParams();
     params.set("action", CollectionAction.CREATE.toString());
 
     params.set(OverseerCollectionMessageHandler.NUM_SLICES, numShards);
     params.set(ZkStateReader.REPLICATION_FACTOR, numReplicas);
-    params.set(ZkStateReader.MAX_SHARDS_PER_NODE, maxShardsPerNode);
     if (createNodeSetStr != null) params.set(OverseerCollectionMessageHandler.CREATE_NODE_SET, createNodeSetStr);
 
     int clientIndex = clients.size() > 1 ? random().nextInt(2) : 0;
@@ -954,7 +953,6 @@ public class BasicDistributedZkTest extends AbstractFullDistribZkTestBase {
     log.info("### STARTING testANewCollectionInOneInstanceWithManualShardAssignement");
     assertEquals(0, CollectionAdminRequest.createCollection(oneInstanceCollection2, "conf1", 2, 2)
         .setCreateNodeSet("")
-        .setMaxShardsPerNode(4)
         .process(cloudClient).getStatus());
 
     List<SolrClient> collectionClients = new ArrayList<>();
@@ -1102,7 +1100,6 @@ public class BasicDistributedZkTest extends AbstractFullDistribZkTestBase {
     log.info("### STARTING testANewCollectionInOneInstance");
     CollectionAdminResponse response = CollectionAdminRequest.createCollection(oneInstanceCollection, "conf1", 2, 2)
         .setCreateNodeSet(jettys.get(0).getNodeName())
-        .setMaxShardsPerNode(4)
         .process(cloudClient);
     assertEquals(0, response.getStatus());
     List<SolrClient> collectionClients = new ArrayList<>();
diff --git a/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java b/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java
index 3b7a67d..3ba5b1e 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java
@@ -288,7 +288,7 @@ public class ChaosMonkeyNothingIsSafeTest extends AbstractFullDistribZkTestBase
 
       try (CloudSolrClient client = createCloudClient("collection1", 30000)) {
           createCollection(null, "testcollection",
-              1, 1, 1, client, null, "conf1");
+              1, 1, client, null, "conf1");
 
       }
       List<Integer> numShardsNumReplicas = new ArrayList<>(2);
diff --git a/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeWithPullReplicasTest.java b/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeWithPullReplicasTest.java
index 6fc6642..59047b3 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeWithPullReplicasTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeWithPullReplicasTest.java
@@ -306,9 +306,8 @@ public class ChaosMonkeyNothingIsSafeWithPullReplicasTest extends AbstractFullDi
       }
 
       try (CloudSolrClient client = createCloudClient("collection1", 30000)) {
-        // We don't really know how many live nodes we have at this point, so "maxShardsPerNode" needs to be > 1
         createCollection(null, "testcollection",
-              1, 1, 10, client, null, "conf1"); 
+              1, 1, client, null, "conf1");
       }
       List<Integer> numShardsNumReplicas = new ArrayList<>(2);
       numShardsNumReplicas.add(1);
diff --git a/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderTest.java b/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderTest.java
index 10380c3..af9fdbe 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderTest.java
@@ -176,7 +176,7 @@ public class ChaosMonkeySafeLeaderTest extends AbstractFullDistribZkTestBase {
     }
 
     try (CloudSolrClient client = createCloudClient("collection1")) {
-        createCollection(null, "testcollection", 1, 1, 1, client, null, "conf1");
+        createCollection(null, "testcollection", 1, 1, client, null, "conf1");
 
     }
     List<Integer> numShardsNumReplicas = new ArrayList<>(2);
diff --git a/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderWithPullReplicasTest.java b/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderWithPullReplicasTest.java
index 8f9abff..b61de93 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderWithPullReplicasTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderWithPullReplicasTest.java
@@ -223,7 +223,7 @@ public class ChaosMonkeySafeLeaderWithPullReplicasTest extends AbstractFullDistr
     }
 
     try (CloudSolrClient client = createCloudClient("collection1")) {
-        createCollection(null, "testcollection", 1, 1, 100, client, null, "conf1");
+        createCollection(null, "testcollection", 1, 1, client, null, "conf1");
 
     }
     List<Integer> numShardsNumReplicas = new ArrayList<>(2);
diff --git a/solr/core/src/test/org/apache/solr/cloud/ClusterStateMockUtil.java b/solr/core/src/test/org/apache/solr/cloud/ClusterStateMockUtil.java
index f41d80a..5fccab2 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ClusterStateMockUtil.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ClusterStateMockUtil.java
@@ -35,7 +35,7 @@ import org.apache.solr.common.util.Utils;
 
 /**
  * A utility class that can create mock ZkStateReader objects with custom ClusterState objects created
- * using a simple string based description. See {@link #buildClusterState(String, int, int, String...)} for
+ * using a simple string based description. See {@link #buildClusterState(String, int, String...)} for
  * details on how the cluster state can be created.
  *
  * @lucene.experimental
@@ -48,10 +48,6 @@ public class ClusterStateMockUtil {
     return buildClusterState(clusterDescription, 1, liveNodes);
   }
 
-  public static ZkStateReader buildClusterState(String clusterDescription, int replicationFactor, String ... liveNodes) {
-    return buildClusterState(clusterDescription, replicationFactor, 10, liveNodes);
-  }
-
   /**
    * This method lets you construct a complex ClusterState object by using simple strings of letters.
    *
@@ -112,11 +108,10 @@ public class ClusterStateMockUtil {
    *
    */
   @SuppressWarnings("resource")
-  public static ZkStateReader buildClusterState(String clusterDescription, int replicationFactor, int maxShardsPerNode, String ... liveNodes) {
+  public static ZkStateReader buildClusterState(String clusterDescription, int replicationFactor, String ... liveNodes) {
     Map<String,Slice> slices = null;
     Map<String,Replica> replicas = null;
     Map<String,Object> collectionProps = new HashMap<>();
-    collectionProps.put(ZkStateReader.MAX_SHARDS_PER_NODE, Integer.toString(maxShardsPerNode));
     collectionProps.put(ZkStateReader.REPLICATION_FACTOR, Integer.toString(replicationFactor));
     Map<String,DocCollection> collectionStates = new HashMap<>();
     DocCollection docCollection = null;
diff --git a/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java b/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java
index 4db1152..c4f9bdd 100644
--- a/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java
@@ -371,7 +371,6 @@ public class CollectionsAPISolrJTest extends SolrCloudTestCase {
     String collectionName = "solrj_implicit";
     CollectionAdminResponse response
         = CollectionAdminRequest.createCollectionWithImplicitRouter(collectionName, "conf", "shardA,shardB", 1, 1, 1)
-        .setMaxShardsPerNode(3)
         .process(cluster.getSolrClient());
 
     assertEquals(0, response.getStatus());
diff --git a/solr/core/src/test/org/apache/solr/cloud/CreateRoutedAliasTest.java b/solr/core/src/test/org/apache/solr/cloud/CreateRoutedAliasTest.java
index 9833e90..58757de 100644
--- a/solr/core/src/test/org/apache/solr/cloud/CreateRoutedAliasTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/CreateRoutedAliasTest.java
@@ -120,7 +120,6 @@ public class CreateRoutedAliasTest extends SolrCloudTestCase {
         "      \"config\":\"_default\",\n" +
         "      \"tlogReplicas\":1,\n" +
         "      \"pullReplicas\":1,\n" +
-        "      \"maxShardsPerNode\":4,\n" + // note: we also expect the 'policy' to work fine
         "      \"nodeSet\": '" + createNode + "',\n" +
         "      \"properties\" : {\n" +
         "        \"foobar\":\"bazbam\",\n" +
@@ -152,7 +151,6 @@ public class CreateRoutedAliasTest extends SolrCloudTestCase {
     //assertEquals(1, coll.getNumNrtReplicas().intValue()); // TODO seems to be erroneous; I figured 'null'
     assertEquals(1, coll.getNumTlogReplicas().intValue()); // per-shard
     assertEquals(1, coll.getNumPullReplicas().intValue()); // per-shard
-    assertEquals(4, coll.getMaxShardsPerNode());
     //TODO SOLR-11877 assertEquals(2, coll.getStateFormat());
     assertTrue("nodeSet didn't work?",
         coll.getSlices().stream().flatMap(s -> s.getReplicas().stream())
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 33a1a55..175c6b0 100644
--- a/solr/core/src/test/org/apache/solr/cloud/DeleteInactiveReplicaTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/DeleteInactiveReplicaTest.java
@@ -56,10 +56,8 @@ public class DeleteInactiveReplicaTest extends SolrCloudTestCase {
     String collectionName = "delDeadColl";
     int replicationFactor = 2;
     int numShards = 2;
-    int maxShardsPerNode = ((((numShards + 1) * replicationFactor) / cluster.getJettySolrRunners().size())) + 1;
 
     CollectionAdminRequest.createCollection(collectionName, "conf", numShards, replicationFactor)
-        .setMaxShardsPerNode(maxShardsPerNode)
         .process(cluster.getSolrClient());
     waitForState("Expected a cluster of 2 shards and 2 replicas", collectionName, (n, c) -> {
       return DocCollection.isFullyActive(n, c, numShards, replicationFactor);
diff --git a/solr/core/src/test/org/apache/solr/cloud/DeleteLastCustomShardedReplicaTest.java b/solr/core/src/test/org/apache/solr/cloud/DeleteLastCustomShardedReplicaTest.java
index c46362e..13d40e1 100644
--- a/solr/core/src/test/org/apache/solr/cloud/DeleteLastCustomShardedReplicaTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/DeleteLastCustomShardedReplicaTest.java
@@ -37,7 +37,6 @@ public class DeleteLastCustomShardedReplicaTest extends SolrCloudTestCase {
     final String collectionName = "customcollreplicadeletion";
 
     CollectionAdminRequest.createCollectionWithImplicitRouter(collectionName, "conf", "a,b", 1)
-        .setMaxShardsPerNode(5)
         .process(cluster.getSolrClient());
 
     DocCollection collectionState = getCollectionState(collectionName);
diff --git a/solr/core/src/test/org/apache/solr/cloud/DeleteNodeTest.java b/solr/core/src/test/org/apache/solr/cloud/DeleteNodeTest.java
index a6ff54b..1b54ee6 100644
--- a/solr/core/src/test/org/apache/solr/cloud/DeleteNodeTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/DeleteNodeTest.java
@@ -68,7 +68,7 @@ public class DeleteNodeTest extends SolrCloudTestCase {
         CollectionAdminRequest.createCollection(coll, "conf1", 5, 1, 0, 0),
         CollectionAdminRequest.createCollection(coll, "conf1", 5, 0, 1, 0)
         );
-    create.setCreateNodeSet(StrUtils.join(l, ',')).setMaxShardsPerNode(3);
+    create.setCreateNodeSet(StrUtils.join(l, ','));
     cloudClient.request(create);
     state = cloudClient.getZkStateReader().getClusterState();
     String node2bdecommissioned = l.get(0);
diff --git a/solr/core/src/test/org/apache/solr/cloud/DeleteShardTest.java b/solr/core/src/test/org/apache/solr/cloud/DeleteShardTest.java
index 6f384fb..9f3f9a4 100644
--- a/solr/core/src/test/org/apache/solr/cloud/DeleteShardTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/DeleteShardTest.java
@@ -114,7 +114,6 @@ public class DeleteShardTest extends SolrCloudTestCase {
 
     final String collection = "deleteshard_test";
     CollectionAdminRequest.createCollectionWithImplicitRouter(collection, "conf", "a,b,c", 1)
-        .setMaxShardsPerNode(2)
         .process(cluster.getSolrClient());
     
     cluster.waitForActiveCollection(collection, 3, 3);
diff --git a/solr/core/src/test/org/apache/solr/cloud/DocValuesNotIndexedTest.java b/solr/core/src/test/org/apache/solr/cloud/DocValuesNotIndexedTest.java
index 5fa604e..45ccbc9 100644
--- a/solr/core/src/test/org/apache/solr/cloud/DocValuesNotIndexedTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/DocValuesNotIndexedTest.java
@@ -86,7 +86,6 @@ public class DocValuesNotIndexedTest extends SolrCloudTestCase {
 
     // Need enough shards that we have some shards that don't have any docs on them.
     CollectionAdminRequest.createCollection(COLLECTION, "conf1", 4, 1)
-        .setMaxShardsPerNode(2)
         .process(cluster.getSolrClient());
     
     cluster.waitForActiveCollection(COLLECTION, 4, 4);
diff --git a/solr/core/src/test/org/apache/solr/cloud/ForceLeaderTest.java b/solr/core/src/test/org/apache/solr/cloud/ForceLeaderTest.java
index 7509e62..9a928ba 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ForceLeaderTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ForceLeaderTest.java
@@ -75,7 +75,7 @@ public class ForceLeaderTest extends HttpPartitionTest {
 
 
     String testCollectionName = "forceleader_lower_terms_collection";
-    createCollection(testCollectionName, "conf1", 1, 3, 1);
+    createCollection(testCollectionName, "conf1", 1, 3);
     
 
     try {
diff --git a/solr/core/src/test/org/apache/solr/cloud/HttpPartitionOnCommitTest.java b/solr/core/src/test/org/apache/solr/cloud/HttpPartitionOnCommitTest.java
index 8df6175..33faa5b 100644
--- a/solr/core/src/test/org/apache/solr/cloud/HttpPartitionOnCommitTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/HttpPartitionOnCommitTest.java
@@ -73,7 +73,7 @@ public class HttpPartitionOnCommitTest extends BasicDistributedZkTest {
 
     // create a collection that has 2 shard and 2 replicas
     String testCollectionName = "c8n_2x2_commits";
-    createCollection(testCollectionName, "conf1", 2, 2, 1);
+    createCollection(testCollectionName, "conf1", 2, 2);
     cloudClient.setDefaultCollection(testCollectionName);
 
     List<Replica> notLeaders =
@@ -116,7 +116,7 @@ public class HttpPartitionOnCommitTest extends BasicDistributedZkTest {
 
     // create a collection that has 1 shard and 3 replicas
     String testCollectionName = "c8n_1x3_commits";
-    createCollection(testCollectionName, "conf1", 1, 3, 1);
+    createCollection(testCollectionName, "conf1", 1, 3);
     cloudClient.setDefaultCollection(testCollectionName);
 
     List<Replica> notLeaders =
diff --git a/solr/core/src/test/org/apache/solr/cloud/HttpPartitionTest.java b/solr/core/src/test/org/apache/solr/cloud/HttpPartitionTest.java
index 96c10e4..bcdf3f3 100644
--- a/solr/core/src/test/org/apache/solr/cloud/HttpPartitionTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/HttpPartitionTest.java
@@ -159,7 +159,7 @@ public class HttpPartitionTest extends AbstractFullDistribZkTestBase {
 
       TestInjection.prepRecoveryOpPauseForever = "true:100";
       
-      createCollection(testCollectionName, "conf1", 1, 2, 1);
+      createCollection(testCollectionName, "conf1", 1, 2);
       cloudClient.setDefaultCollection(testCollectionName);
 
       sendDoc(1, 2);
@@ -211,7 +211,7 @@ public class HttpPartitionTest extends AbstractFullDistribZkTestBase {
   protected void testRf2() throws Exception {
     // create a collection that has 1 shard but 2 replicas
     String testCollectionName = "c8n_1x2";
-    createCollectionRetry(testCollectionName, "conf1", 1, 2, 1);
+    createCollectionRetry(testCollectionName, "conf1", 1, 2);
     cloudClient.setDefaultCollection(testCollectionName);
     
     sendDoc(1);
@@ -330,7 +330,7 @@ public class HttpPartitionTest extends AbstractFullDistribZkTestBase {
   protected void testRf3() throws Exception {
     // create a collection that has 1 shard but 2 replicas
     String testCollectionName = "c8n_1x3";
-    createCollectionRetry(testCollectionName, "conf1", 1, 3, 1);
+    createCollectionRetry(testCollectionName, "conf1", 1, 3);
     
     cloudClient.setDefaultCollection(testCollectionName);
     
@@ -384,7 +384,7 @@ public class HttpPartitionTest extends AbstractFullDistribZkTestBase {
   protected void testLeaderZkSessionLoss() throws Exception {
 
     String testCollectionName = "c8n_1x2_leader_session_loss";
-    createCollectionRetry(testCollectionName, "conf1", 1, 2, 1);
+    createCollectionRetry(testCollectionName, "conf1", 1, 2);
     cloudClient.setDefaultCollection(testCollectionName);
 
     sendDoc(1);
diff --git a/solr/core/src/test/org/apache/solr/cloud/LeaderElectionContextKeyTest.java b/solr/core/src/test/org/apache/solr/cloud/LeaderElectionContextKeyTest.java
index 6b2ca95..ee74f68 100644
--- a/solr/core/src/test/org/apache/solr/cloud/LeaderElectionContextKeyTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/LeaderElectionContextKeyTest.java
@@ -52,7 +52,6 @@ public class LeaderElectionContextKeyTest extends SolrCloudTestCase {
       // therefore Assign.buildCoreNodeName will create same coreNodeName
       CollectionAdminRequest
           .createCollection("testCollection"+i, "config", 2, 1)
-          .setMaxShardsPerNode(100)
           .setCreateNodeSet("")
           .process(cluster.getSolrClient());
       CollectionAdminRequest
diff --git a/solr/core/src/test/org/apache/solr/cloud/LeaderElectionIntegrationTest.java b/solr/core/src/test/org/apache/solr/cloud/LeaderElectionIntegrationTest.java
index c20a450..a5964d4 100644
--- a/solr/core/src/test/org/apache/solr/cloud/LeaderElectionIntegrationTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/LeaderElectionIntegrationTest.java
@@ -51,7 +51,7 @@ public class LeaderElectionIntegrationTest extends SolrCloudTestCase {
   private void createCollection(String collection) throws IOException, SolrServerException {
     assertEquals(0, CollectionAdminRequest.createCollection(collection,
         "conf", 2, 1)
-        .setMaxShardsPerNode(1).process(cluster.getSolrClient()).getStatus());
+        .process(cluster.getSolrClient()).getStatus());
     for (int i = 1; i < NUM_REPLICAS_OF_SHARD1; i++) {
       assertTrue(
           CollectionAdminRequest.addReplicaToShard(collection, "shard1").process(cluster.getSolrClient()).isSuccess()
diff --git a/solr/core/src/test/org/apache/solr/cloud/LeaderFailoverAfterPartitionTest.java b/solr/core/src/test/org/apache/solr/cloud/LeaderFailoverAfterPartitionTest.java
index bde632f..82ebda5 100644
--- a/solr/core/src/test/org/apache/solr/cloud/LeaderFailoverAfterPartitionTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/LeaderFailoverAfterPartitionTest.java
@@ -63,7 +63,7 @@ public class LeaderFailoverAfterPartitionTest extends HttpPartitionTest {
     // kill the leader ... see what happens
     // create a collection that has 1 shard but 3 replicas
     String testCollectionName = "c8n_1x3_lf"; // _lf is leader fails
-    createCollection(testCollectionName, "conf1", 1, 3, 1);
+    createCollection(testCollectionName, "conf1", 1, 3);
     cloudClient.setDefaultCollection(testCollectionName);
     
     sendDoc(1);
diff --git a/solr/core/src/test/org/apache/solr/cloud/LegacyCloudClusterPropTest.java b/solr/core/src/test/org/apache/solr/cloud/LegacyCloudClusterPropTest.java
index f697204..a305c3a 100644
--- a/solr/core/src/test/org/apache/solr/cloud/LegacyCloudClusterPropTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/LegacyCloudClusterPropTest.java
@@ -90,7 +90,6 @@ public class LegacyCloudClusterPropTest extends SolrCloudTestCase {
         props.getClusterProperty(ZkStateReader.LEGACY_CLOUD, legacyAnti));
 
     CollectionAdminRequest.createCollection(coll, "conf", 1, 1)
-        .setMaxShardsPerNode(1)
         .process(cluster.getSolrClient());
     
     cluster.waitForActiveCollection(coll, 1, 1);
diff --git a/solr/core/src/test/org/apache/solr/cloud/MissingSegmentRecoveryTest.java b/solr/core/src/test/org/apache/solr/cloud/MissingSegmentRecoveryTest.java
index 13b5df0..4584ca2 100644
--- a/solr/core/src/test/org/apache/solr/cloud/MissingSegmentRecoveryTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/MissingSegmentRecoveryTest.java
@@ -57,7 +57,6 @@ public class MissingSegmentRecoveryTest extends SolrCloudTestCase {
   @Before
   public void setup() throws SolrServerException, IOException {
     CollectionAdminRequest.createCollection(collection, "conf", 1, 2)
-        .setMaxShardsPerNode(1)
         .process(cluster.getSolrClient());
     waitForState("Expected a collection with one shard and two replicas", collection, clusterShape(1, 2));
     cluster.getSolrClient().setDefaultCollection(collection);
diff --git a/solr/core/src/test/org/apache/solr/cloud/MoveReplicaTest.java b/solr/core/src/test/org/apache/solr/cloud/MoveReplicaTest.java
index 025460c..3e7986f 100644
--- a/solr/core/src/test/org/apache/solr/cloud/MoveReplicaTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/MoveReplicaTest.java
@@ -103,7 +103,6 @@ public class MoveReplicaTest extends SolrCloudTestCase {
     // random create tlog or pull type replicas with nrt
     boolean isTlog = random().nextBoolean();
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(coll, "conf1", 2, 1, isTlog ? 1 : 0, !isTlog ? 1 : 0);
-    create.setMaxShardsPerNode(2);
     create.setAutoAddReplicas(false);
     cloudClient.request(create);
 
diff --git a/solr/core/src/test/org/apache/solr/cloud/MultiSolrCloudTestCaseTest.java b/solr/core/src/test/org/apache/solr/cloud/MultiSolrCloudTestCaseTest.java
index 2e382f8..21cf5631 100644
--- a/solr/core/src/test/org/apache/solr/cloud/MultiSolrCloudTestCaseTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/MultiSolrCloudTestCaseTest.java
@@ -47,8 +47,7 @@ public class MultiSolrCloudTestCaseTest extends MultiSolrCloudTestCase {
 
     numShards = 1+random().nextInt(2);
     numReplicas = 1+random().nextInt(2);
-    maxShardsPerNode = 1+random().nextInt(2);
-    nodesPerCluster = (numShards*numReplicas + (maxShardsPerNode-1))/maxShardsPerNode;
+    nodesPerCluster = numShards*numReplicas;
 
     doSetupClusters(
         clusterIds,
@@ -58,7 +57,7 @@ public class MultiSolrCloudTestCaseTest extends MultiSolrCloudTestCase {
             return nodesPerCluster;
           }
         },
-        new DefaultClusterInitFunction(numShards, numReplicas, maxShardsPerNode) {
+        new DefaultClusterInitFunction(numShards, numReplicas) {
           @Override
           public void accept(String clusterId, MiniSolrCloudCluster cluster) {
             for (final String collection : collections) {
diff --git a/solr/core/src/test/org/apache/solr/cloud/NodeMutatorTest.java b/solr/core/src/test/org/apache/solr/cloud/NodeMutatorTest.java
index a446f29..3e8ef42 100644
--- a/solr/core/src/test/org/apache/solr/cloud/NodeMutatorTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/NodeMutatorTest.java
@@ -46,7 +46,7 @@ public class NodeMutatorTest extends SolrTestCaseJ4Test {
     //We use 2 nodes with maxShardsPerNode as 1
     //Collection1: 2 shards X 1 replica = replica1 on node1 and replica2 on node2
     //Collection2: 1 shard X 1 replica = replica1 on node2
-    ZkStateReader reader = ClusterStateMockUtil.buildClusterState("csrr2rDcsr2", 1, 1, NODE1, NODE2);
+    ZkStateReader reader = ClusterStateMockUtil.buildClusterState("csrr2rDcsr2", 1, NODE1, NODE2);
     ClusterState clusterState = reader.getClusterState();
     assertEquals(clusterState.getCollection("collection1").getReplica("replica1").getBaseUrl(), NODE1_URL);
     assertEquals(clusterState.getCollection("collection1").getReplica("replica2").getBaseUrl(), NODE2_URL);
@@ -64,7 +64,7 @@ public class NodeMutatorTest extends SolrTestCaseJ4Test {
     //Collection1: 2 shards X 1 replica = replica1 on node1 and replica2 on node2
     //Collection2: 1 shard X 1 replica = replica1 on node2
     //Collection3: 1 shard X 3 replica = replica1 on node1 , replica2 on node2, replica3 on node3
-    reader = ClusterStateMockUtil.buildClusterState("csrr2rDcsr2csr1r2r3", 1, 1, NODE1, NODE2, NODE3);
+    reader = ClusterStateMockUtil.buildClusterState("csrr2rDcsr2csr1r2r3", 1, NODE1, NODE2, NODE3);
     clusterState = reader.getClusterState();
     assertEquals(clusterState.getCollection("collection1").getReplica("replica1").getBaseUrl(), NODE1_URL);
     assertEquals(clusterState.getCollection("collection1").getReplica("replica2").getBaseUrl(), NODE2_URL);
diff --git a/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionConfigSetProcessorTest.java b/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionConfigSetProcessorTest.java
index 6660015..830582f 100644
--- a/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionConfigSetProcessorTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionConfigSetProcessorTest.java
@@ -543,14 +543,13 @@ public class OverseerCollectionConfigSetProcessorTest extends SolrTestCaseJ4 {
   }
 
   protected void issueCreateJob(Integer numberOfSlices,
-      Integer replicationFactor, Integer maxShardsPerNode, List<String> createNodeList, boolean sendCreateNodeList, boolean createNodeSetShuffle) {
+      Integer replicationFactor, List<String> createNodeList, boolean sendCreateNodeList, boolean createNodeSetShuffle) {
     Map<String,Object> propMap = Utils.makeMap(
         Overseer.QUEUE_OPERATION, CollectionParams.CollectionAction.CREATE.toLower(),
         ZkStateReader.REPLICATION_FACTOR, replicationFactor.toString(),
         "name", COLLECTION_NAME,
         "collection.configName", CONFIG_NAME,
-        OverseerCollectionMessageHandler.NUM_SLICES, numberOfSlices.toString(),
-        ZkStateReader.MAX_SHARDS_PER_NODE, maxShardsPerNode.toString()
+        OverseerCollectionMessageHandler.NUM_SLICES, numberOfSlices.toString()
     );
     if (sendCreateNodeList) {
       propMap.put(OverseerCollectionMessageHandler.CREATE_NODE_SET,
@@ -724,7 +723,7 @@ public class OverseerCollectionConfigSetProcessorTest extends SolrTestCaseJ4 {
     SEND_NULL
   }
   protected void testTemplate(Integer numberOfNodes, Integer numberOfNodesToCreateOn, CreateNodeListOptions createNodeListOption, Integer replicationFactor,
-      Integer numberOfSlices, Integer maxShardsPerNode,
+      Integer numberOfSlices,
       boolean collectionExceptedToBeCreated) throws Exception {
     assertTrue("Wrong usage of testTemplate. numberOfNodesToCreateOn " + numberOfNodesToCreateOn + " is not allowed to be higher than numberOfNodes " + numberOfNodes, numberOfNodes.intValue() >= numberOfNodesToCreateOn.intValue());
     assertTrue("Wrong usage of testTemplage. createNodeListOption has to be " + CreateNodeListOptions.SEND + " when numberOfNodes and numberOfNodesToCreateOn are unequal", ((createNodeListOption == CreateNodeListOptions.SEND) || (numberOfNodes.intValue() == numberOfNodesToCreateOn.intValue())));
@@ -752,7 +751,7 @@ public class OverseerCollectionConfigSetProcessorTest extends SolrTestCaseJ4 {
     final List<String> createNodeListToSend = ((createNodeListOption != CreateNodeListOptions.SEND_NULL) ? createNodeList : null);
     final boolean sendCreateNodeList = (createNodeListOption != CreateNodeListOptions.DONT_SEND);
     final boolean dontShuffleCreateNodeSet = (createNodeListToSend != null) && sendCreateNodeList && random().nextBoolean();
-    issueCreateJob(numberOfSlices, replicationFactor, maxShardsPerNode, createNodeListToSend, sendCreateNodeList, !dontShuffleCreateNodeSet);
+    issueCreateJob(numberOfSlices, replicationFactor, createNodeListToSend, sendCreateNodeList, !dontShuffleCreateNodeSet);
     waitForEmptyQueue(10000);
 
     if (collectionExceptedToBeCreated) {
@@ -771,9 +770,8 @@ public class OverseerCollectionConfigSetProcessorTest extends SolrTestCaseJ4 {
     CreateNodeListOptions createNodeListOptions = CreateNodeListOptions.DONT_SEND;
     Integer replicationFactor = 1;
     Integer numberOfSlices = 8;
-    Integer maxShardsPerNode = 2;
     testTemplate(numberOfNodes, numberOfNodesToCreateOn, createNodeListOptions, replicationFactor, numberOfSlices,
-        maxShardsPerNode, true);
+        true);
   }
   
   @Test
@@ -785,7 +783,7 @@ public class OverseerCollectionConfigSetProcessorTest extends SolrTestCaseJ4 {
     Integer numberOfSlices = 4;
     Integer maxShardsPerNode = 2;
     testTemplate(numberOfNodes, numberOfNodesToCreateOn, createNodeListOptions, replicationFactor, numberOfSlices,
-        maxShardsPerNode, true);
+        true);
   }
   
   @Test
@@ -795,9 +793,8 @@ public class OverseerCollectionConfigSetProcessorTest extends SolrTestCaseJ4 {
     CreateNodeListOptions createNodeListOptions = CreateNodeListOptions.SEND;
     Integer replicationFactor = 1;
     Integer numberOfSlices = 8;
-    Integer maxShardsPerNode = 2;
     testTemplate(numberOfNodes, numberOfNodesToCreateOn, createNodeListOptions, replicationFactor, numberOfSlices,
-        maxShardsPerNode, true);
+        true);
   }
   
   @Test
@@ -807,9 +804,8 @@ public class OverseerCollectionConfigSetProcessorTest extends SolrTestCaseJ4 {
     CreateNodeListOptions createNodeListOptions = CreateNodeListOptions.SEND;
     Integer replicationFactor = 2;
     Integer numberOfSlices = 4;
-    Integer maxShardsPerNode = 2;
     testTemplate(numberOfNodes, numberOfNodesToCreateOn, createNodeListOptions, replicationFactor, numberOfSlices,
-        maxShardsPerNode, true);
+        true);
   }
   
   @Test
@@ -819,9 +815,8 @@ public class OverseerCollectionConfigSetProcessorTest extends SolrTestCaseJ4 {
     CreateNodeListOptions createNodeListOptions = CreateNodeListOptions.SEND_NULL;
     Integer replicationFactor = 1;
     Integer numberOfSlices = 8;
-    Integer maxShardsPerNode = 2;
     testTemplate(numberOfNodes, numberOfNodesToCreateOn, createNodeListOptions, replicationFactor, numberOfSlices,
-        maxShardsPerNode, true);
+        true);
   }
   
   @Test
@@ -831,9 +826,8 @@ public class OverseerCollectionConfigSetProcessorTest extends SolrTestCaseJ4 {
     CreateNodeListOptions createNodeListOptions = CreateNodeListOptions.SEND_NULL;
     Integer replicationFactor = 2;
     Integer numberOfSlices = 4;
-    Integer maxShardsPerNode = 2;
     testTemplate(numberOfNodes, numberOfNodesToCreateOn, createNodeListOptions, replicationFactor, numberOfSlices,
-        maxShardsPerNode, true);
+        true);
   }  
   
   @Test
@@ -843,9 +837,8 @@ public class OverseerCollectionConfigSetProcessorTest extends SolrTestCaseJ4 {
     CreateNodeListOptions createNodeListOptions = CreateNodeListOptions.DONT_SEND;
     Integer replicationFactor = 1;
     Integer numberOfSlices = 6;
-    Integer maxShardsPerNode = 2;
     testTemplate(numberOfNodes, numberOfNodesToCreateOn, createNodeListOptions, replicationFactor, numberOfSlices,
-        maxShardsPerNode, true);
+        true);
   }
   
   @Test
@@ -855,38 +848,11 @@ public class OverseerCollectionConfigSetProcessorTest extends SolrTestCaseJ4 {
     CreateNodeListOptions createNodeListOptions = CreateNodeListOptions.DONT_SEND;
     Integer replicationFactor = 2;
     Integer numberOfSlices = 3;
-    Integer maxShardsPerNode = 2;
     testTemplate(numberOfNodes, numberOfNodesToCreateOn, createNodeListOptions, replicationFactor, numberOfSlices,
-        maxShardsPerNode, true);
+        true);
   }
   
   @Test
-  public void testNoReplicationCollectionNotCreatedDueToMaxShardsPerNodeLimit()
-      throws Exception {
-    Integer numberOfNodes = 4;
-    Integer numberOfNodesToCreateOn = 4;
-    CreateNodeListOptions createNodeListOptions = CreateNodeListOptions.DONT_SEND;
-    Integer replicationFactor = 1;
-    Integer numberOfSlices = 6;
-    Integer maxShardsPerNode = 1;
-    testTemplate(numberOfNodes, numberOfNodesToCreateOn, createNodeListOptions, replicationFactor, numberOfSlices,
-        maxShardsPerNode, false);
-  }
-  
-  @Test
-  public void testReplicationCollectionNotCreatedDueToMaxShardsPerNodeLimit()
-      throws Exception {
-    Integer numberOfNodes = 4;
-    Integer numberOfNodesToCreateOn = 4;
-    CreateNodeListOptions createNodeListOptions = CreateNodeListOptions.DONT_SEND;
-    Integer replicationFactor = 2;
-    Integer numberOfSlices = 3;
-    Integer maxShardsPerNode = 1;
-    testTemplate(numberOfNodes, numberOfNodesToCreateOn, createNodeListOptions, replicationFactor, numberOfSlices,
-        maxShardsPerNode, false);
-  }
-
-  @Test
   public void testNoReplicationLimitedNodesToCreateOn()
       throws Exception {
     Integer numberOfNodes = 4;
@@ -894,9 +860,8 @@ public class OverseerCollectionConfigSetProcessorTest extends SolrTestCaseJ4 {
     CreateNodeListOptions createNodeListOptions = CreateNodeListOptions.SEND;
     Integer replicationFactor = 1;
     Integer numberOfSlices = 6;
-    Integer maxShardsPerNode = 3;
     testTemplate(numberOfNodes, numberOfNodesToCreateOn, createNodeListOptions, replicationFactor, numberOfSlices,
-        maxShardsPerNode, true);
+        true);
   }
   
   @Test
@@ -907,9 +872,8 @@ public class OverseerCollectionConfigSetProcessorTest extends SolrTestCaseJ4 {
     CreateNodeListOptions createNodeListOptions = CreateNodeListOptions.SEND;
     Integer replicationFactor = 2;
     Integer numberOfSlices = 3;
-    Integer maxShardsPerNode = 3;
     testTemplate(numberOfNodes, numberOfNodesToCreateOn, createNodeListOptions, replicationFactor, numberOfSlices,
-        maxShardsPerNode, true);
+        true);
   }
 
   @Test
@@ -920,9 +884,8 @@ public class OverseerCollectionConfigSetProcessorTest extends SolrTestCaseJ4 {
     CreateNodeListOptions createNodeListOptions = CreateNodeListOptions.SEND;
     Integer replicationFactor = 1;
     Integer numberOfSlices = 8;
-    Integer maxShardsPerNode = 2;
     testTemplate(numberOfNodes, numberOfNodesToCreateOn, createNodeListOptions, replicationFactor, numberOfSlices,
-        maxShardsPerNode, false);
+        false);
   }
   
   @Test
@@ -933,9 +896,8 @@ public class OverseerCollectionConfigSetProcessorTest extends SolrTestCaseJ4 {
     CreateNodeListOptions createNodeListOptions = CreateNodeListOptions.SEND;
     Integer replicationFactor = 2;
     Integer numberOfSlices = 4;
-    Integer maxShardsPerNode = 2;
     testTemplate(numberOfNodes, numberOfNodesToCreateOn, createNodeListOptions, replicationFactor, numberOfSlices,
-        maxShardsPerNode, false);
+        false);
   }
 
 }
diff --git a/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java b/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
index 226b5db..601dc97 100644
--- a/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
@@ -1100,8 +1100,7 @@ public class OverseerTest extends SolrTestCaseJ4 {
             "name", "perf" + i,
             ZkStateReader.NUM_SHARDS_PROP, "1",
             "stateFormat", String.valueOf(STATE_FORMAT),
-            ZkStateReader.REPLICATION_FACTOR, "1",
-            ZkStateReader.MAX_SHARDS_PER_NODE, "1"
+            ZkStateReader.REPLICATION_FACTOR, "1"
             );
         ZkDistributedQueue q = overseers.get(0).getStateUpdateQueue();
         q.offer(Utils.toJSON(m));
@@ -1477,12 +1476,10 @@ public class OverseerTest extends SolrTestCaseJ4 {
 
       // create collection
       {
-        final Integer maxShardsPerNode = numReplicas * numShards;
         ZkNodeProps m = new ZkNodeProps(Overseer.QUEUE_OPERATION, CollectionParams.CollectionAction.CREATE.toLower(),
             "name", COLLECTION,
             ZkStateReader.NUM_SHARDS_PROP, numShards.toString(),
-            ZkStateReader.REPLICATION_FACTOR, "1",
-            ZkStateReader.MAX_SHARDS_PER_NODE, maxShardsPerNode.toString()
+            ZkStateReader.REPLICATION_FACTOR, "1"
             );
         q.offer(Utils.toJSON(m));
       }
diff --git a/solr/core/src/test/org/apache/solr/cloud/RecoveryZkTest.java b/solr/core/src/test/org/apache/solr/cloud/RecoveryZkTest.java
index 5693330..a5f1e06 100644
--- a/solr/core/src/test/org/apache/solr/cloud/RecoveryZkTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/RecoveryZkTest.java
@@ -68,7 +68,6 @@ public class RecoveryZkTest extends SolrCloudTestCase {
     final String collection = "recoverytest";
 
     CollectionAdminRequest.createCollection(collection, "conf", 1, 2)
-        .setMaxShardsPerNode(1)
         .process(cluster.getSolrClient());
     waitForState("Expected a collection with one shard and two replicas", collection, clusterShape(1, 2));
     cluster.getSolrClient().setDefaultCollection(collection);
diff --git a/solr/core/src/test/org/apache/solr/cloud/ReindexCollectionTest.java b/solr/core/src/test/org/apache/solr/cloud/ReindexCollectionTest.java
index a2a6de8..0adb664 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ReindexCollectionTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ReindexCollectionTest.java
@@ -378,7 +378,6 @@ public class ReindexCollectionTest extends SolrCloudTestCase {
 
   private void createCollection(String name, String config, int numShards, int numReplicas) throws Exception {
     CollectionAdminRequest.createCollection(name, config, numShards, numReplicas)
-        .setMaxShardsPerNode(-1)
         .process(solrClient);
 
     cluster.waitForActiveCollection(name, numShards, numShards * numReplicas);
diff --git a/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java b/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java
index 0412330..7911b82 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java
@@ -83,7 +83,7 @@ public class ReplaceNodeTest extends SolrCloudTestCase {
                         CollectionAdminRequest.createCollection(coll, "conf1", 5, 1,0,0)
                         //CollectionAdminRequest.createCollection(coll, "conf1", 5, 0,1,0)
     );
-    create.setCreateNodeSet(StrUtils.join(l, ',')).setMaxShardsPerNode(3);
+    create.setCreateNodeSet(StrUtils.join(l, ','));
     cloudClient.request(create);
     
     cluster.waitForActiveCollection(coll, 5, 5 * (create.getNumNrtReplicas() + create.getNumPullReplicas() + create.getNumTlogReplicas()));
diff --git a/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java b/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java
index 3fc3580..4a52abc 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java
@@ -101,11 +101,10 @@ public class ReplicationFactorTest extends AbstractFullDistribZkTestBase {
   protected void testRf2NotUsingDirectUpdates() throws Exception {
     int numShards = 2;
     int replicationFactor = 2;
-    int maxShardsPerNode = 1;
     String testCollectionName = "repfacttest_c8n_2x2";
     String shardId = "shard1";
 
-    createCollectionWithRetry(testCollectionName, "conf1", numShards, replicationFactor, maxShardsPerNode);
+    createCollectionWithRetry(testCollectionName, "conf1", numShards, replicationFactor);
 
     cloudClient.setDefaultCollection(testCollectionName);
     
@@ -274,12 +273,11 @@ public class ReplicationFactorTest extends AbstractFullDistribZkTestBase {
   protected void testRf3() throws Exception {
     final int numShards = 1;
     final int replicationFactor = 3;
-    final int maxShardsPerNode = 1;
     final String testCollectionName = "repfacttest_c8n_1x3";
     final String shardId = "shard1";
     final int minRf = 2;
 
-    createCollectionWithRetry(testCollectionName, "conf1", numShards, replicationFactor, maxShardsPerNode);
+    createCollectionWithRetry(testCollectionName, "conf1", numShards, replicationFactor);
     cloudClient.setDefaultCollection(testCollectionName);
     
     List<Replica> replicas = 
@@ -501,15 +499,15 @@ public class ReplicationFactorTest extends AbstractFullDistribZkTestBase {
     }
   }
 
-  void createCollectionWithRetry(String testCollectionName, String config, int numShards, int replicationFactor, int maxShardsPerNode) throws IOException, SolrServerException, InterruptedException, TimeoutException {
-    CollectionAdminResponse resp = createCollection(testCollectionName, "conf1", numShards, replicationFactor, maxShardsPerNode);
+  void createCollectionWithRetry(String testCollectionName, String config, int numShards, int replicationFactor) throws IOException, SolrServerException, InterruptedException, TimeoutException {
+    CollectionAdminResponse resp = createCollection(testCollectionName, "conf1", numShards, replicationFactor);
 
     if (resp.getResponse().get("failure") != null) {
       Thread.sleep(5000); // let system settle down. This should be very rare.
 
       CollectionAdminRequest.deleteCollection(testCollectionName).process(cloudClient);
 
-      resp = createCollection(testCollectionName, "conf1", numShards, replicationFactor, maxShardsPerNode);
+      resp = createCollection(testCollectionName, "conf1", numShards, replicationFactor);
 
       if (resp.getResponse().get("failure") != null) {
         fail("Could not create " + testCollectionName);
diff --git a/solr/core/src/test/org/apache/solr/cloud/SharedFSAutoReplicaFailoverTest.java b/solr/core/src/test/org/apache/solr/cloud/SharedFSAutoReplicaFailoverTest.java
index 29ba036..5f60265 100644
--- a/solr/core/src/test/org/apache/solr/cloud/SharedFSAutoReplicaFailoverTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/SharedFSAutoReplicaFailoverTest.java
@@ -161,7 +161,6 @@ public class SharedFSAutoReplicaFailoverTest extends AbstractFullDistribZkTestBa
   private void testBasics() throws Exception {
     String collection1 = "solrj_collection";
     Create createCollectionRequest = CollectionAdminRequest.createCollection(collection1,"conf1",2,2)
-            .setMaxShardsPerNode(2)
             .setRouterField("myOwnField")
             .setAutoAddReplicas(true);
     CollectionAdminResponse response = createCollectionRequest.process(cloudClient);
@@ -172,7 +171,6 @@ public class SharedFSAutoReplicaFailoverTest extends AbstractFullDistribZkTestBa
     
     String collection2 = "solrj_collection2";
     createCollectionRequest = CollectionAdminRequest.createCollection(collection2,"conf1",2,2)
-            .setMaxShardsPerNode(2)
             .setRouterField("myOwnField")
             .setAutoAddReplicas(false);
     CollectionAdminResponse response2 = createCollectionRequest.process(getCommonCloudSolrClient());
@@ -184,7 +182,6 @@ public class SharedFSAutoReplicaFailoverTest extends AbstractFullDistribZkTestBa
     
     String collection3 = "solrj_collection3";
     createCollectionRequest = CollectionAdminRequest.createCollection(collection3,"conf1",5,1)
-            .setMaxShardsPerNode(1)
             .setRouterField("myOwnField")
             .setAutoAddReplicas(true);
     CollectionAdminResponse response3 = createCollectionRequest.process(getCommonCloudSolrClient());
@@ -197,7 +194,6 @@ public class SharedFSAutoReplicaFailoverTest extends AbstractFullDistribZkTestBa
     // a collection has only 1 replica per a shard
     String collection4 = "solrj_collection4";
     createCollectionRequest = CollectionAdminRequest.createCollection(collection4,"conf1",5,1)
-        .setMaxShardsPerNode(5)
         .setRouterField("text")
         .setAutoAddReplicas(true);
     CollectionAdminResponse response4 = createCollectionRequest.process(getCommonCloudSolrClient());
diff --git a/solr/core/src/test/org/apache/solr/cloud/SplitShardTest.java b/solr/core/src/test/org/apache/solr/cloud/SplitShardTest.java
index 9d780d3..fea1baf 100644
--- a/solr/core/src/test/org/apache/solr/cloud/SplitShardTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/SplitShardTest.java
@@ -76,7 +76,6 @@ public class SplitShardTest extends SolrCloudTestCase {
   public void doTest() throws IOException, SolrServerException {
     CollectionAdminRequest
         .createCollection(COLLECTION_NAME, "conf", 2, 1)
-        .setMaxShardsPerNode(100)
         .process(cluster.getSolrClient());
     
     cluster.waitForActiveCollection(COLLECTION_NAME, 2, 2);
@@ -127,7 +126,6 @@ public class SplitShardTest extends SolrCloudTestCase {
     String collectionName = "splitFuzzCollection";
     CollectionAdminRequest
         .createCollection(collectionName, "conf", 2, 1)
-        .setMaxShardsPerNode(100)
         .process(cluster.getSolrClient());
 
     cluster.waitForActiveCollection(collectionName, 2, 2);
@@ -156,7 +154,6 @@ public class SplitShardTest extends SolrCloudTestCase {
 
       CollectionAdminRequest
           .createCollection(collectionName, "conf", 1, repFactor)
-          .setMaxShardsPerNode(100)
           .process(cluster.getSolrClient());
 
     cluster.waitForActiveCollection(collectionName, 1, repFactor);
diff --git a/solr/core/src/test/org/apache/solr/cloud/SystemCollectionCompatTest.java b/solr/core/src/test/org/apache/solr/cloud/SystemCollectionCompatTest.java
index e78f3ea..df44c45 100644
--- a/solr/core/src/test/org/apache/solr/cloud/SystemCollectionCompatTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/SystemCollectionCompatTest.java
@@ -90,7 +90,6 @@ public class SystemCollectionCompatTest extends SolrCloudTestCase {
     // put .system replicas on other nodes that the overseer
     CollectionAdminRequest.createCollection(CollectionAdminParams.SYSTEM_COLL, null, 1, 2)
         .setCreateNodeSet(String.join(",", nodes))
-        .setMaxShardsPerNode(2)
         .process(cluster.getSolrClient());
     cluster.waitForActiveCollection(CollectionAdminParams.SYSTEM_COLL,  1, 2);
     // send a dummy doc to the .system collection
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java b/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java
index b2c1e25..4076d1f 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java
@@ -49,8 +49,7 @@ public class TestAuthenticationFramework extends SolrCloudTestCase {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
   private static final int numShards = 2;
   private static final int numReplicas = 2;
-  private static final int maxShardsPerNode = 2;
-  private static final int nodeCount = (numShards*numReplicas + (maxShardsPerNode-1))/maxShardsPerNode;
+  private static final int nodeCount = numShards*numReplicas;
   private static final String configName = "solrCloudCollectionConfig";
   private static final String collectionName = "testcollection";
 
@@ -99,13 +98,11 @@ public class TestAuthenticationFramework extends SolrCloudTestCase {
       throws Exception {
     if (random().nextBoolean()) {  // process asynchronously
       CollectionAdminRequest.createCollection(collectionName, configName, numShards, numReplicas)
-          .setMaxShardsPerNode(maxShardsPerNode)
           .processAndWait(cluster.getSolrClient(), 90);
       cluster.waitForActiveCollection(collectionName, numShards, numShards * numReplicas);
     }
     else {
       CollectionAdminRequest.createCollection(collectionName, configName, numShards, numReplicas)
-          .setMaxShardsPerNode(maxShardsPerNode)
           .process(cluster.getSolrClient());
       cluster.waitForActiveCollection(collectionName, numShards, numShards * numReplicas);
     }
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestBaseStatsCacheCloud.java b/solr/core/src/test/org/apache/solr/cloud/TestBaseStatsCacheCloud.java
index 85f9f5d..cf53430 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestBaseStatsCacheCloud.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestBaseStatsCacheCloud.java
@@ -95,7 +95,6 @@ public abstract class TestBaseStatsCacheCloud extends SolrCloudTestCase {
 
   protected void createTestCollection() throws Exception {
     CollectionAdminRequest.createCollection(collectionName, "conf", 2, numNodes)
-        .setMaxShardsPerNode(2)
         .process(solrClient);
     indexDocs(solrClient, collectionName, NUM_DOCS, 0, generator);
     indexDocs(control, "collection1", NUM_DOCS, 0, generator);
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestCloudRecovery.java b/solr/core/src/test/org/apache/solr/cloud/TestCloudRecovery.java
index 2afeea9..ff66e25 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestCloudRecovery.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestCloudRecovery.java
@@ -74,7 +74,6 @@ public class TestCloudRecovery extends SolrCloudTestCase {
                           // TestInjection#waitForInSyncWithLeader is broken
     CollectionAdminRequest
         .createCollection(COLLECTION, "config", 2, nrtReplicas, tlogReplicas, 0)
-        .setMaxShardsPerNode(2)
         .process(cluster.getSolrClient());
     cluster.waitForActiveCollection(COLLECTION, 2, 2 * (nrtReplicas + tlogReplicas));
 
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestCloudRecovery2.java b/solr/core/src/test/org/apache/solr/cloud/TestCloudRecovery2.java
index ae5e769..8167f2c 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestCloudRecovery2.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestCloudRecovery2.java
@@ -45,7 +45,6 @@ public class TestCloudRecovery2 extends SolrCloudTestCase {
 
     CollectionAdminRequest
         .createCollection(COLLECTION, "config", 1,2)
-        .setMaxShardsPerNode(2)
         .process(cluster.getSolrClient());
     AbstractDistribZkTestBase.waitForRecoveriesToFinish(COLLECTION, cluster.getSolrClient().getZkStateReader(),
         false, true, 30);
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestCloudSearcherWarming.java b/solr/core/src/test/org/apache/solr/cloud/TestCloudSearcherWarming.java
index 70680c2..b9d0f91 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestCloudSearcherWarming.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestCloudSearcherWarming.java
@@ -141,7 +141,7 @@ public class TestCloudSearcherWarming extends SolrCloudTestCase {
 
     String collectionName = "testPeersyncFailureReplicationSuccess";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName, 1, 1)
-        .setCreateNodeSet(cluster.getJettySolrRunner(0).getNodeName()).setMaxShardsPerNode(2);
+        .setCreateNodeSet(cluster.getJettySolrRunner(0).getNodeName());
     create.process(solrClient);
 
     waitForState("The collection should have 1 shard and 1 replica", collectionName, clusterShape(1, 1));
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestDeleteCollectionOnDownNodes.java b/solr/core/src/test/org/apache/solr/cloud/TestDeleteCollectionOnDownNodes.java
index e6836a3..f2146be 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestDeleteCollectionOnDownNodes.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestDeleteCollectionOnDownNodes.java
@@ -44,7 +44,6 @@ public class TestDeleteCollectionOnDownNodes extends SolrCloudTestCase {
   public void deleteCollectionWithDownNodes() throws Exception {
 
     CollectionAdminRequest.createCollection("halfdeletedcollection2", "conf", 4, 3)
-        .setMaxShardsPerNode(3)
         .process(cluster.getSolrClient());
 
     cluster.waitForActiveCollection("halfdeletedcollection2", 60, TimeUnit.SECONDS, 4, 12);
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestDynamicFieldNamesIndexCorrectly.java b/solr/core/src/test/org/apache/solr/cloud/TestDynamicFieldNamesIndexCorrectly.java
index e6048e1..4f04052 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestDynamicFieldNamesIndexCorrectly.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestDynamicFieldNamesIndexCorrectly.java
@@ -56,7 +56,7 @@ public class TestDynamicFieldNamesIndexCorrectly extends AbstractFullDistribZkTe
   public void test() throws Exception {
     waitForThingsToLevelOut(30, TimeUnit.SECONDS);
 
-    createCollection(COLLECTION, "conf1", 4, 1, 4);
+    createCollection(COLLECTION, "conf1", 4, 1);
     final int numRuns = 10;
     populateIndex(numRuns);
   }
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 e50c571..a2039cd 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestOnReconnectListenerSupport.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestOnReconnectListenerSupport.java
@@ -64,7 +64,7 @@ public class TestOnReconnectListenerSupport extends AbstractFullDistribZkTestBas
 
     String testCollectionName = "c8n_onreconnect_1x1";
     String shardId = "shard1";
-    createCollectionRetry(testCollectionName, "conf1", 1, 1, 1);
+    createCollectionRetry(testCollectionName, "conf1", 1, 1);
     cloudClient.setDefaultCollection(testCollectionName);
 
     Replica leader = getShardLeader(testCollectionName, shardId, 30 /* timeout secs */);
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 50404be..7005ab5 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestPullReplica.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestPullReplica.java
@@ -136,7 +136,6 @@ public class TestPullReplica extends SolrCloudTestCase {
         case 0:
           // Sometimes use SolrJ
           CollectionAdminRequest.createCollection(collectionName, "conf", 2, 1, 0, 3)
-          .setMaxShardsPerNode(100)
           .process(cluster.getSolrClient());
           break;
         case 1:
@@ -227,7 +226,6 @@ public class TestPullReplica extends SolrCloudTestCase {
   public void testAddDocs() throws Exception {
     int numPullReplicas = 1 + random().nextInt(3);
     CollectionAdminRequest.createCollection(collectionName, "conf", 1, 1, 0, numPullReplicas)
-    .setMaxShardsPerNode(100)
     .process(cluster.getSolrClient());
     waitForState("Expected collection to be created with 1 shard and " + (numPullReplicas + 1) + " replicas", collectionName, clusterShape(1, numPullReplicas + 1));
     DocCollection docCollection = assertNumberOfReplicas(1, 0, numPullReplicas, false, true);
@@ -285,7 +283,6 @@ public class TestPullReplica extends SolrCloudTestCase {
 
   public void testAddRemovePullReplica() throws Exception {
     CollectionAdminRequest.createCollection(collectionName, "conf", 2, 1, 0, 0)
-      .setMaxShardsPerNode(100)
       .process(cluster.getSolrClient());
     waitForState("Expected collection to be created with 2 shards and 1 replica each", collectionName, clusterShape(2, 2));
     DocCollection docCollection = assertNumberOfReplicas(2, 0, 0, false, true);
@@ -321,7 +318,6 @@ public class TestPullReplica extends SolrCloudTestCase {
   public void testPullReplicaStates() throws Exception {
     // Validate that pull replicas go through the correct states when starting, stopping, reconnecting
     CollectionAdminRequest.createCollection(collectionName, "conf", 1, 1, 0, 0)
-      .setMaxShardsPerNode(100)
       .process(cluster.getSolrClient());
 //    cluster.getSolrClient().getZkStateReader().registerCore(collectionName); //TODO: Is this needed?
     waitForState("Replica not added", collectionName, activeReplicaCount(1, 0, 0));
@@ -351,7 +347,6 @@ public class TestPullReplica extends SolrCloudTestCase {
     // should be redirected to Replica.Type.NRT
     int numReplicas = random().nextBoolean()?1:2;
     CollectionAdminRequest.createCollection(collectionName, "conf", 1, numReplicas, 0, numReplicas)
-      .setMaxShardsPerNode(100)
       .process(cluster.getSolrClient());
     waitForState("Unexpected replica count", collectionName, activeReplicaCount(numReplicas, 0, numReplicas));
     DocCollection docCollection = assertNumberOfReplicas(numReplicas, 0, numReplicas, false, true);
@@ -395,7 +390,6 @@ public class TestPullReplica extends SolrCloudTestCase {
    */
   private void doTestNoLeader(boolean removeReplica) throws Exception {
     CollectionAdminRequest.createCollection(collectionName, "conf", 1, 1, 0, 1)
-      .setMaxShardsPerNode(100)
       .process(cluster.getSolrClient());
     waitForState("Expected collection to be created with 1 shard and 2 replicas", collectionName, clusterShape(1, 2));
     DocCollection docCollection = assertNumberOfReplicas(1, 0, 1, false, true);
@@ -501,7 +495,6 @@ public class TestPullReplica extends SolrCloudTestCase {
 
   public void testKillPullReplica() throws Exception {
     CollectionAdminRequest.createCollection(collectionName, "conf", 1, 1, 0, 1)
-      .setMaxShardsPerNode(100)
       .process(cluster.getSolrClient());
 //    cluster.getSolrClient().getZkStateReader().registerCore(collectionName); //TODO: Is this needed?
     waitForState("Expected collection to be created with 1 shard and 2 replicas", collectionName, clusterShape(1, 2));
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 a449589..3da8651 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestPullReplicaErrorHandling.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestPullReplicaErrorHandling.java
@@ -142,7 +142,6 @@ public class TestPullReplicaErrorHandling extends SolrCloudTestCase {
 public void testCantConnectToPullReplica() throws Exception {
     int numShards = 2;
     CollectionAdminRequest.createCollection(collectionName, "conf", numShards, 1, 0, 1)
-      .setMaxShardsPerNode(1)
       .process(cluster.getSolrClient());
     cluster.waitForActiveCollection(collectionName, numShards, numShards * 2);
     addDocs(10);
@@ -185,7 +184,6 @@ public void testCantConnectToPullReplica() throws Exception {
   public void testCantConnectToLeader() throws Exception {
     int numShards = 1;
     CollectionAdminRequest.createCollection(collectionName, "conf", numShards, 1, 0, 1)
-      .setMaxShardsPerNode(1)
       .process(cluster.getSolrClient());
     cluster.waitForActiveCollection(collectionName, numShards, numShards * 2);
     addDocs(10);
@@ -221,7 +219,6 @@ public void testCantConnectToPullReplica() throws Exception {
   public void testPullReplicaDisconnectsFromZooKeeper() throws Exception {
     int numShards = 1;
     CollectionAdminRequest.createCollection(collectionName, "conf", numShards, 1, 0, 1)
-      .setMaxShardsPerNode(1)
       .process(cluster.getSolrClient());
     addDocs(10);
     DocCollection docCollection = assertNumberOfReplicas(numShards, 0, numShards, false, true);
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestRebalanceLeaders.java b/solr/core/src/test/org/apache/solr/cloud/TestRebalanceLeaders.java
index b207fa3..5f84158 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestRebalanceLeaders.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestRebalanceLeaders.java
@@ -68,7 +68,6 @@ public class TestRebalanceLeaders extends SolrCloudTestCase {
 
     CollectionAdminResponse resp = CollectionAdminRequest.createCollection(COLLECTION_NAME, COLLECTION_NAME,
         numShards, numReplicas, 0, 0)
-        .setMaxShardsPerNode((numShards * numReplicas) / numNodes + 1)
         .process(cluster.getSolrClient());
     assertEquals("Admin request failed; ", 0, resp.getStatus());
     cluster.waitForActiveCollection(COLLECTION_NAME, numShards, numShards * numReplicas);
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestRequestForwarding.java b/solr/core/src/test/org/apache/solr/cloud/TestRequestForwarding.java
index a479e5f..45ac577 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestRequestForwarding.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestRequestForwarding.java
@@ -73,7 +73,6 @@ public class TestRequestForwarding extends SolrTestCaseJ4 {
   private void createCollection(String name, String config) throws Exception {
     CollectionAdminResponse response;
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(name,config,2,1);
-    create.setMaxShardsPerNode(1);
     response = create.process(solrCluster.getSolrClient());
     
     if (response.getStatus() != 0 || response.getErrorMessages() != null) {
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestSkipOverseerOperations.java b/solr/core/src/test/org/apache/solr/cloud/TestSkipOverseerOperations.java
index 73bf698..ce72800 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestSkipOverseerOperations.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestSkipOverseerOperations.java
@@ -141,7 +141,6 @@ public class TestSkipOverseerOperations extends SolrCloudTestCase {
             .map(JettySolrRunner::getNodeName)
             .collect(Collectors.joining(","))
         )
-        .setMaxShardsPerNode(2)
         .process(cluster.getSolrClient());
     
     cluster.waitForActiveCollection(collection, 2, 4);
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java
index 3daaa64..b9edb54 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java
@@ -50,8 +50,7 @@ public class TestSolrCloudWithKerberosAlt extends SolrCloudTestCase {
 
   private static final int numShards = 1;
   private static final int numReplicas = 1;
-  private static final int maxShardsPerNode = 1;
-  private static final int nodeCount = (numShards*numReplicas + (maxShardsPerNode-1))/maxShardsPerNode;
+  private static final int nodeCount = numShards*numReplicas;
   private static final String configName = "solrCloudCollectionConfig";
   private static final String collectionName = "testkerberoscollection";
   
@@ -122,7 +121,6 @@ public class TestSolrCloudWithKerberosAlt extends SolrCloudTestCase {
   private void testCollectionCreateSearchDelete() throws Exception {
     CloudSolrClient client = cluster.getSolrClient();
     CollectionAdminRequest.createCollection(collectionName, configName, numShards, numReplicas)
-        .setMaxShardsPerNode(maxShardsPerNode)
         .process(client);
 
     cluster.waitForActiveCollection(collectionName, numShards, numShards * numReplicas);
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithSecureImpersonation.java b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithSecureImpersonation.java
index 1b4fe99..bf4cbe5 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithSecureImpersonation.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithSecureImpersonation.java
@@ -183,7 +183,6 @@ public class TestSolrCloudWithSecureImpersonation extends SolrTestCaseJ4 {
         return msp;
       }
     };
-    create.setMaxShardsPerNode(1);
     response = create.process(solrCluster.getSolrClient());
 
     miniCluster.waitForActiveCollection(name, 1, 1);
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 57129c3..51691c0 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestTlogReplica.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestTlogReplica.java
@@ -152,7 +152,6 @@ public class TestTlogReplica extends SolrCloudTestCase {
     switch (random().nextInt(3)) {
       case 0:
         CollectionAdminRequest.createCollection(collectionName, "conf", 2, 0, 4, 0)
-        .setMaxShardsPerNode(100)
         .process(cluster.getSolrClient());
         cluster.waitForActiveCollection(collectionName, 2, 8);
         break;
@@ -328,7 +327,6 @@ public class TestTlogReplica extends SolrCloudTestCase {
     int numReplicas = random().nextBoolean()?1:2;
     int numNrtReplicas = random().nextBoolean()?0:2;
     CollectionAdminRequest.createCollection(collectionName, "conf", 1, numNrtReplicas, numReplicas, 0)
-      .setMaxShardsPerNode(100)
       .process(cluster.getSolrClient());
     waitForState("Unexpected replica count", collectionName, activeReplicaCount(numNrtReplicas, numReplicas, 0));
     DocCollection docCollection = assertNumberOfReplicas(numNrtReplicas, numReplicas, 0, false, true);
@@ -753,7 +751,6 @@ public class TestTlogReplica extends SolrCloudTestCase {
 
   private DocCollection createAndWaitForCollection(int numShards, int numNrtReplicas, int numTlogReplicas, int numPullReplicas) throws SolrServerException, IOException, KeeperException, InterruptedException {
     CollectionAdminRequest.createCollection(collectionName, "conf", numShards, numNrtReplicas, numTlogReplicas, numPullReplicas)
-    .setMaxShardsPerNode(100)
     .process(cluster.getSolrClient());
     int numReplicasPerShard = numNrtReplicas + numTlogReplicas + numPullReplicas;
     waitForState("Expected collection to be created with " + numShards + " shards and  " + numReplicasPerShard + " replicas",
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestUtilizeNode.java b/solr/core/src/test/org/apache/solr/cloud/TestUtilizeNode.java
index e51263a..7d7d049 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestUtilizeNode.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestUtilizeNode.java
@@ -77,8 +77,7 @@ public class TestUtilizeNode extends SolrCloudTestCase {
     CloudSolrClient cloudClient = cluster.getSolrClient();
     
     log.info("Creating Collection...");
-    CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(coll, "conf1", 2, REPLICATION)
-        .setMaxShardsPerNode(2);
+    CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(coll, "conf1", 2, REPLICATION);
     cloudClient.request(create);
 
     log.info("Spinning up additional jettyX...");
diff --git a/solr/core/src/test/org/apache/solr/cloud/ZkShardTermsTest.java b/solr/core/src/test/org/apache/solr/cloud/ZkShardTermsTest.java
index 56ed8ae7..f648eb2 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ZkShardTermsTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ZkShardTermsTest.java
@@ -65,7 +65,6 @@ public class ZkShardTermsTest extends SolrCloudTestCase {
     // When new collection is created, the old term nodes will be removed
     CollectionAdminRequest.createCollection(collection, 2, 2)
         .setCreateNodeSet(cluster.getJettySolrRunner(0).getNodeName())
-        .setMaxShardsPerNode(1000)
         .process(cluster.getSolrClient());
     try (ZkShardTerms zkShardTerms = new ZkShardTerms(collection, "shard1", cluster.getZkClient())) {
       waitFor(2, () -> zkShardTerms.getTerms().size());
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/AbstractCloudBackupRestoreTestCase.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/AbstractCloudBackupRestoreTestCase.java
index cff0309..fc32aa9 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/AbstractCloudBackupRestoreTestCase.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/AbstractCloudBackupRestoreTestCase.java
@@ -115,14 +115,6 @@ public abstract class AbstractCloudBackupRestoreTestCase extends SolrCloudTestCa
         CollectionAdminRequest.createCollection(getCollectionName(), "conf1", NUM_SHARDS, replFactor, numTlogReplicas, numPullReplicas);
 
     if (random().nextBoolean()) {
-      create.setMaxShardsPerNode(-1);
-    } else if (doSplitShardOperation) {
-      create.setMaxShardsPerNode((int) Math.ceil(NUM_SPLIT_SHARDS * backupReplFactor / (double) cluster.getJettySolrRunners().size()));
-    } else if (NUM_SHARDS * (backupReplFactor) > cluster.getJettySolrRunners().size() || random().nextBoolean()) {
-      create.setMaxShardsPerNode((int) Math.ceil(NUM_SHARDS * backupReplFactor / (double) cluster.getJettySolrRunners().size()));//just to assert it survives the restoration
-    }
-
-    if (random().nextBoolean()) {
       create.setAutoAddReplicas(true);//just to assert it survives the restoration
     }
     Properties coreProps = new Properties();
@@ -171,10 +163,6 @@ public abstract class AbstractCloudBackupRestoreTestCase extends SolrCloudTestCa
     CollectionAdminRequest.Create create =
         CollectionAdminRequest.createCollection(getCollectionName(), "conf1", NUM_SHARDS, replFactor, numTlogReplicas, numPullReplicas);
 
-    if (NUM_SHARDS * (replFactor + numTlogReplicas + numPullReplicas) > cluster.getJettySolrRunners().size()) {
-      create.setMaxShardsPerNode((int)Math.ceil(NUM_SHARDS * (replFactor + numTlogReplicas + numPullReplicas) / cluster.getJettySolrRunners().size())); //just to assert it survives the restoration
-    }
-
     CloudSolrClient solrClient = cluster.getSolrClient();
     create.process(solrClient);
 
@@ -332,8 +320,6 @@ public abstract class AbstractCloudBackupRestoreTestCase extends SolrCloudTestCa
 
     int restoreReplFactor = restoreReplcationFactor + restoreTlogReplicas + restorePullReplicas;
 
-    boolean isMaxShardsPerNodeExternal = false;
-    boolean isMaxShardsUnlimited = false;
     CollectionAdminRequest.Restore restore = CollectionAdminRequest.restoreCollection(restoreCollectionName, backupName)
         .setLocation(backupLocation).setRepositoryName(getBackupRepoName());
 
@@ -349,20 +335,12 @@ public abstract class AbstractCloudBackupRestoreTestCase extends SolrCloudTestCa
       log.info("numShards={} restoreReplFactor={} maxShardsPerNode={} totalNodes={}",
           numShards, restoreReplFactor, computeRestoreMaxShardsPerNode, cluster.getJettySolrRunners().size());
 
-      if (random().nextBoolean()) { //set it to -1
-        isMaxShardsUnlimited = true;
-        restore.setMaxShardsPerNode(-1);
-      } else {
-        isMaxShardsPerNodeExternal = true;
-        restore.setMaxShardsPerNode(computeRestoreMaxShardsPerNode);
-      }
     }
 
     if (rarely()) { // Try with createNodeSet configuration
       //Always 1 as cluster.getJettySolrRunners().size()=NUM_SHARDS=2
       restore.setCreateNodeSet(cluster.getJettySolrRunners().get(0).getNodeName());
       // we need to double maxShardsPerNode value since we reduced number of available nodes by half.
-      isMaxShardsPerNodeExternal = true;
       computeRestoreMaxShardsPerNode = origShardToDocCount.size() * restoreReplFactor;
       restore.setMaxShardsPerNode(computeRestoreMaxShardsPerNode);
     }
@@ -411,13 +389,6 @@ public abstract class AbstractCloudBackupRestoreTestCase extends SolrCloudTestCa
     assertEquals(restoreCollection.toString(), restoreReplcationFactor, restoreCollection.getNumNrtReplicas().intValue());
     assertEquals(restoreCollection.toString(), restorePullReplicas, restoreCollection.getNumPullReplicas().intValue());
     assertEquals(restoreCollection.toString(), restoreTlogReplicas, restoreCollection.getNumTlogReplicas().intValue());
-    if (isMaxShardsPerNodeExternal) {
-      assertEquals(restoreCollectionName, restoreMaxShardsPerNode, restoreCollection.getMaxShardsPerNode());
-    } else if (isMaxShardsUnlimited){
-      assertEquals(restoreCollectionName, -1, restoreCollection.getMaxShardsPerNode());
-    } else {
-      assertEquals(restoreCollectionName, backupCollection.getMaxShardsPerNode(), restoreCollection.getMaxShardsPerNode());
-    }
 
     assertEquals("Restore collection should use stateFormat=2", 2, restoreCollection.getStateFormat());
 
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/AsyncCallRequestStatusResponseTest.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/AsyncCallRequestStatusResponseTest.java
index d00dd67..45220d8 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/AsyncCallRequestStatusResponseTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/AsyncCallRequestStatusResponseTest.java
@@ -53,7 +53,6 @@ public class AsyncCallRequestStatusResponseTest extends SolrCloudTestCase {
     int numShards = 4;
     int numReplicas = 1;
     Create createCollection = CollectionAdminRequest.createCollection("asynccall", "conf", numShards, numReplicas);
-    createCollection.setMaxShardsPerNode(100);
     String asyncId =
         createCollection.processAsync(cluster.getSolrClient());
 
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 25aaf4e..95dfc4b 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
@@ -51,7 +51,6 @@ public class CollectionTooManyReplicasTest extends SolrCloudTestCase {
   public void testAddTooManyReplicas() throws Exception {
     final String collectionName = "TooManyReplicasInSeveralFlavors";
     CollectionAdminRequest.createCollection(collectionName, "conf", 2, 1)
-        .setMaxShardsPerNode(1)
         .process(cluster.getSolrClient());
 
     // I have two replicas, one for each shard
@@ -122,7 +121,6 @@ public class CollectionTooManyReplicasTest extends SolrCloudTestCase {
 
     String collectionName = "TooManyReplicasWhenAddingShards";
     CollectionAdminRequest.createCollectionWithImplicitRouter(collectionName, "conf", "shardstart", 2)
-        .setMaxShardsPerNode(2)
         .process(cluster.getSolrClient());
 
     // We have two nodes, maxShardsPerNode is set to 2. Therefore, we should be able to add 2 shards each with
@@ -179,7 +177,6 @@ public class CollectionTooManyReplicasTest extends SolrCloudTestCase {
   public void testDownedShards() throws Exception {
     String collectionName = "TooManyReplicasWhenAddingDownedNode";
     CollectionAdminRequest.createCollectionWithImplicitRouter(collectionName, "conf", "shardstart", 1)
-        .setMaxShardsPerNode(2)
         .process(cluster.getSolrClient());
 
     // Shut down a Jetty, I really don't care which
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionsAPIDistributedZkTest.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionsAPIDistributedZkTest.java
index af3cd55..24bbc70 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionsAPIDistributedZkTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionsAPIDistributedZkTest.java
@@ -407,11 +407,9 @@ public class CollectionsAPIDistributedZkTest extends SolrCloudTestCase {
 
       int numShards = TestUtil.nextInt(random(), 0, cluster.getJettySolrRunners().size()) + 1;
       int replicationFactor = TestUtil.nextInt(random(), 0, 3) + 1;
-      int maxShardsPerNode = (((numShards * replicationFactor) / cluster.getJettySolrRunners().size())) + 1;
 
       createRequests[i]
-          = CollectionAdminRequest.createCollection("awhollynewcollection_" + i, "conf2", numShards, replicationFactor)
-          .setMaxShardsPerNode(maxShardsPerNode);
+          = CollectionAdminRequest.createCollection("awhollynewcollection_" + i, "conf2", numShards, replicationFactor);
       createRequests[i].processAsync(cluster.getSolrClient());
       
       Coll coll = new Coll();
@@ -607,7 +605,6 @@ public class CollectionsAPIDistributedZkTest extends SolrCloudTestCase {
     String collectionName = "addReplicaColl";
 
     CollectionAdminRequest.createCollection(collectionName, "conf", 2, 2)
-        .setMaxShardsPerNode(4)
         .process(cluster.getSolrClient());
     cluster.waitForActiveCollection(collectionName, 2, 4);
 
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/ConcurrentCreateCollectionTest.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/ConcurrentCreateCollectionTest.java
index 9c1b4e9..eb816d2 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/ConcurrentCreateCollectionTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/ConcurrentCreateCollectionTest.java
@@ -71,8 +71,7 @@ public class ConcurrentCreateCollectionTest extends SolrCloudTestCase {
   private CollectionAdminRequest.Create createCollectionRequest(String cname, int numShards, int numReplicas) throws Exception {
     CollectionAdminRequest.Create creq = CollectionAdminRequest
         //  .createCollection(cname, "conf", NODES - 1, NODES - 1)
-        .createCollection(cname, "conf", numShards, numReplicas)
-        .setMaxShardsPerNode(100);
+        .createCollection(cname, "conf", numShards, numReplicas);
     creq.setWaitForFinalState(true);
     creq.setAutoAddReplicas(true);
     return creq;
@@ -135,8 +134,7 @@ public class ConcurrentCreateCollectionTest extends SolrCloudTestCase {
       String cname = "STARTCOLLECTION";
       CollectionAdminRequest.Create creq = CollectionAdminRequest
           //  .createCollection(cname, "conf", NODES - 1, NODES - 1)
-          .createCollection(cname, "conf", unbalancedSize, 1)
-          .setMaxShardsPerNode(100);
+          .createCollection(cname, "conf", unbalancedSize, 1);
       creq.setWaitForFinalState(true);
       // creq.setAutoAddReplicas(true);
       if (useCollectionPolicy) { creq.setPolicy("policy1"); }
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/CustomCollectionTest.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/CustomCollectionTest.java
index d556271..5e1524e 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/CustomCollectionTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/CustomCollectionTest.java
@@ -31,7 +31,6 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 
 import static org.apache.solr.common.cloud.DocCollection.DOC_ROUTER;
-import static org.apache.solr.common.cloud.ZkStateReader.MAX_SHARDS_PER_NODE;
 import static org.apache.solr.common.cloud.ZkStateReader.REPLICATION_FACTOR;
 import static org.apache.solr.common.params.ShardParams._ROUTE_;
 
@@ -61,16 +60,13 @@ public class CustomCollectionTest extends SolrCloudTestCase {
     final String collection = "implicitcoll";
     int replicationFactor = TestUtil.nextInt(random(), 0, 3) + 2;
     int numShards = 3;
-    int maxShardsPerNode = (((numShards + 1) * replicationFactor) / NODE_COUNT) + 1;
 
     CollectionAdminRequest.createCollectionWithImplicitRouter(collection, "conf", "a,b,c", replicationFactor)
-        .setMaxShardsPerNode(maxShardsPerNode)
         .process(cluster.getSolrClient());
 
     DocCollection coll = getCollectionState(collection);
     assertEquals("implicit", ((Map) coll.get(DOC_ROUTER)).get("name"));
     assertNotNull(coll.getStr(REPLICATION_FACTOR));
-    assertNotNull(coll.getStr(MAX_SHARDS_PER_NODE));
     assertNull("A shard of a Collection configured with implicit router must have null range",
         coll.getSlice("a").getRange());
 
@@ -126,13 +122,11 @@ public class CustomCollectionTest extends SolrCloudTestCase {
 
     int numShards = 4;
     int replicationFactor = TestUtil.nextInt(random(), 0, 3) + 2;
-    int maxShardsPerNode = ((numShards * replicationFactor) / NODE_COUNT) + 1;
     String shard_fld = "shard_s";
 
     final String collection = "withShardField";
 
     CollectionAdminRequest.createCollectionWithImplicitRouter(collection, "conf", "a,b,c,d", replicationFactor)
-        .setMaxShardsPerNode(maxShardsPerNode)
         .setRouterField(shard_fld)
         .process(cluster.getSolrClient());
 
@@ -158,7 +152,6 @@ public class CustomCollectionTest extends SolrCloudTestCase {
     String shard_fld = "shard_s";
 
     CollectionAdminRequest.createCollection(collectionName, "conf", numShards, replicationFactor)
-        .setMaxShardsPerNode(maxShardsPerNode)
         .setRouterField(shard_fld)
         .process(cluster.getSolrClient());
     
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/ShardSplitTest.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/ShardSplitTest.java
index 5316d6b..a670b24 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/ShardSplitTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/ShardSplitTest.java
@@ -75,7 +75,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static org.apache.solr.common.cloud.ZkStateReader.BASE_URL_PROP;
-import static org.apache.solr.common.cloud.ZkStateReader.MAX_SHARDS_PER_NODE;
 import static org.apache.solr.common.cloud.ZkStateReader.REPLICATION_FACTOR;
 
 @Slow
@@ -142,7 +141,6 @@ public class ShardSplitTest extends BasicDistributedZkTest {
 
     String collectionName = "testSplitStaticIndexReplication_" + splitMethod.toLower();
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName, "conf1", 1, 1);
-    create.setMaxShardsPerNode(5); // some high number so we can create replicas without hindrance
     create.setCreateNodeSet(nodeName); // we want to create the leader on a fixed node so that we know which one to restart later
     create.process(cloudClient);
     
@@ -359,7 +357,6 @@ public class ShardSplitTest extends BasicDistributedZkTest {
     waitForThingsToLevelOut(15, TimeUnit.SECONDS);
     String collectionName = "testSplitMixedReplicaTypes_" + splitMethod.toLower();
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName, "conf1", 1, 2, 0, 2); // TODO tlog replicas disabled right now.
-    create.setMaxShardsPerNode(5); // some high number so we can create replicas without hindrance
     create.process(cloudClient);
     
     cloudClient.waitForState(collectionName, 30, TimeUnit.SECONDS, SolrCloudTestCase.activeClusterShape(1, 4));
@@ -568,7 +565,6 @@ public class ShardSplitTest extends BasicDistributedZkTest {
     waitForThingsToLevelOut(15, TimeUnit.SECONDS);
     String collectionName = "testSplitLocking";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName, "conf1", 1, 2);
-    create.setMaxShardsPerNode(5); // some high number so we can create replicas without hindrance
     create.process(cloudClient);
     
     cloudClient.waitForState(collectionName, 30, TimeUnit.SECONDS, SolrCloudTestCase.activeClusterShape(1, 2));
@@ -801,15 +797,12 @@ public class ShardSplitTest extends BasicDistributedZkTest {
     String collectionName = "routeFieldColl";
     int numShards = 4;
     int replicationFactor = 2;
-    int maxShardsPerNode = (((numShards * replicationFactor) / getCommonCloudSolrClient()
-        .getZkStateReader().getClusterState().getLiveNodes().size())) + 1;
 
     HashMap<String, List<Integer>> collectionInfos = new HashMap<>();
     String shard_fld = "shard_s";
     try (CloudSolrClient client = createCloudClient(null)) {
       Map<String, Object> props = Utils.makeMap(
           REPLICATION_FACTOR, replicationFactor,
-          MAX_SHARDS_PER_NODE, maxShardsPerNode,
           OverseerCollectionMessageHandler.NUM_SLICES, numShards,
           "router.field", shard_fld);
 
@@ -863,15 +856,12 @@ public class ShardSplitTest extends BasicDistributedZkTest {
     String collectionName = "splitByRouteKeyTest";
     int numShards = 4;
     int replicationFactor = 2;
-    int maxShardsPerNode = (((numShards * replicationFactor) / getCommonCloudSolrClient()
-        .getZkStateReader().getClusterState().getLiveNodes().size())) + 1;
 
     HashMap<String, List<Integer>> collectionInfos = new HashMap<>();
 
     try (CloudSolrClient client = createCloudClient(null)) {
       Map<String, Object> props = Utils.makeMap(
           REPLICATION_FACTOR, replicationFactor,
-          MAX_SHARDS_PER_NODE, maxShardsPerNode,
           OverseerCollectionMessageHandler.NUM_SLICES, numShards);
 
       createCollection(collectionInfos, collectionName,props,client);
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/SplitByPrefixTest.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/SplitByPrefixTest.java
index cca4fe4..c66b3af 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/SplitByPrefixTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/SplitByPrefixTest.java
@@ -154,7 +154,6 @@ public class SplitByPrefixTest extends SolrCloudTestCase {
 
     CollectionAdminRequest
         .createCollection(COLLECTION_NAME, "conf", 1, 1)
-        .setMaxShardsPerNode(100)
         .process(cluster.getSolrClient());
 
     cluster.waitForActiveCollection(COLLECTION_NAME, 1, 1);
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java
index 804728b..291f0e8 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java
@@ -71,11 +71,10 @@ public class TestCollectionAPI extends ReplicaPropertiesBase {
       } else {
         req = CollectionAdminRequest.createCollection(COLLECTION_NAME, "conf1",2, 1, 0, 1);
       }
-      req.setMaxShardsPerNode(2);
       setV2(req);
       client.request(req);
       assertV2CallsCount();
-      createCollection(null, COLLECTION_NAME1, 1, 1, 1, client, null, "conf1");
+      createCollection(null, COLLECTION_NAME1, 1, 1, client, null, "conf1");
     }
 
     waitForCollection(cloudClient.getZkStateReader(), COLLECTION_NAME, 2);
@@ -411,7 +410,7 @@ public class TestCollectionAPI extends ReplicaPropertiesBase {
   private void clusterStatusZNodeVersion() throws Exception {
     String cname = "clusterStatusZNodeVersion";
     try (CloudSolrClient client = createCloudClient(null)) {
-      setV2(CollectionAdminRequest.createCollection(cname, "conf1", 1, 1).setMaxShardsPerNode(1)).process(client);
+      setV2(CollectionAdminRequest.createCollection(cname, "conf1", 1, 1)).process(client);
       assertV2CallsCount();
       waitForRecoveriesToFinish(cname, true);
 
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionsAPIViaSolrCloudCluster.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionsAPIViaSolrCloudCluster.java
index eed4c64..3d5e28d 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionsAPIViaSolrCloudCluster.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionsAPIViaSolrCloudCluster.java
@@ -56,7 +56,6 @@ public class TestCollectionsAPIViaSolrCloudCluster extends SolrCloudTestCase {
 
   private static final int numShards = 2;
   private static final int numReplicas = 2;
-  private static final int maxShardsPerNode = 1;
   private static final int nodeCount = 5;
   private static final String configName = "solrCloudCollectionConfig";
   private static final Map<String,String> collectionProperties  // ensure indexes survive core shutdown
@@ -77,14 +76,12 @@ public class TestCollectionsAPIViaSolrCloudCluster extends SolrCloudTestCase {
   private void createCollection(String collectionName, String createNodeSet) throws Exception {
     if (random().nextBoolean()) { // process asynchronously
       CollectionAdminRequest.createCollection(collectionName, configName, numShards, numReplicas)
-          .setMaxShardsPerNode(maxShardsPerNode)
           .setCreateNodeSet(createNodeSet)
           .setProperties(collectionProperties)
           .processAndWait(cluster.getSolrClient(), 30);
     }
     else {
       CollectionAdminRequest.createCollection(collectionName, configName, numShards, numReplicas)
-          .setMaxShardsPerNode(maxShardsPerNode)
           .setCreateNodeSet(createNodeSet)
           .setProperties(collectionProperties)
           .process(cluster.getSolrClient());
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestReplicaProperties.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestReplicaProperties.java
index d327aec..e10c6cc 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestReplicaProperties.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestReplicaProperties.java
@@ -52,12 +52,12 @@ public class TestReplicaProperties extends ReplicaPropertiesBase {
 
     try (CloudSolrClient client = createCloudClient(null)) {
       // Mix up a bunch of different combinations of shards and replicas in order to exercise boundary cases.
-      // shards, replicationfactor, maxreplicaspernode
+      // shards, replicationfactor
       int shards = random().nextInt(7);
       if (shards < 2) shards = 2;
       int rFactor = random().nextInt(4);
       if (rFactor < 2) rFactor = 2;
-      createCollection(null, COLLECTION_NAME, shards, rFactor, shards * rFactor + 1, client, null, "conf1");
+      createCollection(null, COLLECTION_NAME, shards, rFactor, client, null, "conf1");
     }
 
     waitForCollection(cloudClient.getZkStateReader(), COLLECTION_NAME, 2);
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoAddReplicasIntegrationTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoAddReplicasIntegrationTest.java
index e28165f7..0bc956a 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoAddReplicasIntegrationTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoAddReplicasIntegrationTest.java
@@ -106,7 +106,6 @@ public class AutoAddReplicasIntegrationTest extends SolrCloudTestCase {
     CollectionAdminRequest.createCollection(COLLECTION, "conf", 2, 2)
       .setCreateNodeSet(jetty1.getNodeName()+","+jetty2.getNodeName())
       .setAutoAddReplicas(true)
-      .setMaxShardsPerNode(2)
       .process(cluster.getSolrClient());
     
     cluster.waitForActiveCollection(COLLECTION, 2, 4);
@@ -154,7 +153,6 @@ public class AutoAddReplicasIntegrationTest extends SolrCloudTestCase {
     CollectionAdminRequest.createCollection(COLLECTION, "conf", 2, 2)
       .setCreateNodeSet(jetty1.getNodeName()+","+jetty2.getNodeName())
       .setAutoAddReplicas(true)
-      .setMaxShardsPerNode(2)
       .process(cluster.getSolrClient());
     
     cluster.waitForActiveCollection(COLLECTION, 2, 4);
@@ -207,7 +205,6 @@ public class AutoAddReplicasIntegrationTest extends SolrCloudTestCase {
     CollectionAdminRequest.createCollection(COLLECTION, "conf", 2, 2)
       .setCreateNodeSet(jetty1.getNodeName()+","+jetty2.getNodeName())
       .setAutoAddReplicas(false) // NOTE: false
-      .setMaxShardsPerNode(2)
       .process(cluster.getSolrClient());
     
     cluster.waitForActiveCollection(COLLECTION, 2, 4);
@@ -278,7 +275,6 @@ public class AutoAddReplicasIntegrationTest extends SolrCloudTestCase {
     CollectionAdminRequest.createCollection(COLLECTION, "conf", 2, 2)
       .setCreateNodeSet(jetty1.getNodeName()+","+jetty2.getNodeName())
       .setAutoAddReplicas(false) // NOTE: false
-      .setMaxShardsPerNode(2)
       .process(cluster.getSolrClient());
     
     log.info("Creating {} using jetty1:{}/{} and jetty2:{}/{}", ALT_COLLECTION,
@@ -288,7 +284,6 @@ public class AutoAddReplicasIntegrationTest extends SolrCloudTestCase {
     CollectionAdminRequest.createCollection(ALT_COLLECTION, "conf", 2, 2)
       .setCreateNodeSet(jetty1.getNodeName()+","+jetty2.getNodeName())
       .setAutoAddReplicas(true) // NOTE: true
-      .setMaxShardsPerNode(2)
       .process(cluster.getSolrClient());
     
     cluster.waitForActiveCollection(COLLECTION, 2, 4);
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoAddReplicasPlanActionTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoAddReplicasPlanActionTest.java
index b6e6d20..a8fd3fd 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoAddReplicasPlanActionTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoAddReplicasPlanActionTest.java
@@ -87,18 +87,15 @@ public class AutoAddReplicasPlanActionTest extends SolrCloudTestCase{
     CollectionAdminRequest.createCollection(collection1, "conf", 2, 2)
         .setCreateNodeSet(jetty1.getNodeName()+","+jetty2.getNodeName())
         .setAutoAddReplicas(true)
-        .setMaxShardsPerNode(2)
         .process(cluster.getSolrClient());
     CollectionAdminRequest.createCollection(collection2, "conf", 1, 2)
         .setCreateNodeSet(jetty2.getNodeName()+","+jetty3.getNodeName())
         .setAutoAddReplicas(false)
-        .setMaxShardsPerNode(1)
         .process(cluster.getSolrClient());
     // the number of cores in jetty1 (5) will be larger than jetty3 (1)
     CollectionAdminRequest.createCollection("testSimple3", "conf", 3, 1)
         .setCreateNodeSet(jetty1.getNodeName())
         .setAutoAddReplicas(false)
-        .setMaxShardsPerNode(3)
         .process(cluster.getSolrClient());
     
     cluster.waitForActiveCollection(collection1, 2, 4);
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
index 75696ca..5e1033d 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
@@ -106,7 +106,6 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
     CloudSolrClient solrClient = cluster.getSolrClient();
     String COLLNAME = "testSuggestionsWithPayload.COLL";
     CollectionAdminResponse adminResponse = CollectionAdminRequest.createCollection(COLLNAME, CONFIGSET_NAME, 1, 2)
-        .setMaxShardsPerNode(4)
         .process(solrClient);
     cluster.waitForActiveCollection(COLLNAME, 1, 2);
     DocCollection collection = solrClient.getClusterStateProvider().getCollection(COLLNAME);
@@ -139,7 +138,6 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
     CloudSolrClient solrClient = cluster.getSolrClient();
     String COLLNAME = "testDiagnosticsWithPayload.COLL";
     CollectionAdminResponse adminResponse = CollectionAdminRequest.createCollection(COLLNAME, CONFIGSET_NAME, 1, 2)
-        .setMaxShardsPerNode(4)
         .process(solrClient);
     cluster.waitForActiveCollection(COLLNAME, 1, 2);
     DocCollection collection = solrClient.getClusterStateProvider().getCollection(COLLNAME);
@@ -846,8 +844,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
     assertEquals(response.get("result").toString(), "success");
 
     // lets create a collection which violates the rule replicas < 2
-    CollectionAdminRequest.Create create = CollectionAdminRequest.Create.createCollection("readApiTestViolations", CONFIGSET_NAME, 1, 6)
-        .setMaxShardsPerNode(3);
+    CollectionAdminRequest.Create create = CollectionAdminRequest.Create.createCollection("readApiTestViolations", CONFIGSET_NAME, 1, 6);
     CollectionAdminResponse adminResponse = create.process(solrClient);
     cluster.waitForActiveCollection("readApiTestViolations", 1, 6);
     assertTrue(adminResponse.isSuccess());
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/ComputePlanActionTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/ComputePlanActionTest.java
index 851308f..ab07e6b 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/ComputePlanActionTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/ComputePlanActionTest.java
@@ -283,7 +283,6 @@ public class ComputePlanActionTest extends SolrCloudTestCase {
 
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection("testNodeWithMultipleReplicasLost",
         "conf", 2, 3);
-    create.setMaxShardsPerNode(2);
     create.process(solrClient);
     
     cluster.waitForActiveCollection("testNodeWithMultipleReplicasLost", 2, 6);
@@ -363,7 +362,7 @@ public class ComputePlanActionTest extends SolrCloudTestCase {
     assertEquals(response.get("result").toString(), "success");
 
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection("testNodeAdded",
-        "conf",1, 2).setMaxShardsPerNode(2);
+        "conf",1, 2);
     create.process(solrClient);
 
     waitForState("Timed out waiting for replicas of new collection to be active",
@@ -610,7 +609,7 @@ public class ComputePlanActionTest extends SolrCloudTestCase {
 
 
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionNamePrefix + "_0",
-        "conf", numShards, nNrtReplicas, nTlogReplicas, nPullReplicas).setMaxShardsPerNode(2);
+        "conf", numShards, nNrtReplicas, nTlogReplicas, nPullReplicas);
     create.process(solrClient);
 
     waitForState("Timed out waiting for replicas of new collection to be active",
@@ -637,7 +636,7 @@ public class ComputePlanActionTest extends SolrCloudTestCase {
 
     for (int i = 1; i < numCollections; i++) {
       create = CollectionAdminRequest.createCollection(collectionNamePrefix + "_" + i,
-          "conf", numShards, 2).setMaxShardsPerNode(numShards * 2);
+          "conf", numShards, 2);
       create.process(solrClient);
 
       waitForState("Timed out waiting for replicas of new collection to be active",
@@ -708,7 +707,7 @@ public class ComputePlanActionTest extends SolrCloudTestCase {
     String newNodeName = newNode.getNodeName();
 
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionNamePrefix + "_0",
-        "conf", numShards, 2).setMaxShardsPerNode(numShards * 2);
+        "conf", numShards, 2);
     create.process(solrClient);
 
     waitForState("Timed out waiting for replicas of new collection to be active",
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/ExecutePlanActionTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/ExecutePlanActionTest.java
index d286faf..25917cc 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/ExecutePlanActionTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/ExecutePlanActionTest.java
@@ -128,7 +128,6 @@ public class ExecutePlanActionTest extends SolrCloudTestCase {
     String collectionName = "testExecute";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
         "conf", 1, 2);
-    create.setMaxShardsPerNode(1);
     create.process(solrClient);
     
     cluster.waitForActiveCollection(collectionName, 1, 2);
@@ -222,7 +221,6 @@ public class ExecutePlanActionTest extends SolrCloudTestCase {
     String collectionName = "testIntegration";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
         "conf", 1, 2);
-    create.setMaxShardsPerNode(1);
     create.process(solrClient);
     
     cluster.waitForActiveCollection(collectionName, 1, 2);
@@ -288,7 +286,6 @@ public class ExecutePlanActionTest extends SolrCloudTestCase {
     String collectionName = "testTaskTimeout";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
         "conf", 1, 2);
-    create.setMaxShardsPerNode(1);
     create.process(solrClient);
 
     cluster.waitForActiveCollection(collectionName, 1, 2);
@@ -346,7 +343,6 @@ public class ExecutePlanActionTest extends SolrCloudTestCase {
     String collectionName = "testTaskFail";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
         "conf", 1, 2);
-    create.setMaxShardsPerNode(1);
     create.process(solrClient);
 
     cluster.waitForActiveCollection(collectionName, 1, 2);
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/IndexSizeTriggerMixedBoundsTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/IndexSizeTriggerMixedBoundsTest.java
index 9ed4baf..fb68524 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/IndexSizeTriggerMixedBoundsTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/IndexSizeTriggerMixedBoundsTest.java
@@ -123,7 +123,7 @@ public class IndexSizeTriggerMixedBoundsTest extends SolrCloudTestCase {
   public void testMixedBounds() throws Exception {
     String collectionName = "testMixedBounds_collection";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
-        "conf", 2, 2).setMaxShardsPerNode(2);
+        "conf", 2, 2);
     create.process(solrClient);
     CloudUtil.waitForState(cloudManager, "failed to create " + collectionName, collectionName,
         CloudUtil.clusterShape(2, 2, false, true));
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/IndexSizeTriggerSizeEstimationTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/IndexSizeTriggerSizeEstimationTest.java
index f88767c..aa52ee2 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/IndexSizeTriggerSizeEstimationTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/IndexSizeTriggerSizeEstimationTest.java
@@ -136,7 +136,7 @@ public class IndexSizeTriggerSizeEstimationTest extends SolrCloudTestCase {
   public void testEstimatedIndexSize() throws Exception {
     String collectionName = "testEstimatedIndexSize_collection";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
-        "conf", 2, 2).setMaxShardsPerNode(2);
+        "conf", 2, 2);
     create.process(solrClient);
 
     CloudUtil.waitForState(cloudManager, "failed to create " + collectionName, collectionName,
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/IndexSizeTriggerTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/IndexSizeTriggerTest.java
index 5ce3628..3a8ac7b 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/IndexSizeTriggerTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/IndexSizeTriggerTest.java
@@ -147,7 +147,7 @@ public class IndexSizeTriggerTest extends SolrCloudTestCase {
   public void testTrigger() throws Exception {
     String collectionName = "testTrigger_collection";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
-        "conf", 2, 2).setMaxShardsPerNode(2);
+        "conf", 2, 2);
     create.process(solrClient);
     
     if (SPEED == 1) {
@@ -256,7 +256,7 @@ public class IndexSizeTriggerTest extends SolrCloudTestCase {
   public void testSplitIntegration() throws Exception {
     String collectionName = "testSplitIntegration_collection";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
-        "conf", 2, 2).setMaxShardsPerNode(2);
+        "conf", 2, 2);
     create.process(solrClient);
     
     if (SPEED == 1) {
@@ -379,7 +379,7 @@ public class IndexSizeTriggerTest extends SolrCloudTestCase {
   public void testMergeIntegration() throws Exception {
     String collectionName = "testMergeIntegration_collection";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
-        "conf", 2, 2).setMaxShardsPerNode(2);
+        "conf", 2, 2);
     create.process(solrClient);
     
     if (SPEED == 1) {
@@ -493,7 +493,7 @@ public class IndexSizeTriggerTest extends SolrCloudTestCase {
   public void testMaxOps() throws Exception {
     String collectionName = "testMaxOps_collection";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
-        "conf", 5, 2).setMaxShardsPerNode(10);
+        "conf", 5, 2);
     create.process(solrClient);
     
     CloudUtil.waitForState(cloudManager, "failed to create " + collectionName, collectionName,
@@ -636,7 +636,7 @@ public class IndexSizeTriggerTest extends SolrCloudTestCase {
   public void testSplitConfig() throws Exception {
     String collectionName = "testSplitConfig_collection";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
-        "conf", 2, 2).setMaxShardsPerNode(2);
+        "conf", 2, 2);
     create.process(solrClient);
     CloudUtil.waitForState(cloudManager, "failed to create " + collectionName, collectionName,
         CloudUtil.clusterShape(2, 2, false, true));
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/MetricTriggerIntegrationTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/MetricTriggerIntegrationTest.java
index da06a75..1177991 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/MetricTriggerIntegrationTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/MetricTriggerIntegrationTest.java
@@ -84,7 +84,7 @@ public class MetricTriggerIntegrationTest extends SolrCloudTestCase {
     String collectionName = "testMetricTrigger";
     CloudSolrClient solrClient = cluster.getSolrClient();
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
-        "conf", 2, 2).setMaxShardsPerNode(2);
+        "conf", 2, 2);
     create.process(solrClient);
     solrClient.setDefaultCollection(collectionName);
 
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/MetricTriggerTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/MetricTriggerTest.java
index 74ebca5..ce00d39 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/MetricTriggerTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/MetricTriggerTest.java
@@ -51,7 +51,6 @@ public class MetricTriggerTest extends SolrCloudTestCase {
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(DEFAULT_TEST_COLLECTION_NAME,
         "conf", 1, 1);
     CloudSolrClient solrClient = cluster.getSolrClient();
-    create.setMaxShardsPerNode(1);
     create.process(solrClient);
     cluster.waitForActiveCollection(DEFAULT_TEST_COLLECTION_NAME, 1, 1);
   }
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/ScheduledTriggerIntegrationTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/ScheduledTriggerIntegrationTest.java
index af6a761..80c095e 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/ScheduledTriggerIntegrationTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/ScheduledTriggerIntegrationTest.java
@@ -84,7 +84,7 @@ public class ScheduledTriggerIntegrationTest extends SolrCloudTestCase {
     // this collection will place 2 cores on 1st node and 1 core on 2nd node
     String collectionName = "testScheduledTrigger";
     CollectionAdminRequest.createCollection(collectionName, 1, 3)
-        .setMaxShardsPerNode(5).process(solrClient);
+        .process(solrClient);
     
     cluster.waitForActiveCollection(collectionName, 1, 3);
 
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/SearchRateTriggerTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/SearchRateTriggerTest.java
index d3b523d..32f6c25 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/SearchRateTriggerTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/SearchRateTriggerTest.java
@@ -99,11 +99,9 @@ public class SearchRateTriggerTest extends SolrCloudTestCase {
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(COLL1,
         "conf", 2, 2);
     CloudSolrClient solrClient = cluster.getSolrClient();
-    create.setMaxShardsPerNode(1);
     create.process(solrClient);
     create = CollectionAdminRequest.createCollection(COLL2,
         "conf", 2, 2);
-    create.setMaxShardsPerNode(1);
     create.process(solrClient);
 
     CloudUtil.waitForState(cloudManager, COLL1, 60, TimeUnit.SECONDS, clusterShape(2, 2));
@@ -236,7 +234,6 @@ public class SearchRateTriggerTest extends SolrCloudTestCase {
     TimeSource timeSource = cloudManager.getTimeSource();
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(COLL1,
         "conf", 2, 2);
-    create.setMaxShardsPerNode(1);
     create.process(solrClient);
     CloudUtil.waitForState(cloudManager, COLL1, 60, TimeUnit.SECONDS, clusterShape(2, 4));
 
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/SystemLogListenerTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/SystemLogListenerTest.java
index 483af93..b4cfcf9 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/SystemLogListenerTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/SystemLogListenerTest.java
@@ -127,7 +127,6 @@ public class SystemLogListenerTest extends SolrCloudTestCase {
 
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection("test",
         "conf",3, 2);
-    create.setMaxShardsPerNode(3);
     create.process(solrClient);
 
     waitForState("Timed out waiting for replicas of new collection to be active",
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java
index 18cc270..dc39d95 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java
@@ -412,7 +412,6 @@ public class TestPolicyCloud extends SolrCloudTestCase {
 
     final String collectionName = "addshard_with_reptype_using_policy";
     CollectionAdminRequest.createCollectionWithImplicitRouter(collectionName, "conf", "s1", 1, 1, 1)
-        .setMaxShardsPerNode(-1)
         .process(cluster.getSolrClient());
     
     cluster.waitForActiveCollection(collectionName, 1, 3);
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimComputePlanAction.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimComputePlanAction.java
index 4b7f4d3..5e53453 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimComputePlanAction.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimComputePlanAction.java
@@ -213,7 +213,6 @@ public class TestSimComputePlanAction extends SimSolrCloudTestCase {
 
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection("testNodeWithMultipleReplicasLost",
         "conf",2, 3);
-    create.setMaxShardsPerNode(2);
     create.process(solrClient);
 
     CloudUtil.waitForState(cluster, "Timed out waiting for replicas of new collection to be active",
@@ -298,7 +297,7 @@ public class TestSimComputePlanAction extends SimSolrCloudTestCase {
     assertAutoscalingUpdateComplete();
 
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection("testNodeAdded",
-        "conf",1, 4).setMaxShardsPerNode(-1);
+        "conf",1, 4);
     create.process(solrClient);
 
     CloudUtil.waitForState(cluster, "Timed out waiting for replicas of new collection to be active",
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimExecutePlanAction.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimExecutePlanAction.java
index 7c0f8bc..c143978 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimExecutePlanAction.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimExecutePlanAction.java
@@ -92,7 +92,6 @@ public class TestSimExecutePlanAction extends SimSolrCloudTestCase {
     String collectionName = "testExecute";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
         "conf", 1, 2);
-    create.setMaxShardsPerNode(1);
     create.process(solrClient);
 
     log.info("Collection ready after " + CloudUtil.waitForState(cluster, collectionName, 120, TimeUnit.SECONDS,
@@ -183,7 +182,6 @@ public class TestSimExecutePlanAction extends SimSolrCloudTestCase {
     String collectionName = "testIntegration";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
         "conf", 1, 2);
-    create.setMaxShardsPerNode(1);
     create.process(solrClient);
 
     CloudUtil.waitForState(cluster, "Timed out waiting for replicas of new collection to be active",
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimExtremeIndexing.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimExtremeIndexing.java
index 3ad4f72..a9bbe0c 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimExtremeIndexing.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimExtremeIndexing.java
@@ -96,7 +96,7 @@ public class TestSimExtremeIndexing extends SimSolrCloudTestCase {
   public void testScaleUp() throws Exception {
     String collectionName = "testScaleUp_collection";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
-        "conf", 2, 2).setMaxShardsPerNode(10);
+        "conf", 2, 2);
     create.process(solrClient);
 
     CloudUtil.waitForState(cluster, collectionName, 90, TimeUnit.SECONDS,
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimLargeCluster.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimLargeCluster.java
index adf2e67..b40c57e 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimLargeCluster.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimLargeCluster.java
@@ -202,7 +202,6 @@ public class TestSimLargeCluster extends SimSolrCloudTestCase {
     String collectionName = "testBasic";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
         "conf", 5, 5, 5, 5);
-    create.setMaxShardsPerNode(1);
     create.setAutoAddReplicas(false);
     create.setCreateNodeSet(String.join(",", nodes));
     create.process(solrClient);
@@ -273,12 +272,10 @@ public class TestSimLargeCluster extends SimSolrCloudTestCase {
       final int pReps = TestUtil.nextInt(random(), 2, 25 - numShards);
       final int repsPerShard = (nReps + tReps + pReps);
       final int totalCores = repsPerShard * numShards;
-      final int maxShardsPerNode = atLeast(2) + (totalCores / NUM_NODES);
       final String name = "large_sim_collection" + i;
       
       final CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection
         (name, "conf", numShards, nReps, tReps, pReps);
-      create.setMaxShardsPerNode(maxShardsPerNode);
       create.setAutoAddReplicas(false);
       
       log.info("CREATE: {}", create);
@@ -320,7 +317,6 @@ public class TestSimLargeCluster extends SimSolrCloudTestCase {
     String collectionName = "testNodeAdded";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
         "conf", NUM_NODES / 10, NUM_NODES / 8, NUM_NODES / 8, NUM_NODES / 8);
-    create.setMaxShardsPerNode(5);
     create.setAutoAddReplicas(false);
     create.process(solrClient);
 
@@ -529,7 +525,6 @@ public class TestSimLargeCluster extends SimSolrCloudTestCase {
     String collectionName = "testNodeLost";
     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
         "conf", NUM_NODES / 5, NUM_NODES / 10);
-    create.setMaxShardsPerNode(5);
     create.setAutoAddReplicas(false);
     create.process(solrClient);
 
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimPolicyCloud.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimPolicyCloud.java
index 36c94a0..9650f20 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimPolicyCloud.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimPolicyCloud.java
@@ -264,7 +264,6 @@ public class TestSimPolicyCloud extends SimSolrCloudTestCase {
         Utils.getObjectByPath(json, true, "cluster-policy[2]/port"));
 
     CollectionAdminRequest.createCollectionWithImplicitRouter("policiesTest", "conf", "s1", 1, 1, 1)
-        .setMaxShardsPerNode(-1)
         .process(solrClient);
     CloudUtil.waitForState(cluster, "Timeout waiting for collection to become active", "policiesTest",
         CloudUtil.clusterShape(1, 3, false, true));
diff --git a/solr/core/src/test/org/apache/solr/cloud/cdcr/BaseCdcrDistributedZkTest.java b/solr/core/src/test/org/apache/solr/cloud/cdcr/BaseCdcrDistributedZkTest.java
index a0013e7..585b4a6 100644
--- a/solr/core/src/test/org/apache/solr/cloud/cdcr/BaseCdcrDistributedZkTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/cdcr/BaseCdcrDistributedZkTest.java
@@ -75,7 +75,6 @@ import org.slf4j.LoggerFactory;
 import static org.apache.solr.cloud.api.collections.OverseerCollectionMessageHandler.CREATE_NODE_SET;
 import static org.apache.solr.cloud.api.collections.OverseerCollectionMessageHandler.NUM_SLICES;
 import static org.apache.solr.common.cloud.ZkStateReader.CLUSTER_PROPS;
-import static org.apache.solr.common.cloud.ZkStateReader.MAX_SHARDS_PER_NODE;
 import static org.apache.solr.common.cloud.ZkStateReader.REPLICATION_FACTOR;
 import static org.apache.solr.handler.admin.CoreAdminHandler.COMPLETED;
 import static org.apache.solr.handler.admin.CoreAdminHandler.RESPONSE_STATUS;
@@ -402,7 +401,6 @@ public class BaseCdcrDistributedZkTest extends AbstractDistribZkTestBase {
     try {
       // Create the target collection
       Map<String, List<Integer>> collectionInfos = new HashMap<>();
-      int maxShardsPerNode = 1;
 
       StringBuilder sb = new StringBuilder();
       for (String nodeName : collectionToNodeNames.get(name)) {
@@ -411,7 +409,7 @@ public class BaseCdcrDistributedZkTest extends AbstractDistribZkTestBase {
       }
       sb.deleteCharAt(sb.length() - 1);
 
-      createCollection(collectionInfos, name, shardCount, replicationFactor, maxShardsPerNode, client, sb.toString());
+      createCollection(collectionInfos, name, shardCount, replicationFactor, client, sb.toString());
     } finally {
       client.close();
     }
@@ -419,14 +417,13 @@ public class BaseCdcrDistributedZkTest extends AbstractDistribZkTestBase {
 
   private CollectionAdminResponse createCollection(Map<String, List<Integer>> collectionInfos,
                                                    String collectionName, int numShards, int replicationFactor,
-                                                   int maxShardsPerNode, SolrClient client, String createNodeSetStr)
+                                                   SolrClient client, String createNodeSetStr)
       throws SolrServerException, IOException {
     return createCollection(collectionInfos, collectionName,
         Utils.makeMap(
             NUM_SLICES, numShards,
             REPLICATION_FACTOR, replicationFactor,
-            CREATE_NODE_SET, createNodeSetStr,
-            MAX_SHARDS_PER_NODE, maxShardsPerNode),
+            CREATE_NODE_SET, createNodeSetStr),
         client, "conf1");
   }
 
diff --git a/solr/core/src/test/org/apache/solr/cloud/cdcr/CdcrBidirectionalTest.java b/solr/core/src/test/org/apache/solr/cloud/cdcr/CdcrBidirectionalTest.java
index 4c7f15f..52327cc 100644
--- a/solr/core/src/test/org/apache/solr/cloud/cdcr/CdcrBidirectionalTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/cdcr/CdcrBidirectionalTest.java
@@ -59,7 +59,6 @@ public class CdcrBidirectionalTest extends SolrTestCaseJ4 {
       cluster1.uploadConfigSet(configset("cdcr-cluster1"), "cdcr-cluster1");
       CollectionAdminRequest.createCollection("cdcr-cluster1", "cdcr-cluster1", 2, 1)
           .withProperty("solr.directoryFactory", "solr.StandardDirectoryFactory")
-          .setMaxShardsPerNode(2)
           .process(cluster1.getSolrClient());
       CloudSolrClient cluster1SolrClient = cluster1.getSolrClient();
       cluster1SolrClient.setDefaultCollection("cdcr-cluster1");
@@ -67,7 +66,6 @@ public class CdcrBidirectionalTest extends SolrTestCaseJ4 {
       cluster2.uploadConfigSet(configset("cdcr-cluster2"), "cdcr-cluster2");
       CollectionAdminRequest.createCollection("cdcr-cluster2", "cdcr-cluster2", 2, 1)
           .withProperty("solr.directoryFactory", "solr.StandardDirectoryFactory")
-          .setMaxShardsPerNode(2)
           .process(cluster2.getSolrClient());
       CloudSolrClient cluster2SolrClient = cluster2.getSolrClient();
       cluster2SolrClient.setDefaultCollection("cdcr-cluster2");
diff --git a/solr/core/src/test/org/apache/solr/cloud/cdcr/CdcrBootstrapTest.java b/solr/core/src/test/org/apache/solr/cloud/cdcr/CdcrBootstrapTest.java
index 70c9f26..f81b958 100644
--- a/solr/core/src/test/org/apache/solr/cloud/cdcr/CdcrBootstrapTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/cdcr/CdcrBootstrapTest.java
@@ -109,7 +109,6 @@ public class CdcrBootstrapTest extends SolrTestCaseJ4 {
         // setup the target cluster
         target.uploadConfigSet(configset("cdcr-target"), "cdcr-target");
         CollectionAdminRequest.createCollection("cdcr-target", "cdcr-target", 1, 2)
-            .setMaxShardsPerNode(2)
             .process(target.getSolrClient());
         target.waitForActiveCollection("cdcr-target", 1, 2);
         CloudSolrClient targetSolrClient = target.getSolrClient();
diff --git a/solr/core/src/test/org/apache/solr/cloud/hdfs/HdfsNNFailoverTest.java b/solr/core/src/test/org/apache/solr/cloud/hdfs/HdfsNNFailoverTest.java
index d793852..e41af60 100644
--- a/solr/core/src/test/org/apache/solr/cloud/hdfs/HdfsNNFailoverTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/hdfs/HdfsNNFailoverTest.java
@@ -67,7 +67,7 @@ public class HdfsNNFailoverTest extends BasicDistributedZkTest {
 
   @Test
   public void test() throws Exception {
-    createCollection(COLLECTION, "conf1", 1, 1, 1);
+    createCollection(COLLECTION, "conf1", 1, 1);
     
     waitForRecoveriesToFinish(COLLECTION, false);
     
diff --git a/solr/core/src/test/org/apache/solr/cloud/hdfs/HdfsWriteToMultipleCollectionsTest.java b/solr/core/src/test/org/apache/solr/cloud/hdfs/HdfsWriteToMultipleCollectionsTest.java
index 13531a4..c51a156 100644
--- a/solr/core/src/test/org/apache/solr/cloud/hdfs/HdfsWriteToMultipleCollectionsTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/hdfs/HdfsWriteToMultipleCollectionsTest.java
@@ -97,7 +97,7 @@ public class HdfsWriteToMultipleCollectionsTest extends BasicDistributedZkTest {
     int docCount = random().nextInt(1313) + 1;
     int cnt = random().nextInt(4) + 1;
     for (int i = 0; i < cnt; i++) {
-      createCollection(ACOLLECTION + i, "conf1", 2, 2, 9);
+      createCollection(ACOLLECTION + i, "conf1", 2, 2);
     }
     for (int i = 0; i < cnt; i++) {
       waitForRecoveriesToFinish(ACOLLECTION + i, false);
diff --git a/solr/core/src/test/org/apache/solr/cloud/hdfs/StressHdfsTest.java b/solr/core/src/test/org/apache/solr/cloud/hdfs/StressHdfsTest.java
index 04f9387..01437d4 100644
--- a/solr/core/src/test/org/apache/solr/cloud/hdfs/StressHdfsTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/hdfs/StressHdfsTest.java
@@ -107,7 +107,7 @@ public class StressHdfsTest extends BasicDistributedZkTest {
       Timer timer = new Timer();
       
       try {
-        createCollection(DELETE_DATA_DIR_COLLECTION, "conf1", 1, 1, 1);
+        createCollection(DELETE_DATA_DIR_COLLECTION, "conf1", 1, 1);
         
         waitForRecoveriesToFinish(DELETE_DATA_DIR_COLLECTION, false);
 
@@ -139,19 +139,16 @@ public class StressHdfsTest extends BasicDistributedZkTest {
     boolean overshard = random().nextBoolean();
     int rep;
     int nShards;
-    int maxReplicasPerNode;
     if (overshard) {
       nShards = getShardCount() * 2;
-      maxReplicasPerNode = 8;
       rep = 1;
     } else {
       nShards = getShardCount() / 2;
-      maxReplicasPerNode = 1;
       rep = 2;
       if (nShards == 0) nShards = 1;
     }
     
-    createCollection(DELETE_DATA_DIR_COLLECTION, "conf1", nShards, rep, maxReplicasPerNode);
+    createCollection(DELETE_DATA_DIR_COLLECTION, "conf1", nShards, rep);
 
     waitForRecoveriesToFinish(DELETE_DATA_DIR_COLLECTION, false);
     
diff --git a/solr/core/src/test/org/apache/solr/cloud/overseer/TestClusterStateMutator.java b/solr/core/src/test/org/apache/solr/cloud/overseer/TestClusterStateMutator.java
index 67e3244..7dafa1c 100644
--- a/solr/core/src/test/org/apache/solr/cloud/overseer/TestClusterStateMutator.java
+++ b/solr/core/src/test/org/apache/solr/cloud/overseer/TestClusterStateMutator.java
@@ -53,7 +53,6 @@ public class TestClusterStateMutator extends SolrTestCaseJ4 {
     DocCollection collection = cmd.collection;
     assertEquals("xyz", collection.getName());
     assertEquals(1, collection.getSlicesMap().size());
-    assertEquals(1, collection.getMaxShardsPerNode());
 
     ClusterState state = new ClusterState(-1, Collections.<String>emptySet(), Collections.singletonMap("xyz", collection));
     message = new ZkNodeProps(Utils.makeMap(
@@ -61,8 +60,7 @@ public class TestClusterStateMutator extends SolrTestCaseJ4 {
         "numShards", "2",
         "router.name", "implicit",
         "shards", "x,y",
-        "replicationFactor", "3",
-        "maxShardsPerNode", "4"
+        "replicationFactor", "3"
     ));
     cmd = mutator.createCollection(state, message);
     collection = cmd.collection;
@@ -74,7 +72,6 @@ public class TestClusterStateMutator extends SolrTestCaseJ4 {
     assertNull(collection.getSlicesMap().get("y").getRange());
     assertSame(Slice.State.ACTIVE, collection.getSlicesMap().get("x").getState());
     assertSame(Slice.State.ACTIVE, collection.getSlicesMap().get("y").getState());
-    assertEquals(4, collection.getMaxShardsPerNode());
     assertEquals(ImplicitDocRouter.class, collection.getRouter().getClass());
     assertNotNull(state.getCollectionOrNull("xyz")); // we still have the old collection
   }
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/AutoscalingHistoryHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/AutoscalingHistoryHandlerTest.java
index 935d2cd..ae1d708 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/AutoscalingHistoryHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/AutoscalingHistoryHandlerTest.java
@@ -93,7 +93,6 @@ public class AutoscalingHistoryHandlerTest extends SolrCloudTestCase {
     otherNodes.remove(systemCollNode);
     CollectionAdminRequest.createCollection(COLL_NAME, null, 1, 3)
         .setCreateNodeSet(String.join(",", otherNodes))
-        .setMaxShardsPerNode(3)
         .process(solrClient);
     cluster.waitForActiveCollection(COLL_NAME, 1, 3);
   }
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/DaemonStreamApiTest.java b/solr/core/src/test/org/apache/solr/handler/admin/DaemonStreamApiTest.java
index 480282e..34227ae 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/DaemonStreamApiTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/DaemonStreamApiTest.java
@@ -74,15 +74,12 @@ public class DaemonStreamApiTest extends SolrTestCaseJ4 {
     // create a single shard, single replica collection. This is necessary until SOLR-13245 since the commands
     // don't look in all replicas.
     CollectionAdminRequest.createCollection(SOURCE_COLL, CONF_NAME, 1, 1)
-        .setMaxShardsPerNode(1)
         .process(cluster.getSolrClient());
 
     CollectionAdminRequest.createCollection(TARGET_COLL, CONF_NAME, 1, 1)
-        .setMaxShardsPerNode(1)
         .process(cluster.getSolrClient());
 
     CollectionAdminRequest.createCollection(CHECKPOINT_COLL, CONF_NAME, 1, 1)
-        .setMaxShardsPerNode(1)
         .process(cluster.getSolrClient());
 
     for (int idx = 0; idx < numDaemons; ++idx) {
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/HealthCheckHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/HealthCheckHandlerTest.java
index 7d517f2..2a0f5e9 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/HealthCheckHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/HealthCheckHandlerTest.java
@@ -195,7 +195,7 @@ public class HealthCheckHandlerTest extends SolrCloudTestCase {
     //  node2: collection1 -> shard1: [ replica2 (active), replica4 (down) ]
     //         collection2 -> shard1: [ replica1 (active) ]
     try (ZkStateReader reader = ClusterStateMockUtil.buildClusterState(
-        "csrr2rDr2Dcsr2FrR", 1, 1, "node1", "node2")) {
+        "csrr2rDr2Dcsr2FrR", 1, "node1", "node2")) {
       ClusterState clusterState = reader.getClusterState();
 
       // Node 1
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/IndexSizeEstimatorTest.java b/solr/core/src/test/org/apache/solr/handler/admin/IndexSizeEstimatorTest.java
index 2ad9b87..654af22 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/IndexSizeEstimatorTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/IndexSizeEstimatorTest.java
@@ -75,7 +75,7 @@ public class IndexSizeEstimatorTest extends SolrCloudTestCase {
         .configure();
     solrClient = cluster.getSolrClient();
     CollectionAdminRequest.createCollection(collection, "conf", 2, 2)
-        .setMaxShardsPerNode(2).process(solrClient);
+        .process(solrClient);
     cluster.waitForActiveCollection(collection, 2, 4);
     SolrInputDocument lastDoc = addDocs(collection, NUM_DOCS);
     HashSet<String> docFields = new HashSet<>(lastDoc.keySet());
diff --git a/solr/core/src/test/org/apache/solr/handler/component/CustomHighlightComponentTest.java b/solr/core/src/test/org/apache/solr/handler/component/CustomHighlightComponentTest.java
index 0dd9ee5..ae43146 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/CustomHighlightComponentTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/CustomHighlightComponentTest.java
@@ -109,8 +109,7 @@ public class CustomHighlightComponentTest extends SolrCloudTestCase {
     // ... and shard/replica/node numbers
     final int numShards = 3;
     final int numReplicas = 2;
-    final int maxShardsPerNode = 2;
-    final int nodeCount = (numShards*numReplicas + (maxShardsPerNode-1))/maxShardsPerNode;
+    final int nodeCount = numShards*numReplicas;
 
     // create and configure cluster
     configureCluster(nodeCount)
@@ -120,7 +119,6 @@ public class CustomHighlightComponentTest extends SolrCloudTestCase {
     // create an empty collection
     CollectionAdminRequest
     .createCollection(COLLECTION, "conf", numShards, numReplicas)
-    .setMaxShardsPerNode(maxShardsPerNode)
     .processAndWait(cluster.getSolrClient(), DEFAULT_TIMEOUT);
     AbstractDistribZkTestBase.waitForRecoveriesToFinish(COLLECTION, cluster.getSolrClient().getZkStateReader(), false, true, DEFAULT_TIMEOUT);
   }
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 6818676..78182e9 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
@@ -62,7 +62,6 @@ public class DistributedQueryComponentOptimizationTest extends SolrCloudTestCase
         .configure();
 
     CollectionAdminRequest.createCollection(COLLECTION, "conf", 3, 1)
-        .setMaxShardsPerNode(1)
         .processAndWait(cluster.getSolrClient(), DEFAULT_TIMEOUT);
     cluster.getSolrClient().waitForState(COLLECTION, DEFAULT_TIMEOUT, TimeUnit.SECONDS,
         (n, c) -> DocCollection.isFullyActive(n, c, sliceCount, 1));
diff --git a/solr/core/src/test/org/apache/solr/handler/component/ShardsWhitelistTest.java b/solr/core/src/test/org/apache/solr/handler/component/ShardsWhitelistTest.java
index 8aea6eb..5061582 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/ShardsWhitelistTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/ShardsWhitelistTest.java
@@ -70,7 +70,6 @@ public class ShardsWhitelistTest extends MultiSolrCloudTestCase {
 
     numShards = 2; // +random().nextInt(2);
     numReplicas = 1; // +random().nextInt(2);
-    maxShardsPerNode = 1; // +random().nextInt(2);
     nodesPerCluster = (numShards * numReplicas + (maxShardsPerNode - 1)) / maxShardsPerNode;
 
     final StringBuilder sb = new StringBuilder();
@@ -98,7 +97,7 @@ public class ShardsWhitelistTest extends MultiSolrCloudTestCase {
             return nodesPerCluster;
           }
         },
-        new DefaultClusterInitFunction(numShards, numReplicas, maxShardsPerNode) {
+        new DefaultClusterInitFunction(numShards, numReplicas) {
           @Override
           public void accept(String clusterId, MiniSolrCloudCluster cluster) {
             appendClusterNodes(sb, ",", cluster);
diff --git a/solr/core/src/test/org/apache/solr/handler/component/TestTrackingShardHandlerFactory.java b/solr/core/src/test/org/apache/solr/handler/component/TestTrackingShardHandlerFactory.java
index 6a87bd7..82bbaa5 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/TestTrackingShardHandlerFactory.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/TestTrackingShardHandlerFactory.java
@@ -65,7 +65,7 @@ public class TestTrackingShardHandlerFactory extends AbstractFullDistribZkTestBa
       assertSame(trackingQueue, trackingShardHandlerFactory.getTrackingQueue());
     }
 
-    createCollection(collectionName, "conf1", 2, 1, 1);
+    createCollection(collectionName, "conf1", 2, 1);
 
     waitForRecoveriesToFinish(collectionName, true);
 
diff --git a/solr/core/src/test/org/apache/solr/metrics/reporters/SolrJmxReporterCloudTest.java b/solr/core/src/test/org/apache/solr/metrics/reporters/SolrJmxReporterCloudTest.java
index 3da4b14..6c634b0 100644
--- a/solr/core/src/test/org/apache/solr/metrics/reporters/SolrJmxReporterCloudTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/reporters/SolrJmxReporterCloudTest.java
@@ -58,7 +58,6 @@ public class SolrJmxReporterCloudTest extends SolrCloudTestCase {
         .addConfig("conf", configset("cloud-minimal"))
         .configure();
     CollectionAdminRequest.createCollection(COLLECTION, "conf", 2, 1)
-        .setMaxShardsPerNode(2)
         .process(cluster.getSolrClient());
   }
   @AfterClass
diff --git a/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrCloudReportersTest.java b/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrCloudReportersTest.java
index ef6d208..5c7be6f 100644
--- a/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrCloudReportersTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrCloudReportersTest.java
@@ -67,7 +67,6 @@ public class SolrCloudReportersTest extends SolrCloudTestCase {
     cluster.uploadConfigSet(Paths.get(TEST_PATH().toString(), "configsets", "minimal", "conf"), "test");
 
     CollectionAdminRequest.createCollection("test_collection", "test", 2, 2)
-        .setMaxShardsPerNode(4)
         .process(cluster.getSolrClient());
     cluster.waitForActiveCollection("test_collection", 2, 4);
     
@@ -169,7 +168,6 @@ public class SolrCloudReportersTest extends SolrCloudTestCase {
     cluster.uploadConfigSet(Paths.get(TEST_PATH().toString(), "configsets", "minimal", "conf"), "test");
 
     CollectionAdminRequest.createCollection("test_collection", "test", 2, 2)
-        .setMaxShardsPerNode(4)
         .process(cluster.getSolrClient());
     cluster.waitForActiveCollection("test_collection", 2, 4);
     waitForState("Expected test_collection with 2 shards and 2 replicas", "test_collection", clusterShape(2, 4));
diff --git a/solr/core/src/test/org/apache/solr/pkg/TestPackages.java b/solr/core/src/test/org/apache/solr/pkg/TestPackages.java
index 55f3c1b..cc47b2b 100644
--- a/solr/core/src/test/org/apache/solr/pkg/TestPackages.java
+++ b/solr/core/src/test/org/apache/solr/pkg/TestPackages.java
@@ -124,7 +124,6 @@ public class TestPackages extends SolrCloudTestCase {
 
       CollectionAdminRequest
           .createCollection(COLLECTION_NAME, "conf", 2, 2)
-          .setMaxShardsPerNode(100)
           .process(cluster.getSolrClient());
       cluster.waitForActiveCollection(COLLECTION_NAME, 2, 4);
 
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 883ebfd..fcee288 100644
--- a/solr/core/src/test/org/apache/solr/schema/ManagedSchemaRoundRobinCloudTest.java
+++ b/solr/core/src/test/org/apache/solr/schema/ManagedSchemaRoundRobinCloudTest.java
@@ -46,7 +46,6 @@ public class ManagedSchemaRoundRobinCloudTest extends SolrCloudTestCase {
     System.setProperty("managed.schema.mutable", "true");
     configureCluster(NUM_SHARDS).addConfig(CONFIG, configset(CONFIG)).configure();
     CollectionAdminRequest.createCollection(COLLECTION, CONFIG, NUM_SHARDS, 1)
-        .setMaxShardsPerNode(1)
         .process(cluster.getSolrClient());
     cluster.getSolrClient().waitForState(COLLECTION, DEFAULT_TIMEOUT, TimeUnit.SECONDS,
         (n, c) -> DocCollection.isFullyActive(n, c, NUM_SHARDS, 1));
diff --git a/solr/core/src/test/org/apache/solr/schema/PreAnalyzedFieldManagedSchemaCloudTest.java b/solr/core/src/test/org/apache/solr/schema/PreAnalyzedFieldManagedSchemaCloudTest.java
index 04e1be0..b350883 100644
--- a/solr/core/src/test/org/apache/solr/schema/PreAnalyzedFieldManagedSchemaCloudTest.java
+++ b/solr/core/src/test/org/apache/solr/schema/PreAnalyzedFieldManagedSchemaCloudTest.java
@@ -40,7 +40,6 @@ public class PreAnalyzedFieldManagedSchemaCloudTest extends SolrCloudTestCase {
   public static void setupCluster() throws Exception {
     configureCluster(2).addConfig(CONFIG, configset(CONFIG)).configure();
     CollectionAdminRequest.createCollection(COLLECTION, CONFIG, 2, 1)
-        .setMaxShardsPerNode(1)
         .process(cluster.getSolrClient());
     cluster.getSolrClient().waitForState(COLLECTION, DEFAULT_TIMEOUT, TimeUnit.SECONDS,
         (n, c) -> DocCollection.isFullyActive(n, c, 2, 1));
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 7cc1501..b4c2129 100644
--- a/solr/core/src/test/org/apache/solr/schema/SchemaApiFailureTest.java
+++ b/solr/core/src/test/org/apache/solr/schema/SchemaApiFailureTest.java
@@ -38,7 +38,6 @@ public class SchemaApiFailureTest extends SolrCloudTestCase {
   public static void setupCluster() throws Exception {
     configureCluster(1).configure();
     CollectionAdminRequest.createCollection(COLLECTION, 2, 1) // _default configset
-        .setMaxShardsPerNode(2)
         .process(cluster.getSolrClient());
     cluster.getSolrClient().waitForState(COLLECTION, DEFAULT_TIMEOUT, TimeUnit.SECONDS,
         (n, c) -> DocCollection.isFullyActive(n, c, 2, 1));
diff --git a/solr/core/src/test/org/apache/solr/search/CurrencyRangeFacetCloudTest.java b/solr/core/src/test/org/apache/solr/search/CurrencyRangeFacetCloudTest.java
index 2afe497..1f8101c 100644
--- a/solr/core/src/test/org/apache/solr/search/CurrencyRangeFacetCloudTest.java
+++ b/solr/core/src/test/org/apache/solr/search/CurrencyRangeFacetCloudTest.java
@@ -66,7 +66,6 @@ public class CurrencyRangeFacetCloudTest extends SolrCloudTestCase {
     
     final int numShards = TestUtil.nextInt(random(),1,5);
     final int numReplicas = 1;
-    final int maxShardsPerNode = 1;
     final int nodeCount = numShards * numReplicas;
 
     configureCluster(nodeCount)
@@ -74,7 +73,6 @@ public class CurrencyRangeFacetCloudTest extends SolrCloudTestCase {
       .configure();
 
     assertEquals(0, (CollectionAdminRequest.createCollection(COLLECTION, CONF, numShards, numReplicas)
-                     .setMaxShardsPerNode(maxShardsPerNode)
                      .setProperties(Collections.singletonMap(CoreAdminParams.CONFIG, "solrconfig-minimal.xml"))
                      .process(cluster.getSolrClient())).getStatus());
     
diff --git a/solr/core/src/test/org/apache/solr/search/facet/RangeFacetCloudTest.java b/solr/core/src/test/org/apache/solr/search/facet/RangeFacetCloudTest.java
index f9419de..2dd3677 100644
--- a/solr/core/src/test/org/apache/solr/search/facet/RangeFacetCloudTest.java
+++ b/solr/core/src/test/org/apache/solr/search/facet/RangeFacetCloudTest.java
@@ -84,7 +84,6 @@ public class RangeFacetCloudTest extends SolrCloudTestCase {
   public static void setupCluster() throws Exception {
     final int numShards = TestUtil.nextInt(random(),1,5);
     final int numReplicas = 1;
-    final int maxShardsPerNode = 1;
     final int nodeCount = numShards * numReplicas;
 
     configureCluster(nodeCount)
@@ -92,7 +91,6 @@ public class RangeFacetCloudTest extends SolrCloudTestCase {
       .configure();
 
     assertEquals(0, (CollectionAdminRequest.createCollection(COLLECTION, CONF, numShards, numReplicas)
-                     .setMaxShardsPerNode(maxShardsPerNode)
                      .setProperties(Collections.singletonMap(CoreAdminParams.CONFIG, "solrconfig-minimal.xml"))
                      .process(cluster.getSolrClient())).getStatus());
     
diff --git a/solr/core/src/test/org/apache/solr/search/stats/TestDistribIDF.java b/solr/core/src/test/org/apache/solr/search/stats/TestDistribIDF.java
index 205b30b..4fc1f3a 100644
--- a/solr/core/src/test/org/apache/solr/search/stats/TestDistribIDF.java
+++ b/solr/core/src/test/org/apache/solr/search/stats/TestDistribIDF.java
@@ -197,12 +197,10 @@ public class TestDistribIDF extends SolrTestCaseJ4 {
     CollectionAdminResponse response;
     if (router.equals(ImplicitDocRouter.NAME)) {
       CollectionAdminRequest.Create create = CollectionAdminRequest.createCollectionWithImplicitRouter(name,config,"a,b,c",1);
-      create.setMaxShardsPerNode(1);
       response = create.process(solrCluster.getSolrClient());
       solrCluster.waitForActiveCollection(name, 3, 3);
     } else {
       CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(name,config,2,1);
-      create.setMaxShardsPerNode(1);
       response = create.process(solrCluster.getSolrClient());
       solrCluster.waitForActiveCollection(name, 2, 2);
     }
diff --git a/solr/core/src/test/org/apache/solr/security/BasicAuthOnSingleNodeTest.java b/solr/core/src/test/org/apache/solr/security/BasicAuthOnSingleNodeTest.java
index bcfe608..629437b 100644
--- a/solr/core/src/test/org/apache/solr/security/BasicAuthOnSingleNodeTest.java
+++ b/solr/core/src/test/org/apache/solr/security/BasicAuthOnSingleNodeTest.java
@@ -41,7 +41,6 @@ public class BasicAuthOnSingleNodeTest extends SolrCloudAuthTestCase {
         .withSecurityJson(STD_CONF)
         .configure();
     CollectionAdminRequest.createCollection(COLLECTION, "conf", 4, 1)
-        .setMaxShardsPerNode(100)
         .setBasicAuthCredentials("solr", "solr")
         .process(cluster.getSolrClient());
     cluster.waitForActiveCollection(COLLECTION, 4, 4);
diff --git a/solr/core/src/test/org/apache/solr/servlet/HttpSolrCallGetCoreTest.java b/solr/core/src/test/org/apache/solr/servlet/HttpSolrCallGetCoreTest.java
index 4f94388..34eb344 100644
--- a/solr/core/src/test/org/apache/solr/servlet/HttpSolrCallGetCoreTest.java
+++ b/solr/core/src/test/org/apache/solr/servlet/HttpSolrCallGetCoreTest.java
@@ -48,7 +48,6 @@ public class HttpSolrCallGetCoreTest extends SolrCloudTestCase {
 
     CollectionAdminRequest
         .createCollection(COLLECTION, "config", NUM_SHARD, REPLICA_FACTOR)
-        .setMaxShardsPerNode(NUM_SHARD * REPLICA_FACTOR)
         .process(cluster.getSolrClient());
     AbstractDistribZkTestBase.waitForRecoveriesToFinish(COLLECTION, cluster.getSolrClient().getZkStateReader(),
         false, true, 30);
diff --git a/solr/core/src/test/org/apache/solr/update/TestInPlaceUpdateWithRouteField.java b/solr/core/src/test/org/apache/solr/update/TestInPlaceUpdateWithRouteField.java
index fc85fad..5c154b4 100644
--- a/solr/core/src/test/org/apache/solr/update/TestInPlaceUpdateWithRouteField.java
+++ b/solr/core/src/test/org/apache/solr/update/TestInPlaceUpdateWithRouteField.java
@@ -73,7 +73,6 @@ public class TestInPlaceUpdateWithRouteField extends SolrCloudTestCase {
     boolean implicit = random().nextBoolean();
     String routerName = implicit ? "implicit":"compositeId";
     Create createCmd = CollectionAdminRequest.createCollection(COLLECTION, configName, shards.length, replicas)
-        .setMaxShardsPerNode(shards.length * replicas)
         .setProperties(collectionProperties)
         .setRouterName(routerName)
         .setRouterField("shardName");
diff --git a/solr/core/src/test/org/apache/solr/update/processor/AtomicUpdateRemovalJavabinTest.java b/solr/core/src/test/org/apache/solr/update/processor/AtomicUpdateRemovalJavabinTest.java
index 61a94f5..c028051 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/AtomicUpdateRemovalJavabinTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/AtomicUpdateRemovalJavabinTest.java
@@ -45,7 +45,6 @@ public class AtomicUpdateRemovalJavabinTest extends SolrCloudTestCase {
   private static final String COLLECTION = "collection1";
   private static final int NUM_SHARDS = 1;
   private static final int NUM_REPLICAS = 1;
-  private static final int MAX_SHARDS_PER_NODE = 1;
   private static final Date DATE_1 = new Date();
   private static final Date DATE_2 = Date.from(Instant.ofEpochSecond(1554243909));
 
@@ -56,7 +55,6 @@ public class AtomicUpdateRemovalJavabinTest extends SolrCloudTestCase {
         .configure();
 
     CollectionAdminRequest.createCollection(COLLECTION, "conf", NUM_SHARDS, NUM_REPLICAS)
-        .setMaxShardsPerNode(MAX_SHARDS_PER_NODE)
         .process(cluster.getSolrClient());
 
     cluster.waitForActiveCollection(COLLECTION, 1, 1);
diff --git a/solr/core/src/test/org/apache/solr/update/processor/CategoryRoutedAliasUpdateProcessorTest.java b/solr/core/src/test/org/apache/solr/update/processor/CategoryRoutedAliasUpdateProcessorTest.java
index b885f28..28f5703 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/CategoryRoutedAliasUpdateProcessorTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/CategoryRoutedAliasUpdateProcessorTest.java
@@ -135,8 +135,7 @@ public class CategoryRoutedAliasUpdateProcessorTest extends RoutedAliasUpdatePro
     assertTrue("ConfigNames should include :" + expectedConfigSetNames, retrievedConfigSetNames.containsAll(expectedConfigSetNames));
 
     CollectionAdminRequest.createCategoryRoutedAlias(getAlias(), categoryField, 20,
-        CollectionAdminRequest.createCollection("_unused_", configName, 1, 1)
-            .setMaxShardsPerNode(12))
+        CollectionAdminRequest.createCollection("_unused_", configName, 1, 1))
         .process(solrClient);
     addDocsAndCommit(true,
         newDoc(somethingInChinese),
@@ -190,8 +189,7 @@ public class CategoryRoutedAliasUpdateProcessorTest extends RoutedAliasUpdatePro
     assertTrue("ConfigNames should include :" + expectedConfigSetNames, retrievedConfigSetNames.containsAll(expectedConfigSetNames));
 
     CollectionAdminRequest.createCategoryRoutedAlias(getAlias(), categoryField, 20,
-        CollectionAdminRequest.createCollection("_unused_", configName, 1, 1)
-            .setMaxShardsPerNode(2))
+        CollectionAdminRequest.createCollection("_unused_", configName, 1, 1))
         .process(solrClient);
 
     // now we index a document
@@ -256,8 +254,7 @@ public class CategoryRoutedAliasUpdateProcessorTest extends RoutedAliasUpdatePro
     assertTrue("ConfigNames should include :" + expectedConfigSetNames, retrievedConfigSetNames.containsAll(expectedConfigSetNames));
 
     CollectionAdminRequest.createCategoryRoutedAlias(getAlias(), categoryField, maxCardinality,
-        CollectionAdminRequest.createCollection("_unused_", configName, 1, 1)
-            .setMaxShardsPerNode(2))
+        CollectionAdminRequest.createCollection("_unused_", configName, 1, 1))
         .setMustMatch(mustMatchRegex)
         .process(solrClient);
 
@@ -296,8 +293,7 @@ public class CategoryRoutedAliasUpdateProcessorTest extends RoutedAliasUpdatePro
     assertTrue("ConfigNames should include :" + expectedConfigSetNames, retrievedConfigSetNames.containsAll(expectedConfigSetNames));
 
     SolrException e = expectThrows(SolrException.class, () -> CollectionAdminRequest.createCategoryRoutedAlias(getAlias(), categoryField, maxCardinality,
-        CollectionAdminRequest.createCollection("_unused_", configName, 1, 1)
-            .setMaxShardsPerNode(2))
+        CollectionAdminRequest.createCollection("_unused_", configName, 1, 1))
         .setMustMatch(mustMatchRegex)
         .process(solrClient)
     );
@@ -330,8 +326,7 @@ public class CategoryRoutedAliasUpdateProcessorTest extends RoutedAliasUpdatePro
     assertTrue("ConfigNames should include :" + expectedConfigSetNames, retrievedConfigSetNames.containsAll(expectedConfigSetNames));
 
     CollectionAdminRequest.createCategoryRoutedAlias(getAlias(), categoryField, maxCardinality,
-        CollectionAdminRequest.createCollection("_unused_", configName, 1, 1)
-            .setMaxShardsPerNode(2))
+        CollectionAdminRequest.createCollection("_unused_", configName, 1, 1))
         .process(solrClient);
 
     // now we index a document
@@ -369,8 +364,7 @@ public class CategoryRoutedAliasUpdateProcessorTest extends RoutedAliasUpdatePro
     final int numShards = 1 + random().nextInt(4);
     final int numReplicas = 1 + random().nextInt(3);
     CollectionAdminRequest.createCategoryRoutedAlias(getAlias(), categoryField, 20,
-        CollectionAdminRequest.createCollection("_unused_", configName, numShards, numReplicas)
-            .setMaxShardsPerNode(numReplicas*numShards))
+        CollectionAdminRequest.createCollection("_unused_", configName, numShards, numReplicas))
         .process(solrClient);
 
     // cause some collections to be created
diff --git a/solr/core/src/test/org/apache/solr/update/processor/DimensionalRoutedAliasUpdateProcessorTest.java b/solr/core/src/test/org/apache/solr/update/processor/DimensionalRoutedAliasUpdateProcessorTest.java
index f48f1f5..9c13ba0 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/DimensionalRoutedAliasUpdateProcessorTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/DimensionalRoutedAliasUpdateProcessorTest.java
@@ -97,8 +97,7 @@ public class DimensionalRoutedAliasUpdateProcessorTest extends RoutedAliasUpdate
     CreateCategoryRoutedAlias CRA_Dim = createCategoryRoutedAlias(null, getCatField(), 20, null);
 
     CollectionAdminRequest.DimensionalRoutedAlias dra = CollectionAdminRequest.createDimensionalRoutedAlias(getAlias(),
-        CollectionAdminRequest.createCollection("_unused_", configName, 2, 2)
-            .setMaxShardsPerNode(2), TRA_Dim,  CRA_Dim);
+        CollectionAdminRequest.createCollection("_unused_", configName, 2, 2), TRA_Dim,  CRA_Dim);
 
     SolrParams params = dra.getParams();
     assertEquals("Dimensional[TIME,CATEGORY]", params.get(CollectionAdminRequest.RoutedAliasAdminRequest.ROUTER_TYPE_NAME));
@@ -358,8 +357,7 @@ public class DimensionalRoutedAliasUpdateProcessorTest extends RoutedAliasUpdate
     CreateCategoryRoutedAlias CRA_Dim = createCategoryRoutedAlias(null, getCatField(), 20, null);
 
     CollectionAdminRequest.DimensionalRoutedAlias dra = CollectionAdminRequest.createDimensionalRoutedAlias(getAlias(),
-        CollectionAdminRequest.createCollection("_unused_", configName, 2, 2)
-            .setMaxShardsPerNode(2), CRA_Dim, TRA_Dim);
+        CollectionAdminRequest.createCollection("_unused_", configName, 2, 2), CRA_Dim, TRA_Dim);
 
     SolrParams params = dra.getParams();
     assertEquals("Dimensional[CATEGORY,TIME]", params.get(CollectionAdminRequest.RoutedAliasAdminRequest.ROUTER_TYPE_NAME));
diff --git a/solr/core/src/test/org/apache/solr/update/processor/TimeRoutedAliasUpdateProcessorTest.java b/solr/core/src/test/org/apache/solr/update/processor/TimeRoutedAliasUpdateProcessorTest.java
index 835aced..e4f2bf7 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/TimeRoutedAliasUpdateProcessorTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/TimeRoutedAliasUpdateProcessorTest.java
@@ -113,7 +113,6 @@ public class TimeRoutedAliasUpdateProcessorTest extends RoutedAliasUpdateProcess
     //  This tests we may pre-create the collection and it's acceptable.
     final String col23rd = alias + TRA + "2017-10-23";
     CollectionAdminRequest.createCollection(col23rd, configName, 2, 2)
-        .setMaxShardsPerNode(2)
         .withProperty(ROUTED_ALIAS_NAME_CORE_PROP, alias)
         .process(solrClient);
 
@@ -128,8 +127,7 @@ public class TimeRoutedAliasUpdateProcessorTest extends RoutedAliasUpdateProcess
     assertTrue("ConfigNames should include :" + expectedConfigSetNames, retrievedConfigSetNames.containsAll(expectedConfigSetNames));
 
     CollectionAdminRequest.createTimeRoutedAlias(alias, "2017-10-23T00:00:00Z", "+1DAY", getTimeField(),
-        CollectionAdminRequest.createCollection("_unused_", configName, 1, 1)
-            .setMaxShardsPerNode(2))
+        CollectionAdminRequest.createCollection("_unused_", configName, 1, 1))
         .process(solrClient);
 
     // now we index a document
@@ -239,8 +237,7 @@ public class TimeRoutedAliasUpdateProcessorTest extends RoutedAliasUpdateProcess
     final int numShards = 1 + random().nextInt(4);
     final int numReplicas = 1 + random().nextInt(3);
     CollectionAdminRequest.createTimeRoutedAlias(alias, "2017-10-23T00:00:00Z", "+1DAY", getTimeField(),
-        CollectionAdminRequest.createCollection("_unused_", configName, numShards, numReplicas)
-            .setMaxShardsPerNode(numReplicas))
+        CollectionAdminRequest.createCollection("_unused_", configName, numShards, numReplicas))
         .process(solrClient);
 
     // cause some collections to be created
@@ -286,14 +283,14 @@ public class TimeRoutedAliasUpdateProcessorTest extends RoutedAliasUpdateProcess
     final int numShards = 1 ;
     final int numReplicas = 1 ;
     CollectionAdminRequest.createTimeRoutedAlias(alias, "2017-10-23T00:00:00Z", "+1DAY", getTimeField(),
-        CollectionAdminRequest.createCollection("_unused_", configName, numShards, numReplicas)
-            .setMaxShardsPerNode(numReplicas)).setPreemptiveCreateWindow("3HOUR")
+        CollectionAdminRequest.createCollection("_unused_", configName, numShards, numReplicas))
+        .setPreemptiveCreateWindow("3HOUR")
         .process(solrClient);
 
     // needed to verify that preemptive creation in one alias doesn't inhibit preemptive creation in another
     CollectionAdminRequest.createTimeRoutedAlias(alias2, "2017-10-23T00:00:00Z", "+1DAY", getTimeField(),
-        CollectionAdminRequest.createCollection("_unused_", configName, numShards, numReplicas)
-            .setMaxShardsPerNode(numReplicas)).setPreemptiveCreateWindow("3HOUR")
+        CollectionAdminRequest.createCollection("_unused_", configName, numShards, numReplicas))
+        .setPreemptiveCreateWindow("3HOUR")
         .process(solrClient);
 
     addOneDocSynchCreation(numShards, alias);
@@ -374,8 +371,8 @@ public class TimeRoutedAliasUpdateProcessorTest extends RoutedAliasUpdateProcess
     // Start and stop some cores that have TRA's... 2x2 used to ensure every jetty gets at least one
 
     CollectionAdminRequest.createTimeRoutedAlias(getSaferTestName() + "foo", "2017-10-23T00:00:00Z", "+1DAY", getTimeField(),
-        CollectionAdminRequest.createCollection("_unused_", configName, 2, 2)
-            .setMaxShardsPerNode(numReplicas)).setPreemptiveCreateWindow("3HOUR")
+        CollectionAdminRequest.createCollection("_unused_", configName, 2, 2))
+        .setPreemptiveCreateWindow("3HOUR")
         .process(solrClient);
 
     waitColAndAlias(getSaferTestName() + "foo", TRA, "2017-10-23",2);
@@ -733,8 +730,7 @@ public class TimeRoutedAliasUpdateProcessorTest extends RoutedAliasUpdateProcess
     final int numShards = 1 + random().nextInt(4);
     final int numReplicas = 1 + random().nextInt(3);
     CollectionAdminRequest.createTimeRoutedAlias(alias, "2019-09-14T03:00:00Z/DAY", "+1DAY", getTimeField(),
-        CollectionAdminRequest.createCollection("_unused_", configName, numShards, numReplicas)
-            .setMaxShardsPerNode(numReplicas))
+        CollectionAdminRequest.createCollection("_unused_", configName, numShards, numReplicas))
         .process(solrClient);
 
     aliasUpdate.await();
@@ -924,8 +920,8 @@ public class TimeRoutedAliasUpdateProcessorTest extends RoutedAliasUpdateProcess
     final int numShards = 1 ;
     final int numReplicas = 1 ;
     CollectionAdminRequest.createTimeRoutedAlias(alias, "2017-10-23T00:00:00Z", "+1DAY", getTimeField(),
-        CollectionAdminRequest.createCollection("_unused_", configName, numShards, numReplicas)
-            .setMaxShardsPerNode(numReplicas)).setPreemptiveCreateWindow("3HOUR").setAutoDeleteAge("/DAY-3DAYS")
+        CollectionAdminRequest.createCollection("_unused_", configName, numShards, numReplicas))
+        .setPreemptiveCreateWindow("3HOUR").setAutoDeleteAge("/DAY-3DAYS")
         .process(solrClient);
 
     // now create collections that look like the legacy (pre __TRA__) names...
diff --git a/solr/core/src/test/org/apache/solr/util/TestExportTool.java b/solr/core/src/test/org/apache/solr/util/TestExportTool.java
index 7b34958..a69d733 100644
--- a/solr/core/src/test/org/apache/solr/util/TestExportTool.java
+++ b/solr/core/src/test/org/apache/solr/util/TestExportTool.java
@@ -56,7 +56,6 @@ public class TestExportTool extends SolrCloudTestCase {
     try {
       CollectionAdminRequest
           .createCollection(COLLECTION_NAME, "conf", 2, 1)
-          .setMaxShardsPerNode(100)
           .process(cluster.getSolrClient());
       cluster.waitForActiveCollection(COLLECTION_NAME, 2, 2);
 
@@ -131,7 +130,6 @@ public class TestExportTool extends SolrCloudTestCase {
     try {
       CollectionAdminRequest
           .createCollection(COLLECTION_NAME, "conf", 8, 1)
-          .setMaxShardsPerNode(10)
           .process(cluster.getSolrClient());
       cluster.waitForActiveCollection(COLLECTION_NAME, 8, 8);
 
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java b/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
index 7cea4cf..be419fb 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
@@ -59,7 +59,6 @@ import static org.apache.solr.client.solrj.cloud.autoscaling.Policy.POLICY;
 import static org.apache.solr.common.cloud.DocCollection.RULE;
 import static org.apache.solr.common.cloud.DocCollection.SNITCH;
 import static org.apache.solr.common.cloud.ZkStateReader.AUTO_ADD_REPLICAS;
-import static org.apache.solr.common.cloud.ZkStateReader.MAX_SHARDS_PER_NODE;
 import static org.apache.solr.common.cloud.ZkStateReader.NRT_REPLICAS;
 import static org.apache.solr.common.cloud.ZkStateReader.PULL_REPLICAS;
 import static org.apache.solr.common.cloud.ZkStateReader.READ_ONLY;
@@ -88,7 +87,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
       RULE,
       SNITCH,
       REPLICATION_FACTOR,
-      MAX_SHARDS_PER_NODE,
       AUTO_ADD_REPLICAS,
       POLICY,
       COLL_CONF,
@@ -437,7 +435,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     protected String shards;
     protected String routerField;
     protected Integer numShards;
-    protected Integer maxShardsPerNode;
     protected Integer nrtReplicas;
     protected Integer pullReplicas;
     protected Integer tlogReplicas;
@@ -477,7 +474,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     public Create setCreateNodeSet(String nodeSet) { this.createNodeSet = nodeSet; return this; }
     public Create setRouterName(String routerName) { this.routerName = routerName; return this; }
     public Create setRouterField(String routerField) { this.routerField = routerField; return this; }
-    public Create setMaxShardsPerNode(Integer numShards) { this.maxShardsPerNode = numShards; return this; }
     public Create setAutoAddReplicas(boolean autoAddReplicas) { this.autoAddReplicas = autoAddReplicas; return this; }
     public Create setNrtReplicas(Integer nrtReplicas) { this.nrtReplicas = nrtReplicas; return this;}
     public Create setTlogReplicas(Integer tlogReplicas) { this.tlogReplicas = tlogReplicas; return this;}
@@ -498,7 +494,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     public String getRouterName() { return  routerName; }
     public String getShards() { return  shards; }
     public Integer getNumShards() { return numShards; }
-    public Integer getMaxShardsPerNode() { return maxShardsPerNode; }
 
     public Integer getReplicationFactor() { return getNumNrtReplicas(); }
     public Integer getNumNrtReplicas() { return nrtReplicas; }
@@ -558,9 +553,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
       if (numShards != null) {
         params.set( ZkStateReader.NUM_SHARDS_PROP, numShards);
       }
-      if (maxShardsPerNode != null) {
-        params.set( ZkStateReader.MAX_SHARDS_PER_NODE, maxShardsPerNode);
-      }
       if (routerName != null)
         params.set( "router.name", routerName);
       if (shards != null)
@@ -1172,9 +1164,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
       params.set(CoreAdminParams.NAME, backupName);
       params.set(CoreAdminParams.BACKUP_LOCATION, location); //note: optional
       params.set("collection.configName", configName); //note: optional
-      if (maxShardsPerNode != null) {
-        params.set( ZkStateReader.MAX_SHARDS_PER_NODE, maxShardsPerNode);
-      }
       if (replicationFactor != null && nrtReplicas != null) {
         throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
             "Cannot set both replicationFactor and nrtReplicas as they mean the same thing");
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 08d5296..3e64982 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
@@ -35,7 +35,6 @@ import org.apache.solr.common.SolrException.ErrorCode;
 import org.noggit.JSONWriter;
 
 import static org.apache.solr.common.cloud.ZkStateReader.AUTO_ADD_REPLICAS;
-import static org.apache.solr.common.cloud.ZkStateReader.MAX_SHARDS_PER_NODE;
 import static org.apache.solr.common.cloud.ZkStateReader.NRT_REPLICAS;
 import static org.apache.solr.common.cloud.ZkStateReader.PULL_REPLICAS;
 import static org.apache.solr.common.cloud.ZkStateReader.READ_ONLY;
@@ -69,7 +68,6 @@ public class DocCollection extends ZkNodeProps implements Iterable<Slice> {
   private final Integer numNrtReplicas;
   private final Integer numTlogReplicas;
   private final Integer numPullReplicas;
-  private final Integer maxShardsPerNode;
   private final Boolean autoAddReplicas;
   private final String policy;
   private final Boolean readOnly;
@@ -97,7 +95,6 @@ public class DocCollection extends ZkNodeProps implements Iterable<Slice> {
     this.numNrtReplicas = (Integer) verifyProp(props, NRT_REPLICAS, 0);
     this.numTlogReplicas = (Integer) verifyProp(props, TLOG_REPLICAS, 0);
     this.numPullReplicas = (Integer) verifyProp(props, PULL_REPLICAS, 0);
-    this.maxShardsPerNode = (Integer) verifyProp(props, MAX_SHARDS_PER_NODE);
     Boolean autoAddReplicas = (Boolean) verifyProp(props, AUTO_ADD_REPLICAS);
     this.policy = (String) props.get(Policy.POLICY);
     this.autoAddReplicas = autoAddReplicas == null ? Boolean.FALSE : autoAddReplicas;
@@ -149,7 +146,6 @@ public class DocCollection extends ZkNodeProps implements Iterable<Slice> {
     Object o = props.get(propName);
     if (o == null) return def;
     switch (propName) {
-      case MAX_SHARDS_PER_NODE:
       case REPLICATION_FACTOR:
       case NRT_REPLICAS:
       case PULL_REPLICAS:
@@ -262,14 +258,6 @@ public class DocCollection extends ZkNodeProps implements Iterable<Slice> {
     return autoAddReplicas;
   }
   
-  public int getMaxShardsPerNode() {
-    if (maxShardsPerNode == null) {
-      throw new SolrException(ErrorCode.BAD_REQUEST, MAX_SHARDS_PER_NODE + " is not in the cluster state.");
-    }
-    //maxShardsPerNode=0 when policy is used. This variable is not important then
-    return maxShardsPerNode == 0 ? Integer.MAX_VALUE : maxShardsPerNode;
-  }
-
   public String getZNode(){
     return znode;
   }
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
index 3d9739d..1872762 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
@@ -122,7 +122,6 @@ public class ZkStateReader implements SolrCloseable {
 
   public static final String DEFAULT_SHARD_PREFERENCES = "defaultShardPreferences";
   public static final String REPLICATION_FACTOR = "replicationFactor";
-  public static final String MAX_SHARDS_PER_NODE = "maxShardsPerNode";
   public static final String AUTO_ADD_REPLICAS = "autoAddReplicas";
   public static final String MAX_CORES_PER_NODE = "maxCoresPerNode";
   public static final String PULL_REPLICAS = "pullReplicas";
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java
index 23acbf6..a7a0d27 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java
@@ -423,7 +423,6 @@ public class CloudHttp2SolrClientTest extends SolrCloudTestCase {
     // all its cores on the same node.
     // Hence the below configuration for our collection
     CollectionAdminRequest.createCollection(collectionName, "conf", liveNodes, liveNodes)
-        .setMaxShardsPerNode(liveNodes * liveNodes)
         .processAndWait(cluster.getSolrClient(), TIMEOUT);
     cluster.waitForActiveCollection(collectionName, liveNodes, liveNodes * liveNodes);
     // Add some new documents
@@ -502,7 +501,6 @@ public class CloudHttp2SolrClientTest extends SolrCloudTestCase {
 
     // For testing replica.type, we want to have all replica types available for the collection
     CollectionAdminRequest.createCollection(collectionName, "conf", 1, liveNodes/3, liveNodes/3, liveNodes/3)
-        .setMaxShardsPerNode(liveNodes)
         .processAndWait(cluster.getSolrClient(), TIMEOUT);
     cluster.waitForActiveCollection(collectionName, 1, liveNodes);
 
@@ -954,7 +952,6 @@ public class CloudHttp2SolrClientTest extends SolrCloudTestCase {
     // Hence the below configuration for our collection
     int pullReplicas = Math.max(1, liveNodes - 2);
     CollectionAdminRequest.createCollection(collectionName, "conf", liveNodes, 1, 1, pullReplicas)
-        .setMaxShardsPerNode(liveNodes)
         .processAndWait(cluster.getSolrClient(), TIMEOUT);
     cluster.waitForActiveCollection(collectionName, liveNodes, liveNodes * (2 + pullReplicas));
     
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java
index 964d343..16e17b8 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java
@@ -411,7 +411,6 @@ public class CloudSolrClientTest extends SolrCloudTestCase {
     // all its cores on the same node.
     // Hence the below configuration for our collection
     CollectionAdminRequest.createCollection(collectionName, "conf", liveNodes, liveNodes)
-        .setMaxShardsPerNode(liveNodes * liveNodes)
         .processAndWait(cluster.getSolrClient(), TIMEOUT);
     cluster.waitForActiveCollection(collectionName, liveNodes, liveNodes * liveNodes);
     // Add some new documents
@@ -488,7 +487,6 @@ public class CloudSolrClientTest extends SolrCloudTestCase {
 
     // For testing replica.type, we want to have all replica types available for the collection
     CollectionAdminRequest.createCollection(collectionName, "conf", 1, liveNodes/3, liveNodes/3, liveNodes/3)
-        .setMaxShardsPerNode(liveNodes)
         .processAndWait(cluster.getSolrClient(), TIMEOUT);
     cluster.waitForActiveCollection(collectionName, 1, liveNodes);
 
@@ -926,7 +924,6 @@ public class CloudSolrClientTest extends SolrCloudTestCase {
     // Hence the below configuration for our collection
     int pullReplicas = Math.max(1, liveNodes - 2);
     CollectionAdminRequest.createCollection(collectionName, "conf", liveNodes, 1, 1, pullReplicas)
-        .setMaxShardsPerNode(liveNodes)
         .processAndWait(cluster.getSolrClient(), TIMEOUT);
     cluster.waitForActiveCollection(collectionName, liveNodes, liveNodes * (2 + pullReplicas));
     
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamingTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamingTest.java
index 5769a9f..8eeae21 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamingTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamingTest.java
@@ -123,7 +123,6 @@ public static void configureCluster() throws Exception {
     collection = MULTI_REPLICA_COLLECTIONORALIAS;
   }
   CollectionAdminRequest.createCollection(collection, "conf", numShards, 1, 1, 1)
-      .setMaxShardsPerNode(numShards * 3)
       .process(cluster.getSolrClient());
   cluster.waitForActiveCollection(collection, numShards, numShards * 3);
   if (useAlias) {
diff --git a/solr/solrj/src/test/org/apache/solr/common/cloud/SolrZkClientTest.java b/solr/solrj/src/test/org/apache/solr/common/cloud/SolrZkClientTest.java
index cf9f694..a3c8623 100644
--- a/solr/solrj/src/test/org/apache/solr/common/cloud/SolrZkClientTest.java
+++ b/solr/solrj/src/test/org/apache/solr/common/cloud/SolrZkClientTest.java
@@ -171,7 +171,6 @@ public class SolrZkClientTest extends SolrCloudTestCase {
     assertEquals(wrapped1A.hashCode(), wrapped2A.hashCode());
 
     CollectionAdminRequest.createCollection(getSaferTestName(), "_default", 1, 1)
-        .setMaxShardsPerNode(2)
         .process(solrClient);
 
     CollectionAdminRequest.setCollectionProperty(getSaferTestName(),"foo", "bar")
diff --git a/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java b/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
index 1361af9..de09074 100644
--- a/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
+++ b/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
@@ -1749,8 +1749,8 @@ public abstract class AbstractFullDistribZkTestBase extends AbstractDistribZkTes
     cloudClient.commit();
   }
 
-  protected CollectionAdminResponse createCollection(String collectionName, String configSetName, int numShards, int replicationFactor, int maxShardsPerNode) throws SolrServerException, IOException, InterruptedException, TimeoutException {
-    return createCollection(null, collectionName, configSetName, numShards, replicationFactor, maxShardsPerNode, null, null);
+  protected CollectionAdminResponse createCollection(String collectionName, String configSetName, int numShards, int replicationFactor) throws SolrServerException, IOException, InterruptedException, TimeoutException {
+    return createCollection(null, collectionName, configSetName, numShards, replicationFactor, null, null);
   }
 
   protected CollectionAdminResponse createCollection(Map<String,List<Integer>> collectionInfos, String collectionName, Map<String,Object> collectionProps, SolrClient client)  throws SolrServerException, IOException, InterruptedException, TimeoutException{
@@ -1829,7 +1829,7 @@ public abstract class AbstractFullDistribZkTestBase extends AbstractDistribZkTes
 
 
   protected CollectionAdminResponse createCollection(Map<String,List<Integer>> collectionInfos,
-      String collectionName, String configSetName, int numShards, int replicationFactor, int maxShardsPerNode, SolrClient client, String createNodeSetStr) throws SolrServerException, IOException, InterruptedException, TimeoutException {
+      String collectionName, String configSetName, int numShards, int replicationFactor, SolrClient client, String createNodeSetStr) throws SolrServerException, IOException, InterruptedException, TimeoutException {
 
     int numNrtReplicas = useTlogReplicas()?0:replicationFactor;
     int numTlogReplicas = useTlogReplicas()?replicationFactor:0;
@@ -1839,13 +1839,12 @@ public abstract class AbstractFullDistribZkTestBase extends AbstractDistribZkTes
             ZkStateReader.NRT_REPLICAS, numNrtReplicas,
             ZkStateReader.TLOG_REPLICAS, numTlogReplicas,
             ZkStateReader.PULL_REPLICAS, getPullReplicaCount(),
-            OverseerCollectionMessageHandler.CREATE_NODE_SET, createNodeSetStr,
-            ZkStateReader.MAX_SHARDS_PER_NODE, maxShardsPerNode),
+            OverseerCollectionMessageHandler.CREATE_NODE_SET, createNodeSetStr),
         client, configSetName);
   }
 
   protected CollectionAdminResponse createCollection(Map<String, List<Integer>> collectionInfos,
-                                                     String collectionName, int numShards, int replicationFactor, int maxShardsPerNode, SolrClient client, String createNodeSetStr, String configName) throws SolrServerException, IOException, InterruptedException, TimeoutException {
+                                                     String collectionName, int numShards, int replicationFactor, SolrClient client, String createNodeSetStr, String configName) throws SolrServerException, IOException, InterruptedException, TimeoutException {
 
     int numNrtReplicas = useTlogReplicas()?0:replicationFactor;
     int numTlogReplicas = useTlogReplicas()?replicationFactor:0;
@@ -1855,8 +1854,7 @@ public abstract class AbstractFullDistribZkTestBase extends AbstractDistribZkTes
             ZkStateReader.NRT_REPLICAS, numNrtReplicas,
             ZkStateReader.TLOG_REPLICAS, numTlogReplicas,
             ZkStateReader.PULL_REPLICAS, getPullReplicaCount(),
-            OverseerCollectionMessageHandler.CREATE_NODE_SET, createNodeSetStr,
-            ZkStateReader.MAX_SHARDS_PER_NODE, maxShardsPerNode),
+            OverseerCollectionMessageHandler.CREATE_NODE_SET, createNodeSetStr),
         client, configName);
   }
 
@@ -2040,12 +2038,9 @@ public abstract class AbstractFullDistribZkTestBase extends AbstractDistribZkTes
                                   CloudSolrClient client,
                                   int replicationFactor ,
                                   int numShards ) throws Exception {
-    int maxShardsPerNode = ((((numShards+1) * replicationFactor) / getCommonCloudSolrClient()
-        .getZkStateReader().getClusterState().getLiveNodes().size())) + 1;
     int numNrtReplicas = useTlogReplicas()?0:replicationFactor;
     int numTlogReplicas = useTlogReplicas()?replicationFactor:0;
     Map<String, Object> props = makeMap(
-        ZkStateReader.MAX_SHARDS_PER_NODE, maxShardsPerNode,
         ZkStateReader.NRT_REPLICAS, numNrtReplicas,
         ZkStateReader.TLOG_REPLICAS, numTlogReplicas,
         ZkStateReader.PULL_REPLICAS, getPullReplicaCount(),
@@ -2054,14 +2049,14 @@ public abstract class AbstractFullDistribZkTestBase extends AbstractDistribZkTes
     createCollection(collectionInfos, collName, props, client);
   }
 
-  protected void createCollectionRetry(String testCollectionName, String configSetName, int numShards, int replicationFactor, int maxShardsPerNode)
+  protected void createCollectionRetry(String testCollectionName, String configSetName, int numShards, int replicationFactor)
       throws SolrServerException, IOException, InterruptedException, TimeoutException {
-    CollectionAdminResponse resp = createCollection(testCollectionName, configSetName, numShards, replicationFactor, maxShardsPerNode);
+    CollectionAdminResponse resp = createCollection(testCollectionName, configSetName, numShards, replicationFactor);
     if (resp.getResponse().get("failure") != null) {
       CollectionAdminRequest.Delete req = CollectionAdminRequest.deleteCollection(testCollectionName);
       req.process(cloudClient);
 
-      resp = createCollection(testCollectionName, configSetName, numShards, replicationFactor, maxShardsPerNode);
+      resp = createCollection(testCollectionName, configSetName, numShards, replicationFactor);
 
       if (resp.getResponse().get("failure") != null) {
         fail("Could not create " + testCollectionName);
diff --git a/solr/test-framework/src/java/org/apache/solr/cloud/MultiSolrCloudTestCase.java b/solr/test-framework/src/java/org/apache/solr/cloud/MultiSolrCloudTestCase.java
index eb0a677..b7e6bb6 100644
--- a/solr/test-framework/src/java/org/apache/solr/cloud/MultiSolrCloudTestCase.java
+++ b/solr/test-framework/src/java/org/apache/solr/cloud/MultiSolrCloudTestCase.java
@@ -62,19 +62,16 @@ public abstract class MultiSolrCloudTestCase extends SolrTestCaseJ4 {
 
     final private int numShards;
     final private int numReplicas;
-    final private int maxShardsPerNode;
 
-    public DefaultClusterInitFunction(int numShards, int numReplicas, int maxShardsPerNode) {
+    public DefaultClusterInitFunction(int numShards, int numReplicas) {
       this.numShards = numShards;
       this.numReplicas = numReplicas;
-      this.maxShardsPerNode = maxShardsPerNode;
     }
 
     protected void doAccept(String collection, MiniSolrCloudCluster cluster) {
       try {
         CollectionAdminRequest
         .createCollection(collection, "conf", numShards, numReplicas)
-        .setMaxShardsPerNode(maxShardsPerNode)
         .processAndWait(cluster.getSolrClient(), SolrCloudTestCase.DEFAULT_TIMEOUT);
 
         AbstractDistribZkTestBase.waitForRecoveriesToFinish(collection, cluster.getSolrClient().getZkStateReader(), false, true, SolrCloudTestCase.DEFAULT_TIMEOUT);


[lucene-solr] 09/11: SOLR-12847: WIP, further cleanup.

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ab pushed a commit to branch jira/solr-12847-2
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit cb517d3b3200063997b53314972c0555cd74ad8a
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Wed Jul 1 11:28:14 2020 +0200

    SOLR-12847: WIP, further cleanup.
---
 .../solr/handler/dataimport/TestZKPropertiesWriter.java       |  1 -
 .../src/test/org/apache/solr/cloud/ClusterStateMockUtil.java  |  2 --
 solr/core/src/test/org/apache/solr/cloud/NodeMutatorTest.java |  2 --
 solr/core/src/test/org/apache/solr/cloud/TestTlogReplica.java | 11 +++++------
 .../api/collections/AbstractCloudBackupRestoreTestCase.java   |  8 ++++----
 .../apache/solr/core/snapshots/TestSolrCloudSnapshots.java    | 10 +++++-----
 .../solr/client/solrj/request/CollectionAdminRequest.java     |  4 ----
 7 files changed, 14 insertions(+), 24 deletions(-)

diff --git a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestZKPropertiesWriter.java b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestZKPropertiesWriter.java
index c4f3f7a..54a5e12 100644
--- a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestZKPropertiesWriter.java
+++ b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestZKPropertiesWriter.java
@@ -104,7 +104,6 @@ public class TestZKPropertiesWriter extends SolrCloudTestCase {
   @SuppressWarnings({"unchecked"})
   public void testZKPropertiesWriter() throws Exception {
     CollectionAdminRequest.createCollectionWithImplicitRouter("collection1", "conf", "1", 1)
-        .setMaxShardsPerNode(1)
         .process(cluster.getSolrClient());
 
     // DIH talks core, SolrCloud talks collection.
diff --git a/solr/core/src/test/org/apache/solr/cloud/ClusterStateMockUtil.java b/solr/core/src/test/org/apache/solr/cloud/ClusterStateMockUtil.java
index 677b25e..9019be7 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ClusterStateMockUtil.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ClusterStateMockUtil.java
@@ -72,7 +72,6 @@ public class ClusterStateMockUtil {
    * Result:
    *        {
    *         "collection2":{
-   *           "maxShardsPerNode":"1",
    *           "replicationFactor":"1",
    *           "shards":{"slice1":{
    *               "state":"active",
@@ -81,7 +80,6 @@ public class ClusterStateMockUtil {
    *                   "node_name":"baseUrl1_",
    *                   "base_url":"http://baseUrl1"}}}}},
    *         "collection1":{
-   *           "maxShardsPerNode":"1",
    *           "replicationFactor":"1",
    *           "shards":{
    *             "slice1":{
diff --git a/solr/core/src/test/org/apache/solr/cloud/NodeMutatorTest.java b/solr/core/src/test/org/apache/solr/cloud/NodeMutatorTest.java
index 3e8ef42..d31d67f 100644
--- a/solr/core/src/test/org/apache/solr/cloud/NodeMutatorTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/NodeMutatorTest.java
@@ -43,7 +43,6 @@ public class NodeMutatorTest extends SolrTestCaseJ4Test {
   public void downNodeReportsAllImpactedCollectionsAndNothingElse() throws IOException {
     NodeMutator nm = new NodeMutator();
 
-    //We use 2 nodes with maxShardsPerNode as 1
     //Collection1: 2 shards X 1 replica = replica1 on node1 and replica2 on node2
     //Collection2: 1 shard X 1 replica = replica1 on node2
     ZkStateReader reader = ClusterStateMockUtil.buildClusterState("csrr2rDcsr2", 1, NODE1, NODE2);
@@ -60,7 +59,6 @@ public class NodeMutatorTest extends SolrTestCaseJ4Test {
     assertEquals(writes.get(0).collection.getReplica("replica2").getState(), Replica.State.ACTIVE);
     reader.close();
 
-    //We use 3 nodes with maxShardsPerNode as 1
     //Collection1: 2 shards X 1 replica = replica1 on node1 and replica2 on node2
     //Collection2: 1 shard X 1 replica = replica1 on node2
     //Collection3: 1 shard X 3 replica = replica1 on node1 , replica2 on node2, replica3 on node3
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 e81feef..d68f46b 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestTlogReplica.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestTlogReplica.java
@@ -152,12 +152,11 @@ public class TestTlogReplica extends SolrCloudTestCase {
         break;
       case 1:
         // Sometimes don't use SolrJ
-        String url = String.format(Locale.ROOT, "%s/admin/collections?action=CREATE&name=%s&collection.configName=%s&numShards=%s&tlogReplicas=%s&maxShardsPerNode=%s",
+        String url = String.format(Locale.ROOT, "%s/admin/collections?action=CREATE&name=%s&collection.configName=%s&numShards=%s&tlogReplicas=%s",
             cluster.getRandomJetty(random()).getBaseUrl(),
             collectionName, "conf",
             2,    // numShards
-            4,    // tlogReplicas
-            100); // maxShardsPerNode
+            4);   // tlogReplicas
         HttpGet createCollectionGet = new HttpGet(url);
         HttpResponse httpResponse = cluster.getSolrClient().getHttpClient().execute(createCollectionGet);
         assertEquals(200, httpResponse.getStatusLine().getStatusCode());
@@ -166,11 +165,11 @@ public class TestTlogReplica extends SolrCloudTestCase {
       case 2:
         // Sometimes use V2 API
         url = cluster.getRandomJetty(random()).getBaseUrl().toString() + "/____v2/c";
-        String requestBody = String.format(Locale.ROOT, "{create:{name:%s, config:%s, numShards:%s, tlogReplicas:%s, maxShardsPerNode:%s}}",
+        String requestBody = String.format(Locale.ROOT, "{create:{name:%s, config:%s, numShards:%s, tlogReplicas:%s}}",
             collectionName, "conf",
             2,    // numShards
-            4,    // tlogReplicas
-            100); // maxShardsPerNode
+            4);   // tlogReplicas
+
         HttpPost createCollectionPost = new HttpPost(url);
         createCollectionPost.setHeader("Content-type", "application/json");
         createCollectionPost.setEntity(new StringEntity(requestBody));
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/AbstractCloudBackupRestoreTestCase.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/AbstractCloudBackupRestoreTestCase.java
index 1203924..a7da88f 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/AbstractCloudBackupRestoreTestCase.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/AbstractCloudBackupRestoreTestCase.java
@@ -191,7 +191,7 @@ public abstract class AbstractCloudBackupRestoreTestCase extends SolrCloudTestCa
           .setLocation(backupLocation).setRepositoryName(getBackupRepoName());
       if (backupCollection.getReplicas().size() > cluster.getJettySolrRunners().size()) {
         // may need to increase maxShardsPerNode (e.g. if it was shard split, then now we need more)
-        restore.setMaxShardsPerNode((int)Math.ceil(backupCollection.getReplicas().size()/cluster.getJettySolrRunners().size()));
+        //restore.setMaxShardsPerNode((int)Math.ceil(backupCollection.getReplicas().size()/cluster.getJettySolrRunners().size()));
       }
 
       restore.setConfigName("confFaulty");
@@ -342,9 +342,9 @@ public abstract class AbstractCloudBackupRestoreTestCase extends SolrCloudTestCa
     if (rarely()) { // Try with createNodeSet configuration
       //Always 1 as cluster.getJettySolrRunners().size()=NUM_SHARDS=2
       restore.setCreateNodeSet(cluster.getJettySolrRunners().get(0).getNodeName());
-      // we need to double maxShardsPerNode value since we reduced number of available nodes by half.
-      computeRestoreMaxShardsPerNode = origShardToDocCount.size() * restoreReplFactor;
-      restore.setMaxShardsPerNode(computeRestoreMaxShardsPerNode);
+//      // we need to double maxShardsPerNode value since we reduced number of available nodes by half.
+//      computeRestoreMaxShardsPerNode = origShardToDocCount.size() * restoreReplFactor;
+//      restore.setMaxShardsPerNode(computeRestoreMaxShardsPerNode);
     }
 
     final int restoreMaxShardsPerNode = computeRestoreMaxShardsPerNode;
diff --git a/solr/core/src/test/org/apache/solr/core/snapshots/TestSolrCloudSnapshots.java b/solr/core/src/test/org/apache/solr/core/snapshots/TestSolrCloudSnapshots.java
index 21e7322..cfafe23 100644
--- a/solr/core/src/test/org/apache/solr/core/snapshots/TestSolrCloudSnapshots.java
+++ b/solr/core/src/test/org/apache/solr/core/snapshots/TestSolrCloudSnapshots.java
@@ -186,11 +186,11 @@ public class TestSolrCloudSnapshots extends SolrCloudTestCase {
     {
       CollectionAdminRequest.Restore restore = CollectionAdminRequest.restoreCollection(restoreCollectionName, backupName)
           .setLocation(backupLocation);
-      if (replicaFailures) {
-        // In this case one of the Solr servers would be down. Hence we need to increase
-        // max_shards_per_node property for restore command to succeed.
-        restore.setMaxShardsPerNode(2);
-      }
+//      if (replicaFailures) {
+//        // In this case one of the Solr servers would be down. Hence we need to increase
+//        // max_shards_per_node property for restore command to succeed.
+//        restore.setMaxShardsPerNode(2);
+//      }
       if (random().nextBoolean()) {
         assertEquals(0, restore.process(solrClient).getStatus());
       } else {
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java b/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
index 8333339..bbfe474 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
@@ -1075,7 +1075,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
 
     // in common with collection creation:
     protected String configName;
-    protected Integer maxShardsPerNode;
     protected Integer replicationFactor;
     protected Integer nrtReplicas;
     protected Integer tlogReplicas;
@@ -1128,9 +1127,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     public Restore setConfigName(String config) { this.configName = config; return this; }
     public String getConfigName()  { return configName; }
 
-    public Integer getMaxShardsPerNode() { return maxShardsPerNode; }
-    public Restore setMaxShardsPerNode(int maxShardsPerNode) { this.maxShardsPerNode = maxShardsPerNode; return this; }
-
     public Integer getReplicationFactor() { return replicationFactor; }
     public Restore setReplicationFactor(Integer replicationFactor) { this.replicationFactor = replicationFactor; return this; }
 


[lucene-solr] 05/11: SOLR-12847: WIP.

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ab pushed a commit to branch jira/solr-12847-2
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 6c45484471af85c50a3f331965403ad9842aee21
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Thu Apr 30 19:28:21 2020 +0200

    SOLR-12847: WIP.
---
 .../test/org/apache/solr/cloud/AddReplicaTest.java  |  9 +--------
 .../collections/CollectionTooManyReplicasTest.java  |  2 --
 .../CollectionsAPIDistributedZkTest.java            | 21 ---------------------
 .../solr/handler/component/ShardsWhitelistTest.java |  3 +--
 4 files changed, 2 insertions(+), 33 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 982c371..99e710f 100644
--- a/solr/core/src/test/org/apache/solr/cloud/AddReplicaTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/AddReplicaTest.java
@@ -81,13 +81,6 @@ public class AddReplicaTest extends SolrCloudTestCase {
     assertEquals(1, docCollection.getReplicas(EnumSet.of(Replica.Type.TLOG)).size());
     assertEquals(1, docCollection.getReplicas(EnumSet.of(Replica.Type.PULL)).size());
 
-    // try to add 5 more replicas which should fail because numNodes(4)*maxShardsPerNode(2)=8 and 4 replicas already exist
-    addReplica = CollectionAdminRequest.addReplicaToShard(collection, "shard1")
-        .setNrtReplicas(3)
-        .setTlogReplicas(1)
-        .setPullReplicas(1);
-    status = addReplica.processAndWait(collection + "_xyz1", cloudClient, 120);
-    assertEquals(FAILED, status);
     docCollection = cloudClient.getZkStateReader().getClusterState().getCollectionOrNull(collection);
     assertNotNull(docCollection);
     // sanity check that everything is as before
@@ -96,7 +89,7 @@ public class AddReplicaTest extends SolrCloudTestCase {
     assertEquals(1, docCollection.getReplicas(EnumSet.of(Replica.Type.TLOG)).size());
     assertEquals(1, docCollection.getReplicas(EnumSet.of(Replica.Type.PULL)).size());
 
-    // but adding any number of replicas is supported if an explicit create node set is specified
+    // adding any number of replicas is supported if an explicit create node set is specified
     // so test that as well
     LinkedHashSet<String> createNodeSet = new LinkedHashSet<>(2);
     createNodeSet.add(cluster.getRandomJetty(random()).getNodeName());
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 6d2ea05..aaa4add 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
@@ -64,11 +64,9 @@ public class CollectionTooManyReplicasTest extends SolrCloudTestCase {
     String nodeName = getAllNodeNames(collectionName).get(0);
 
     // Add a replica using the "node" parameter
-    // AND force skipping the node assignment (no "too many replicas check")
     // this node should have 2 replicas on it
     CollectionAdminRequest.addReplicaToShard(collectionName, "shard1")
         .setNode(nodeName)
-        //.setSkipNodeAssignment(true)
         .process(cluster.getSolrClient());
 
     // equivalent to maxShardsPerNode=1
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionsAPIDistributedZkTest.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionsAPIDistributedZkTest.java
index 24bbc70..b7fffae 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionsAPIDistributedZkTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionsAPIDistributedZkTest.java
@@ -222,15 +222,6 @@ public class CollectionsAPIDistributedZkTest extends SolrCloudTestCase {
   }
 
   @Test
-  public void testTooManyReplicas() {
-    CollectionAdminRequest req = CollectionAdminRequest.createCollection("collection", "conf", 2, 10);
-
-    expectThrows(Exception.class, () -> {
-      cluster.getSolrClient().request(req);
-    });
-  }
-
-  @Test
   public void testMissingNumShards() {
     // No numShards should fail
     ModifiableSolrParams params = new ModifiableSolrParams();
@@ -348,18 +339,6 @@ public class CollectionsAPIDistributedZkTest extends SolrCloudTestCase {
   }
 
   @Test
-  public void testMaxNodesPerShard() {
-    int numLiveNodes = cluster.getJettySolrRunners().size();
-    int numShards = (numLiveNodes/2) + 1;
-    int replicationFactor = 2;
-
-    expectThrows(SolrException.class, () -> {
-      CollectionAdminRequest.createCollection("oversharded", "conf", numShards, replicationFactor)
-          .process(cluster.getSolrClient());
-    });
-  }
-
-  @Test
   public void testCreateNodeSet() throws Exception {
     JettySolrRunner jetty1 = cluster.getRandomJetty(random());
     JettySolrRunner jetty2 = cluster.getRandomJetty(random());
diff --git a/solr/core/src/test/org/apache/solr/handler/component/ShardsWhitelistTest.java b/solr/core/src/test/org/apache/solr/handler/component/ShardsWhitelistTest.java
index 5061582..b464f25 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/ShardsWhitelistTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/ShardsWhitelistTest.java
@@ -55,7 +55,6 @@ public class ShardsWhitelistTest extends MultiSolrCloudTestCase {
 
   private static int numShards;
   private static int numReplicas;
-  private static int maxShardsPerNode;
   private static int nodesPerCluster;
 
   private static void appendClusterNodes(final StringBuilder sb, final String delimiter,
@@ -70,7 +69,7 @@ public class ShardsWhitelistTest extends MultiSolrCloudTestCase {
 
     numShards = 2; // +random().nextInt(2);
     numReplicas = 1; // +random().nextInt(2);
-    nodesPerCluster = (numShards * numReplicas + (maxShardsPerNode - 1)) / maxShardsPerNode;
+    nodesPerCluster = numShards * numReplicas;
 
     final StringBuilder sb = new StringBuilder();
 


[lucene-solr] 06/11: Merge branch 'master' into jira/solr-12847-2

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ab pushed a commit to branch jira/solr-12847-2
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 09ee72156f579a8294105c2d4aa70940123b8c18
Merge: 6c45484 db98608
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Thu Jun 25 13:12:14 2020 +0200

    Merge branch 'master' into jira/solr-12847-2

 .gitignore                                         |    1 +
 build.gradle                                       |   25 +-
 dev-tools/doap/lucene.rdf                          |   14 +
 dev-tools/doap/solr.rdf                            |   14 +
 dev-tools/maven/pom.xml.template                   |    2 +-
 dev-tools/scripts/poll-mirrors.py                  |   20 +-
 dev-tools/scripts/releaseWizard.py                 |  148 +-
 dev-tools/scripts/releaseWizard.yaml               |  395 +-
 dev-tools/scripts/reproduceJenkinsFailures.py      |    5 +-
 gradle/defaults-java.gradle                        |    1 +
 gradle/documentation/changes-to-html.gradle        |   94 +
 gradle/documentation/documentation.gradle          |   78 +
 gradle/documentation/markdown.gradle               |  204 +
 gradle/generate-defaults.gradle                    |    2 +-
 gradle/generation/snowball.gradle                  |    2 +-
 gradle/hacks/findbugs.gradle                       |   45 +
 gradle/jar-manifest.gradle                         |    9 +-
 gradle/render-javadoc.gradle                       |  550 +-
 gradle/validation/check-broken-links.gradle        |   71 +
 gradle/validation/check-environment.gradle         |    2 +-
 gradle/validation/jar-checks.gradle                |    4 +-
 gradle/validation/precommit.gradle                 |    3 +-
 gradle/validation/validate-log-calls.gradle        |  309 +-
 gradle/wrapper/gradle-wrapper.jar                  |  Bin 58702 -> 58910 bytes
 gradle/wrapper/gradle-wrapper.jar.sha256           |    2 +-
 gradle/wrapper/gradle-wrapper.jar.version          |    2 +-
 gradle/wrapper/gradle-wrapper.properties           |    2 +-
 gradlew                                            |    5 +-
 help/ant.txt                                       |    4 +-
 help/validateLogCalls.txt                          |   65 +-
 lucene/CHANGES.txt                                 |  109 +-
 lucene/MIGRATE.md                                  |   15 +
 lucene/analysis/common/build.gradle                |    2 +
 .../ConcatenateGraphFilterFactory.java             |    4 +-
 .../FixBrokenOffsetsFilterFactory.java             |    1 +
 .../miscellaneous/WordDelimiterFilterFactory.java  |   19 +-
 .../lucene/analysis/snowball/french_stop.txt       |   20 +-
 .../lucene/analysis/core/TestBugInSomething.java   |    1 +
 .../lucene/analysis/core/TestRandomChains.java     |    4 +-
 .../lucene/analysis/custom/TestCustomAnalyzer.java |   13 +-
 .../miscellaneous/TestConcatenateGraphFilter.java  |    3 +
 .../TestConcatenateGraphFilterFactory.java         |    3 +-
 .../miscellaneous/TestFixBrokenOffsetsFilter.java  |    1 +
 .../TestLimitTokenPositionFilter.java              |    1 +
 .../TestRemoveDuplicatesTokenFilter.java           |    4 +-
 .../miscellaneous/TestWordDelimiterFilter.java     |   26 +-
 .../analysis/ngram/EdgeNGramTokenizerTest.java     |    2 +-
 .../lucene/analysis/ngram/NGramTokenizerTest.java  |    2 +-
 .../analysis/synonym/TestSolrSynonymParser.java    |    1 +
 .../analysis/synonym/TestSynonymFilterFactory.java |    1 +
 .../analysis/synonym/TestSynonymMapFilter.java     |    1 +
 .../analysis/synonym/TestWordnetSynonymParser.java |    3 +-
 .../util/TestFilesystemResourceLoader.java         |    5 +-
 lucene/analysis/icu/build.gradle                   |    2 +
 .../lucene/analysis/icu/ICUTransformFilter.java    |    1 +
 lucene/analysis/kuromoji/build.gradle              |    2 +
 .../analysis/ja/dict/TokenInfoDictionary.java      |    4 +-
 lucene/analysis/morfologik/build.gradle            |    2 +
 lucene/analysis/nori/build.gradle                  |    2 +
 .../analysis/ko/dict/TokenInfoDictionary.java      |    4 +-
 lucene/analysis/opennlp/build.gradle               |    2 +
 lucene/analysis/phonetic/build.gradle              |    2 +
 lucene/analysis/smartcn/build.gradle               |    2 +
 lucene/analysis/stempel/build.gradle               |    2 +
 lucene/backward-codecs/build.gradle                |    2 +
 .../codecs/lucene60/Lucene60PointsFormat.java      |  110 +
 .../codecs/lucene60/Lucene60PointsReader.java      |  146 +
 .../org/apache/lucene/codecs/lucene60/package.html |   25 +
 .../codecs/lucene70/Lucene70SegmentInfoFormat.java |  281 +
 .../lucene/codecs/lucene70/package-info.java       |   22 +
 .../lucene/codecs/lucene84/Lucene84Codec.java      |  178 +
 .../org/apache/lucene/codecs/lucene84/package.html |   25 +
 .../services/org.apache.lucene.codecs.Codec        |    1 +
 .../codecs/lucene60/Lucene60PointsWriter.java      |  267 +
 .../codecs/lucene60/Lucene60RWPointsFormat.java    |   35 +
 .../codecs/lucene60/TestLucene60PointsFormat.java  |  354 ++
 .../lucene70/Lucene70RWSegmentInfoFormat.java      |  204 +
 .../lucene70/TestLucene70SegmentInfoFormat.java    |   42 +
 .../lucene/codecs/lucene84/Lucene84RWCodec.java    |   39 +
 .../lucene/index/TestBackwardsCompatibility.java   |   11 +-
 .../org/apache/lucene/index/index.8.5.2-cfs.zip    |  Bin 0 -> 15897 bytes
 .../org/apache/lucene/index/index.8.5.2-nocfs.zip  |  Bin 0 -> 15902 bytes
 .../test/org/apache/lucene/index/sorted.8.5.2.zip  |  Bin 0 -> 80768 bytes
 .../apache/lucene/index/unsupported.7.7.3-cfs.zip  |  Bin 0 -> 15646 bytes
 .../lucene/index/unsupported.7.7.3-nocfs.zip       |  Bin 0 -> 15643 bytes
 .../lucene/index/unsupported.sorted.7.7.3.zip      |  Bin 0 -> 86356 bytes
 lucene/benchmark/build.gradle                      |  121 +-
 lucene/benchmark/scripts/collation.bm2jira.pl      |   22 +-
 .../benchmark/byTask/tasks/CreateIndexTask.java    |    4 +-
 lucene/build.gradle                                |    2 +
 lucene/classification/build.gradle                 |    2 +
 .../document/DocumentClassificationTestBase.java   |    2 +-
 lucene/codecs/build.gradle                         |    2 +
 .../blockterms/VariableGapTermsIndexReader.java    |    2 +-
 .../blockterms/VariableGapTermsIndexWriter.java    |    2 +-
 .../blocktreeords/OrdsBlockTreeTermsWriter.java    |    2 +-
 .../codecs/blocktreeords/OrdsFieldReader.java      |    2 +-
 .../lucene/codecs/memory/FSTTermsReader.java       |    2 +-
 .../lucene/codecs/memory/FSTTermsWriter.java       |    2 +-
 .../simpletext/SimpleTextSegmentInfoFormat.java    |  306 +-
 .../lucene/codecs/uniformsplit/FSTDictionary.java  |    8 +-
 .../uniformsplit/UniformSplitPostingsFormat.java   |   12 +-
 .../uniformsplit/UniformSplitTermsReader.java      |   44 +-
 .../uniformsplit/UniformSplitTermsWriter.java      |   17 +-
 .../sharedterms/STUniformSplitPostingsFormat.java  |    2 +-
 .../sharedterms/STUniformSplitTermsReader.java     |    5 +-
 .../sharedterms/UnionFieldMetadataBuilder.java     |    6 -
 .../TestUniformSplitPostingFormat.java             |   19 +-
 .../sharedterms/STBlockReaderTest.java             |  360 --
 .../sharedterms/TestSTBlockReader.java             |  360 ++
 lucene/common-build.xml                            |    2 +-
 lucene/core/build.gradle                           |    3 +-
 .../src/java/org/apache/lucene/codecs/Codec.java   |    2 +-
 .../java/org/apache/lucene/codecs/CodecUtil.java   |   41 +-
 .../apache/lucene/codecs/DocValuesConsumer.java    |    2 +-
 .../codecs/blocktree/BlockTreeTermsReader.java     |  157 +-
 .../codecs/blocktree/BlockTreeTermsWriter.java     |  134 +-
 .../lucene/codecs/blocktree/FieldReader.java       |   32 +-
 .../codecs/lucene60/Lucene60PointsFormat.java      |  110 -
 .../codecs/lucene60/Lucene60PointsReader.java      |  166 -
 .../codecs/lucene60/Lucene60PointsWriter.java      |  263 -
 .../lucene/codecs/lucene60/package-info.java       |    2 +-
 .../codecs/lucene70/Lucene70SegmentInfoFormat.java |  439 --
 .../lucene/codecs/lucene70/package-info.java       |   22 -
 .../lucene/codecs/lucene84/Lucene84Codec.java      |  178 -
 .../lucene/codecs/lucene84/package-info.java       |  396 +-
 .../lucene/codecs/lucene86/Lucene86Codec.java      |  178 +
 .../codecs/lucene86/Lucene86PointsFormat.java      |   80 +
 .../codecs/lucene86/Lucene86PointsReader.java      |  152 +
 .../codecs/lucene86/Lucene86PointsWriter.java      |  265 +
 .../codecs/lucene86/Lucene86SegmentInfoFormat.java |  217 +
 .../lucene/codecs/lucene86/package-info.java       |  416 ++
 .../java/org/apache/lucene/geo/Tessellator.java    |    7 +-
 .../apache/lucene/index/BinaryDocValuesWriter.java |   29 +-
 .../org/apache/lucene/index/ByteSliceWriter.java   |    1 -
 .../apache/lucene/index/DefaultIndexingChain.java  |  279 +-
 .../java/org/apache/lucene/index/DocConsumer.java  |    2 +-
 .../java/org/apache/lucene/index/DocValues.java    |    4 +-
 .../apache/lucene/index/DocValuesLeafReader.java   |   89 +
 .../org/apache/lucene/index/DocValuesWriter.java   |    8 +-
 .../org/apache/lucene/index/DocumentsWriter.java   |   10 +-
 .../lucene/index/DocumentsWriterFlushControl.java  |   27 +-
 .../lucene/index/DocumentsWriterPerThread.java     |   68 +-
 .../org/apache/lucene/index/FreqProxFields.java    |   19 +-
 .../apache/lucene/index/FreqProxTermsWriter.java   |    6 +-
 .../lucene/index/FreqProxTermsWriterPerField.java  |   57 +-
 .../org/apache/lucene/index/IndexFileDeleter.java  |    4 +-
 .../java/org/apache/lucene/index/IndexSorter.java  |  448 ++
 .../java/org/apache/lucene/index/IndexWriter.java  |  199 +-
 .../org/apache/lucene/index/IndexWriterConfig.java |   17 +-
 .../java/org/apache/lucene/index/MergePolicy.java  |   79 +-
 .../org/apache/lucene/index/MultiDocValues.java    |    2 +-
 .../java/org/apache/lucene/index/MultiSorter.java  |  144 +-
 .../lucene/index/NumericDocValuesWriter.java       |   33 +-
 .../apache/lucene/index/ParallelPostingsArray.java |   10 +-
 .../java/org/apache/lucene/index/SegmentInfos.java |  236 +-
 .../org/apache/lucene/index/SortFieldProvider.java |  118 +
 .../apache/lucene/index/SortedDocValuesWriter.java |   50 +-
 .../lucene/index/SortedNumericDocValuesWriter.java |   33 +-
 .../lucene/index/SortedSetDocValuesWriter.java     |   45 +-
 .../src/java/org/apache/lucene/index/Sorter.java   |  238 +-
 .../apache/lucene/index/TermVectorsConsumer.java   |   10 +-
 .../lucene/index/TermVectorsConsumerPerField.java  |   58 +-
 .../java/org/apache/lucene/index/TermsHash.java    |   12 +-
 .../org/apache/lucene/index/TermsHashPerField.java |  243 +-
 .../apache/lucene/search/ConstantScoreQuery.java   |    2 +-
 .../org/apache/lucene/search/FieldComparator.java  |   16 +-
 .../apache/lucene/search/FieldValueHitQueue.java   |   29 +-
 .../lucene/search/FilteringFieldComparator.java    |   93 +
 .../search/FilteringLeafFieldComparator.java       |   39 +
 .../lucene/search/FilteringNumericComparator.java  |   52 +
 .../search/FilteringNumericLeafComparator.java     |  336 ++
 .../lucene/search/FuzzyAutomatonBuilder.java       |   88 +
 .../java/org/apache/lucene/search/FuzzyQuery.java  |   60 +-
 .../org/apache/lucene/search/FuzzyTermsEnum.java   |  151 +-
 .../org/apache/lucene/search/IndexSearcher.java    |   10 +
 .../org/apache/lucene/search/LeafCollector.java    |   12 +
 .../apache/lucene/search/MatchAllDocsQuery.java    |    2 +-
 .../org/apache/lucene/search/MultiCollector.java   |  111 +-
 .../org/apache/lucene/search/MultiTermQuery.java   |    6 +-
 .../org/apache/lucene/search/QueryVisitor.java     |    5 +-
 .../java/org/apache/lucene/search/ScoreMode.java   |   54 +-
 .../java/org/apache/lucene/search/SortField.java   |  139 +
 .../lucene/search/SortedNumericSortField.java      |  106 +
 .../apache/lucene/search/SortedSetSortField.java   |   69 +-
 .../org/apache/lucene/search/TermInSetQuery.java   |   22 +-
 .../apache/lucene/search/TopFieldCollector.java    |   69 +-
 .../src/java/org/apache/lucene/search/Weight.java  |   18 +-
 .../org/apache/lucene/store/BufferedChecksum.java  |    4 +-
 .../lucene/store/ByteBuffersIndexOutput.java       |   18 +-
 .../java/org/apache/lucene/util/IntBlockPool.java  |    2 +-
 .../src/java/org/apache/lucene/util/Version.java   |    7 +
 .../lucene/util/automaton/CompiledAutomaton.java   |    4 +-
 .../org/apache/lucene/util/automaton/RegExp.java   |  329 +-
 .../java/org/apache/lucene/util/bkd/BKDReader.java |  252 +-
 .../java/org/apache/lucene/util/bkd/BKDWriter.java |  514 +-
 .../src/java/org/apache/lucene/util/fst/FST.java   |   47 +-
 .../apache/lucene/util/fst/PositiveIntOutputs.java |    1 +
 .../org/apache/lucene/util/fst/package-info.java   |   18 +-
 .../lucene/util/packed/Packed64SingleBlock.java    |    3 +
 .../services/org.apache.lucene.codecs.Codec        |    2 +-
 .../org.apache.lucene.index.SortFieldProvider      |   20 +
 .../apache/lucene/analysis/TestCharArraySet.java   |    8 +-
 .../org/apache/lucene/codecs/TestCodecUtil.java    |   57 +-
 ...tLucene50StoredFieldsFormatHighCompression.java |   11 +-
 .../codecs/lucene60/TestLucene60PointsFormat.java  |  401 --
 .../lucene70/TestLucene70SegmentInfoFormat.java    |   35 -
 .../codecs/lucene80/TestLucene80NormsFormat.java   |    4 +-
 .../codecs/lucene86/TestLucene86PointsFormat.java  |  393 ++
 .../lucene86/TestLucene86SegmentInfoFormat.java    |   37 +
 .../org/apache/lucene/document/TestDocument.java   |   12 +-
 .../org/apache/lucene/geo/TestTessellator.java     |    8 +
 .../org/apache/lucene/index/TestAddIndexes.java    |    2 +-
 .../lucene/index/TestAllFilesDetectBitFlips.java   |  141 +
 .../lucene/index/TestAllFilesDetectTruncation.java |    4 +-
 .../lucene/index/TestConcurrentMergeScheduler.java |    8 +-
 .../lucene/index/TestDemoParallelLeafReader.java   |    2 +-
 .../lucene/index/TestFlushByRamOrCountsPolicy.java |    8 +-
 .../apache/lucene/index/TestForceMergeForever.java |    2 +-
 .../org/apache/lucene/index/TestIndexSorting.java  |    5 +-
 .../org/apache/lucene/index/TestIndexWriter.java   |   40 +-
 .../apache/lucene/index/TestIndexWriterDelete.java |    6 +-
 .../lucene/index/TestIndexWriterExceptions.java    |    4 +-
 .../lucene/index/TestIndexWriterExceptions2.java   |    6 +-
 .../lucene/index/TestIndexWriterMaxDocs.java       |    2 +-
 .../lucene/index/TestIndexWriterOnDiskFull.java    |    2 +-
 .../apache/lucene/index/TestIndexWriterReader.java |   15 +-
 .../lucene/index/TestIndexWriterWithThreads.java   |    6 +-
 .../org/apache/lucene/index/TestMergePolicy.java   |  159 +
 .../lucene/index/TestNRTReaderWithThreads.java     |    4 +-
 .../apache/lucene/index/TestPerSegmentDeletes.java |   10 +-
 .../org/apache/lucene/index/TestPointValues.java   |    4 +-
 .../org/apache/lucene/index/TestSegmentInfos.java  |   65 +
 .../index/TestSoftDeletesRetentionMergePolicy.java |   14 +-
 .../apache/lucene/index/TestTermsHashPerField.java |  209 +
 .../apache/lucene/index/TestTieredMergePolicy.java |    6 +-
 .../index/TestTragicIndexWriterDeadlock.java       |    2 +-
 .../apache/lucene/search/MultiCollectorTest.java   |  172 +
 .../apache/lucene/search/TermInSetQueryTest.java   |   42 +
 .../org/apache/lucene/search/TestBoolean2.java     |    8 +-
 .../search/TestFieldSortOptimizationSkipping.java  |  294 ++
 .../org/apache/lucene/search/TestFuzzyQuery.java   |  130 +-
 .../apache/lucene/search/TestLRUQueryCache.java    |   17 +-
 .../lucene/search/TestMultiTermConstantScore.java  |    3 +-
 .../org/apache/lucene/search/TestPointQueries.java |    8 +-
 .../org/apache/lucene/search/TestRegexpQuery.java  |   37 +-
 .../lucene/search/TestSameScoresWithThreads.java   |    1 +
 .../org/apache/lucene/search/TestSearchAfter.java  |    2 +-
 .../apache/lucene/search/TestSearcherManager.java  |    5 +-
 .../org/apache/lucene/search/TestTermQuery.java    |    7 +-
 .../test/org/apache/lucene/util/TestCharsRef.java  |    2 +
 .../org/apache/lucene/util/TestOfflineSorter.java  |   17 +-
 .../test/org/apache/lucene/util/TestVersion.java   |    1 +
 .../apache/lucene/util/automaton/TestRegExp.java   |  148 +
 .../apache/lucene/util/bkd/Test2BBKDPoints.java    |   12 +-
 .../test/org/apache/lucene/util/bkd/TestBKD.java   |   92 +-
 .../test/org/apache/lucene/util/fst/Test2BFST.java |   16 +-
 .../lucene/util/fst/TestFSTDirectAddressing.java   |    4 +-
 .../test/org/apache/lucene/util/fst/TestFSTs.java  |   26 +-
 .../apache/lucene/util/packed/TestPackedInts.java  |    4 +-
 lucene/demo/build.gradle                           |    2 +
 lucene/expressions/build.gradle                    |    2 +
 .../lucene/expressions/ExpressionValueSource.java  |    2 +-
 .../expressions/TestExpressionValueSource.java     |   58 +
 lucene/facet/build.gradle                          |    1 +
 .../org/apache/lucene/facet/DrillSideways.java     |    3 +-
 .../java/org/apache/lucene/facet/FacetsConfig.java |   11 +-
 lucene/grouping/build.gradle                       |    2 +
 .../search/grouping/BlockGroupingCollector.java    |    4 +
 .../apache/lucene/search/grouping/DoubleRange.java |   59 +
 .../lucene/search/grouping/DoubleRangeFactory.java |   67 +
 .../search/grouping/DoubleRangeGroupSelector.java  |  100 +
 .../grouping/FirstPassGroupingCollector.java       |    1 +
 .../lucene/search/grouping/GroupSelector.java      |   10 +-
 .../lucene/search/grouping/GroupingSearch.java     |   10 +-
 .../apache/lucene/search/grouping/LongRange.java   |   58 +
 .../lucene/search/grouping/LongRangeFactory.java   |   67 +
 .../search/grouping/LongRangeGroupSelector.java    |  101 +
 .../grouping/SecondPassGroupingCollector.java      |    1 +
 .../lucene/search/grouping/TermGroupSelector.java  |    4 +
 .../search/grouping/ValueSourceGroupSelector.java  |   10 +-
 .../lucene/search/grouping/package-info.java       |   23 +-
 .../search/grouping/AbstractGroupingTestCase.java  |   45 +
 .../search/grouping/BaseGroupSelectorTestCase.java |  365 ++
 .../lucene/search/grouping/BlockGroupingTest.java  |  225 +
 .../grouping/DoubleRangeGroupSelectorTest.java     |   59 +
 .../grouping/LongRangeGroupSelectorTest.java       |   59 +
 .../search/grouping/TermGroupSelectorTest.java     |   60 +
 .../search/grouping/TestDoubleRangeFactory.java    |   39 +
 .../lucene/search/grouping/TestGrouping.java       |    2 +
 .../search/grouping/TestLongRangeFactory.java      |   39 +
 .../grouping/ValueSourceGroupSelectorTest.java     |   51 +
 lucene/highlighter/build.gradle                    |    2 +
 .../search/uhighlight/MultiTermHighlighting.java   |    5 +-
 .../search/uhighlight/UnifiedHighlighter.java      |    2 +
 .../lucene/search/highlight/HighlighterTest.java   |   27 +-
 .../lucene/search/highlight/TokenSourcesTest.java  |    2 +
 .../highlight/custom/HighlightCustomQueryTest.java |   23 +-
 lucene/ivy-versions.properties                     |    9 +-
 lucene/join/build.gradle                           |    2 +
 .../search/join/ToParentBlockJoinSortField.java    |   12 +-
 .../lucene/search/join/TestBlockJoinSelector.java  |    9 +-
 lucene/licenses/hppc-0.8.1.jar.sha1                |    1 -
 lucene/licenses/hppc-0.8.2.jar.sha1                |    1 +
 lucene/licenses/log4j-api-2.11.2.jar.sha1          |    1 -
 lucene/licenses/log4j-api-2.13.2.jar.sha1          |    1 +
 lucene/licenses/log4j-core-2.11.2.jar.sha1         |    1 -
 lucene/licenses/log4j-core-2.13.2.jar.sha1         |    1 +
 lucene/luke/build.gradle                           |    2 +
 .../apache/lucene/luke/app/AbstractHandler.java    |    4 +-
 .../dialog/documents/AddDocumentDialogFactory.java |    2 +-
 .../dialog/menubar/ExportTermsDialogFactory.java   |    4 +-
 .../luke/models/documents/DocumentsImpl.java       |    4 +-
 .../apache/lucene/luke/models/util/IndexUtils.java |    8 +-
 .../util/twentynewsgroups/MessageFilesParser.java  |    2 +-
 .../luke/util/reflection/SubtypeCollector.java     |    2 +-
 lucene/memory/build.gradle                         |    2 +
 lucene/misc/build.gradle                           |    2 +
 .../lucene/util/fst/UpToTwoPositiveIntOutputs.java |    3 +-
 .../similarity/TestLegacyBM25Similarity.java       |    1 +
 lucene/monitor/build.gradle                        |    2 +
 .../org/apache/lucene/monitor/DocumentBatch.java   |   12 +-
 .../apache/lucene/monitor/TestDocumentBatch.java   |   58 +
 lucene/queries/build.gradle                        |    2 +
 .../lucene/queries/function/FunctionQuery.java     |    2 +-
 .../queries/function/FunctionRangeQuery.java       |    3 +-
 .../queries/function/FunctionScoreQuery.java       |    8 +-
 .../lucene/queries/function/ValueSource.java       |   28 +-
 .../function/valuesource/BytesRefFieldSource.java  |    2 +-
 .../valuesource/ComparisonBoolFunction.java        |    4 +-
 .../function/valuesource/ConstValueSource.java     |    2 +-
 .../queries/function/valuesource/DefFunction.java  |    2 +-
 .../function/valuesource/DocFreqValueSource.java   |  181 +-
 .../valuesource/DoubleConstValueSource.java        |    2 +-
 .../function/valuesource/DoubleFieldSource.java    |    4 +-
 .../function/valuesource/DualFloatFunction.java    |    4 +-
 .../function/valuesource/EnumFieldSource.java      |    2 +-
 .../function/valuesource/FloatFieldSource.java     |    4 +-
 .../function/valuesource/IDFValueSource.java       |    4 +-
 .../queries/function/valuesource/IfFunction.java   |    4 +-
 .../function/valuesource/IntFieldSource.java       |    4 +-
 .../valuesource/JoinDocFreqValueSource.java        |    2 +-
 .../function/valuesource/LinearFloatFunction.java  |    4 +-
 .../function/valuesource/LiteralValueSource.java   |    2 +-
 .../function/valuesource/LongFieldSource.java      |    4 +-
 .../function/valuesource/MaxDocValueSource.java    |    8 +-
 .../function/valuesource/MultiBoolFunction.java    |    4 +-
 .../function/valuesource/MultiFloatFunction.java   |    4 +-
 .../function/valuesource/MultiFunction.java        |    4 +-
 .../valuesource/MultiValuedDoubleFieldSource.java  |    2 +-
 .../valuesource/MultiValuedFloatFieldSource.java   |    2 +-
 .../valuesource/MultiValuedIntFieldSource.java     |    2 +-
 .../valuesource/MultiValuedLongFieldSource.java    |    2 +-
 .../function/valuesource/NormValueSource.java      |    4 +-
 .../function/valuesource/NumDocsValueSource.java   |    4 +-
 .../function/valuesource/QueryValueSource.java     |    8 +-
 .../valuesource/RangeMapFloatFunction.java         |    4 +-
 .../valuesource/ReciprocalFloatFunction.java       |    4 +-
 .../function/valuesource/ScaleFloatFunction.java   |    6 +-
 .../function/valuesource/SimpleBoolFunction.java   |    4 +-
 .../function/valuesource/SimpleFloatFunction.java  |    2 +-
 .../function/valuesource/SingleFunction.java       |    2 +-
 .../function/valuesource/SortedSetFieldSource.java |    2 +-
 .../valuesource/SumTotalTermFreqValueSource.java   |    4 +-
 .../function/valuesource/TFValueSource.java        |    2 +-
 .../function/valuesource/TermFreqValueSource.java  |    2 +-
 .../valuesource/TotalTermFreqValueSource.java      |    4 +-
 .../function/valuesource/VectorValueSource.java    |    4 +-
 .../lucene/queries/intervals/IntervalMatches.java  |    1 +
 .../queries/function/TestFunctionScoreQuery.java   |   32 +
 .../lucene/queries/function/TestValueSources.java  |   10 +-
 lucene/queryparser/build.gradle                    |    2 +
 lucene/replicator/build.gradle                     |    2 +
 .../lucene/replicator/ReplicatorTestCase.java      |    2 +
 .../apache/lucene/replicator/nrt/SimpleServer.java |    1 +
 .../lucene/replicator/nrt/TestNRTReplication.java  |   17 +-
 .../replicator/nrt/TestStressNRTReplication.java   |    6 +-
 lucene/sandbox/build.gradle                        |    2 +
 .../idversion/VersionBlockTreeTermsWriter.java     |    2 +-
 .../codecs/idversion/VersionFieldReader.java       |    2 +-
 .../lucene/search/LatLonPointPrototypeQueries.java |    4 +-
 .../apache/lucene/search/PhraseWildcardQuery.java  |    2 +-
 .../document/TestFloatPointNearestNeighbor.java    |    2 +-
 .../test/org/apache/lucene/search/TestNearest.java |    2 +-
 .../lucene/search/TestPhraseWildcardQuery.java     |    3 +-
 .../lucene/search/TestTermAutomatonQuery.java      |    3 +-
 lucene/site/xsl/index.template.md                  |   50 +
 lucene/site/xsl/index.xsl                          |    6 +-
 lucene/spatial-extras/build.gradle                 |    2 +
 .../org/apache/lucene/spatial/SpatialStrategy.java |    2 +-
 .../lucene/spatial/bbox/BBoxValueSource.java       |    2 +-
 .../lucene/spatial/prefix/HeatmapFacetCounter.java |    4 +-
 .../spatial/prefix/WithinPrefixTreeQuery.java      |    6 +-
 .../spatial/prefix/tree/PackedQuadPrefixTree.java  |    8 +-
 .../lucene/spatial/prefix/tree/QuadPrefixTree.java |   10 +-
 .../spatial/spatial4j/Geo3dShapeFactory.java       |    2 +
 .../lucene/spatial/DistanceStrategyTest.java       |   14 +-
 .../org/apache/lucene/spatial/PortedSolr3Test.java |   70 +-
 .../lucene/spatial/QueryEqualsHashCodeTest.java    |    4 +-
 .../org/apache/lucene/spatial/SpatialExample.java  |   10 +-
 .../org/apache/lucene/spatial/SpatialTestCase.java |    7 +-
 .../apache/lucene/spatial/StrategyTestCase.java    |    2 +-
 .../lucene/spatial/bbox/TestBBoxStrategy.java      |   32 +-
 .../lucene/spatial/prefix/DateNRStrategyTest.java  |    2 +-
 .../spatial/prefix/HeatmapFacetCounterTest.java    |   34 +-
 .../lucene/spatial/prefix/JtsPolygonTest.java      |    6 +-
 .../spatial/prefix/NumberRangeFacetsTest.java      |   11 +-
 .../prefix/RandomSpatialOpFuzzyPrefixTreeTest.java |    2 +-
 .../prefix/RandomSpatialOpStrategyTestCase.java    |    3 +-
 .../prefix/TestRecursivePrefixTreeStrategy.java    |    6 +-
 .../Geo3dShapeSphereModelRectRelationTest.java     |    2 +-
 .../spatial/spatial4j/RandomizedShapeTestCase.java |  233 -
 lucene/spatial3d/build.gradle                      |    2 +
 .../apache/lucene/spatial3d/TestGeo3DPoint.java    |    8 +-
 lucene/suggest/build.gradle                        |    2 +
 .../search/spell/LuceneLevenshteinDistance.java    |   24 +-
 .../suggest/analyzing/AnalyzingSuggester.java      |    4 +-
 .../suggest/analyzing/FreeTextSuggester.java       |    4 +-
 .../search/suggest/document/NRTSuggester.java      |    4 +-
 .../suggest/document/NRTSuggesterBuilder.java      |    2 +-
 .../search/suggest/fst/FSTCompletionLookup.java    |    4 +-
 .../search/suggest/fst/WFSTCompletionLookup.java   |    4 +-
 .../search/suggest/jaspell/JaspellLookup.java      |    4 +-
 .../search/spell/TestWordBreakSpellChecker.java    |    3 +-
 .../lucene/search/suggest/LookupBenchmarkTest.java |    2 +-
 .../lucene/search/suggest/PersistenceTest.java     |    3 +-
 .../suggest/analyzing/TestFreeTextSuggester.java   |    1 +
 .../suggest/analyzing/TestSuggestStopFilter.java   |    9 -
 .../search/suggest/document/TestSuggestField.java  |   13 +-
 lucene/test-framework/build.gradle                 |    2 +
 .../UniformSplitRot13PostingsFormat.java           |   15 +
 .../STUniformSplitRot13PostingsFormat.java         |    7 +
 .../apache/lucene/geo/BaseGeoPointTestCase.java    |   10 +-
 .../org/apache/lucene/geo/BaseXYPointTestCase.java |   10 +-
 .../lucene/index/BaseIndexFileFormatTestCase.java  |    4 +-
 .../java/org/apache/lucene/index/RandomCodec.java  |   16 +-
 .../org/apache/lucene/index/RandomIndexWriter.java |   54 +-
 .../ThreadedIndexingAndSearchingTestCase.java      |   24 +-
 .../lucene/search/AssertingLeafCollector.java      |    6 +-
 .../java/org/apache/lucene/search/CheckHits.java   |   75 +-
 .../java/org/apache/lucene/search/QueryUtils.java  |   26 +-
 .../lucene/search/ShardSearchingTestBase.java      |    3 +-
 .../search/similarities/AssertingSimilarity.java   |    2 +-
 .../java/org/apache/lucene/util/LineFileDocs.java  |   17 +-
 .../org/apache/lucene/util/LuceneTestCase.java     |   26 +
 .../util/TestRuleSetupAndRestoreClassEnv.java      |   29 +-
 .../src/java/org/apache/lucene/util/TestUtil.java  |    4 +-
 .../java/org/apache/lucene/util/fst/FSTTester.java |    5 +-
 .../lucene/search/TestBaseExplanationTestCase.java |   12 +-
 .../util/TestExceptionInBeforeClassHooks.java      |    3 +-
 solr/CHANGES.txt                                   |  223 +-
 solr/NOTICE.txt                                    |   10 +-
 solr/bin/solr                                      |   36 +-
 solr/bin/solr.cmd                                  |   33 +-
 solr/bin/solr.in.cmd                               |   14 +-
 solr/bin/solr.in.sh                                |   15 +-
 solr/build.gradle                                  |    2 +
 solr/build.xml                                     |    2 +-
 solr/contrib/analysis-extras/build.gradle          |    2 +
 ...ExtractNamedEntitiesUpdateProcessorFactory.java |   13 +-
 solr/contrib/analytics/build.gradle                |    2 +
 .../apache/solr/analytics/ExpressionFactory.java   |   78 +-
 .../apache/solr/analytics/facet/PivotFacet.java    |   77 +-
 .../function/mapping/ComparisonFunction.java       |  320 +-
 .../function/mapping/DateMathFunction.java         |  171 +-
 .../function/mapping/DateParseFunction.java        |  261 +-
 .../mapping/DecimalNumericConversionFunction.java  |  283 +-
 .../analytics/function/mapping/EqualFunction.java  |  301 +-
 .../analytics/function/mapping/ExistsFunction.java |  143 +-
 .../function/mapping/FillMissingFunction.java      | 1283 ++---
 .../analytics/function/mapping/FilterFunction.java | 1075 ++--
 .../analytics/function/mapping/IfFunction.java     | 1268 ++---
 .../analytics/function/mapping/LambdaFunction.java | 4044 +++++++--------
 .../analytics/function/mapping/RemoveFunction.java | 1187 ++---
 .../function/mapping/ReplaceFunction.java          | 1521 +++---
 .../analytics/function/reduction/MaxFunction.java  |  405 +-
 .../function/reduction/MedianFunction.java         |  237 +-
 .../analytics/function/reduction/MinFunction.java  |  405 +-
 .../function/reduction/OrdinalFunction.java        |  489 +-
 .../function/reduction/PercentileFunction.java     |  453 +-
 .../solr/analytics/util/FacetRangeGenerator.java   |  132 +-
 .../solr/analytics/util/MedianCalculator.java      |    6 +-
 .../solr/analytics/util/OrdinalCalculator.java     |   15 +-
 .../org/apache/solr/handler/AnalyticsHandler.java  |    6 -
 .../solr/handler/component/AnalyticsComponent.java |    2 +-
 .../response/AnalyticsShardResponseWriter.java     |    2 +-
 .../analytics/legacy/LegacyNoFacetCloudTest.java   |   32 +-
 .../solr/analytics/legacy/LegacyNoFacetTest.java   |   32 +-
 .../LegacyAbstractAnalyticsFacetCloudTest.java     |    2 +-
 .../facet/LegacyAbstractAnalyticsFacetTest.java    |    4 +-
 .../legacy/facet/LegacyFieldFacetTest.java         |    1 +
 solr/contrib/clustering/build.gradle               |    2 +
 .../handler/clustering/ClusteringComponent.java    |   20 +-
 .../clustering/carrot2/CarrotClusteringEngine.java |   20 +-
 .../carrot2/LuceneCarrot2StemmerFactory.java       |   10 +-
 .../clustering/carrot2/SolrResourceLocator.java    |    8 +-
 solr/contrib/dataimporthandler-extras/build.gradle |    2 +
 .../handler/dataimport/MailEntityProcessor.java    |  103 +-
 .../handler/dataimport/TikaEntityProcessor.java    |    1 +
 .../dataimport/TestMailEntityProcessor.java        |   13 +-
 solr/contrib/dataimporthandler/build.gradle        |    2 +
 .../solr/handler/dataimport/BinURLDataSource.java  |    6 +-
 .../solr/handler/dataimport/ClobTransformer.java   |    1 +
 .../apache/solr/handler/dataimport/Context.java    |    2 +
 .../solr/handler/dataimport/ContextImpl.java       |    6 +-
 .../solr/handler/dataimport/DataImportHandler.java |   10 +-
 .../solr/handler/dataimport/DataImporter.java      |   10 +-
 .../handler/dataimport/DateFormatTransformer.java  |    1 +
 .../solr/handler/dataimport/DebugLogger.java       |   12 +-
 .../apache/solr/handler/dataimport/DocBuilder.java |   42 +-
 .../handler/dataimport/EntityProcessorWrapper.java |   22 +-
 .../solr/handler/dataimport/FileDataSource.java    |   12 +-
 .../handler/dataimport/HTMLStripTransformer.java   |    1 +
 .../solr/handler/dataimport/JdbcDataSource.java    |   20 +-
 .../dataimport/NumberFormatTransformer.java        |    1 +
 .../dataimport/PlainTextEntityProcessor.java       |    1 +
 .../solr/handler/dataimport/RegexTransformer.java  |    6 +-
 .../handler/dataimport/SimplePropertiesWriter.java |    6 +-
 .../apache/solr/handler/dataimport/SolrWriter.java |   10 +-
 .../handler/dataimport/SqlEntityProcessor.java     |   10 +-
 .../handler/dataimport/TemplateTransformer.java    |    5 +-
 .../solr/handler/dataimport/URLDataSource.java     |    6 +-
 .../handler/dataimport/XPathEntityProcessor.java   |   20 +-
 .../solr/handler/dataimport/XPathRecordReader.java |    3 +-
 .../handler/dataimport/ZKPropertiesWriter.java     |    4 +-
 .../dataimport/config/DIHConfiguration.java        |    8 +-
 .../dataimporthandler/src/test-files/log4j2.xml    |   42 +
 .../src/test-files/solr/collection1/README         |    1 +
 .../solr/configsets/dihconfigset/conf/README       |    2 +
 .../solr/configsets/dihconfigset/conf/schema.xml   |   70 +
 .../configsets/dihconfigset/conf/solrconfig.xml    |  287 ++
 .../dataimporthandler/src/test-files/solr/solr.xml |   27 +
 .../dataimport/AbstractDIHCacheTestCase.java       |    2 +-
 .../AbstractDataImportHandlerTestCase.java         |    9 +-
 .../AbstractSqlEntityProcessorTestCase.java        |   23 +-
 .../dataimport/MockInitialContextFactory.java      |    2 +-
 .../handler/dataimport/TestClobTransformer.java    |    2 +
 .../solr/handler/dataimport/TestDataConfig.java    |    1 +
 .../solr/handler/dataimport/TestDocBuilder.java    |   10 +-
 .../solr/handler/dataimport/TestDocBuilder2.java   |   16 +-
 .../handler/dataimport/TestEphemeralCache.java     |    3 +
 .../solr/handler/dataimport/TestErrorHandling.java |    1 +
 .../solr/handler/dataimport/TestFieldReader.java   |    1 +
 .../dataimport/TestFileListEntityProcessor.java    |    8 +-
 .../dataimport/TestJdbcDataSourceConvertType.java  |    2 +-
 .../dataimport/TestLineEntityProcessor.java        |    8 +
 .../dataimport/TestPlainTextEntityProcessor.java   |    3 +
 .../handler/dataimport/TestRegexTransformer.java   |    5 +
 .../handler/dataimport/TestScriptTransformer.java  |    4 +-
 .../dataimport/TestSolrEntityProcessorUnit.java    |    3 +-
 .../dataimport/TestSortedMapBackedCache.java       |    6 +-
 .../dataimport/TestSqlEntityProcessorDelta.java    |   12 +-
 .../dataimport/TestTemplateTransformer.java        |    4 +
 .../handler/dataimport/TestVariableResolver.java   |    1 +
 .../solr/handler/dataimport/TestWriterImpl.java    |    2 +
 .../dataimport/TestXPathEntityProcessor.java       |   15 +
 .../handler/dataimport/TestXPathRecordReader.java  |    1 +
 .../handler/dataimport/TestZKPropertiesWriter.java |  208 +-
 solr/contrib/extraction/build.gradle               |    2 +
 .../extraction/ExtractingDocumentLoader.java       |    8 +-
 .../extraction/ExtractingRequestHandler.java       |    2 +-
 .../extraction/RegexRulesPasswordProvider.java     |    4 +-
 .../handler/extraction/XLSXResponseWriter.java     |    4 +-
 .../extraction/ExtractingRequestHandlerTest.java   |    3 +
 .../contrib/jaegertracer-configurator/build.gradle |    2 +
 .../solr/jaeger/JaegerTracerConfigurator.java      |    2 +-
 .../apache/solr/jaeger/TestJaegerConfigurator.java |    4 +
 solr/contrib/langid/build.gradle                   |    2 +
 .../LanguageIdentifierUpdateProcessor.java         |   48 +-
 .../OpenNLPLangDetectUpdateProcessorFactory.java   |    2 +-
 .../TikaLanguageIdentifierUpdateProcessor.java     |    5 +-
 solr/contrib/ltr/build.gradle                      |    2 +
 .../java/org/apache/solr/ltr/LTRThreadModule.java  |    7 +-
 .../java/org/apache/solr/ltr/feature/Feature.java  |    1 +
 .../org/apache/solr/ltr/model/LTRScoringModel.java |    1 +
 .../org/apache/solr/ltr/model/LinearModel.java     |    1 +
 .../solr/ltr/model/MultipleAdditiveTreesModel.java |    4 +
 .../apache/solr/ltr/model/NeuralNetworkModel.java  |    4 +
 .../LTRFeatureLoggerTransformerFactory.java        |    1 +
 .../apache/solr/ltr/search/LTRQParserPlugin.java   |    1 +
 .../solr/ltr/store/rest/ManagedModelStore.java     |    5 +-
 .../apache/solr/ltr/TestLTRReRankingPipeline.java  |    6 +-
 .../test/org/apache/solr/ltr/TestRerankBase.java   |   10 +-
 .../TestFeatureExtractionFromMultipleSegments.java |    2 +
 .../solr/ltr/feature/TestNoMatchSolrFeature.java   |    4 +
 .../solr/ltr/feature/TestOriginalScoreFeature.java |    6 +
 .../solr/ltr/model/TestNeuralNetworkModel.java     |    1 +
 .../store/rest/TestModelManagerPersistence.java    |    4 +
 solr/contrib/prometheus-exporter/build.gradle      |    2 +
 .../collector/SchedulerMetricsCollector.java       |    3 +-
 .../solr/prometheus/exporter/MetricsQuery.java     |    1 +
 .../exporter/PrometheusExporterSettings.java       |    4 +-
 .../solr/prometheus/exporter/SolrExporter.java     |    2 +-
 .../org/apache/solr/prometheus/scraper/Async.java  |    1 +
 .../solr/prometheus/scraper/SolrScraper.java       |    4 +-
 solr/contrib/velocity/build.gradle                 |    2 +
 .../solr/response/VelocityResponseWriter.java      |   12 +-
 solr/core/build.gradle                             |    3 +-
 solr/core/ivy.xml                                  |    1 -
 .../src/java/org/apache/solr/api/AnnotatedApi.java |   93 +-
 solr/core/src/java/org/apache/solr/api/ApiBag.java |   25 +-
 .../src/java/org/apache/solr/api/EndPoint.java     |    2 +-
 .../src/java/org/apache/solr/api/V2HttpCall.java   |    2 +
 .../client/solrj/embedded/EmbeddedSolrServer.java  |   13 +-
 .../client/solrj/embedded/JettySolrRunner.java     |    6 +-
 .../apache/solr/cloud/ActiveReplicaWatcher.java    |   19 +-
 .../apache/solr/cloud/CloudConfigSetService.java   |    3 +-
 .../src/java/org/apache/solr/cloud/CloudUtil.java  |   15 +-
 .../org/apache/solr/cloud/ElectionContext.java     |  707 ---
 .../apache/solr/cloud/ExclusiveSliceProperty.java  |   10 +-
 .../java/org/apache/solr/cloud/LeaderElector.java  |    2 +-
 .../src/java/org/apache/solr/cloud/LockTree.java   |   56 +-
 .../src/java/org/apache/solr/cloud/Overseer.java   |  114 +-
 .../cloud/OverseerConfigSetMessageHandler.java     |   20 +-
 .../apache/solr/cloud/OverseerElectionContext.java |  110 +
 .../apache/solr/cloud/OverseerMessageHandler.java  |    7 +-
 .../apache/solr/cloud/OverseerNodePrioritizer.java |    6 +-
 .../apache/solr/cloud/OverseerSolrResponse.java    |    4 +-
 .../apache/solr/cloud/OverseerTaskProcessor.java   |  226 +-
 .../org/apache/solr/cloud/OverseerTaskQueue.java   |   13 +-
 .../solr/cloud/RecoveringCoreTermWatcher.java      |    4 +-
 .../org/apache/solr/cloud/RecoveryStrategy.java    |  101 +-
 .../solr/cloud/ShardLeaderElectionContext.java     |  493 ++
 .../solr/cloud/ShardLeaderElectionContextBase.java |  194 +
 .../java/org/apache/solr/cloud/SolrZkServer.java   |   10 +-
 .../java/org/apache/solr/cloud/SyncStrategy.java   |   29 +-
 .../core/src/java/org/apache/solr/cloud/ZkCLI.java |   16 +-
 .../java/org/apache/solr/cloud/ZkController.java   |  272 +-
 .../org/apache/solr/cloud/ZkDistributedQueue.java  |   17 +-
 .../java/org/apache/solr/cloud/ZkShardTerms.java   |    1 +
 .../apache/solr/cloud/ZkSolrResourceLoader.java    |    2 +-
 .../solr/cloud/api/collections/AddReplicaCmd.java  |   49 +-
 .../solr/cloud/api/collections/AliasCmd.java       |    1 +
 .../apache/solr/cloud/api/collections/Assign.java  |   80 +-
 .../solr/cloud/api/collections/BackupCmd.java      |    9 +-
 .../solr/cloud/api/collections/CreateAliasCmd.java |    2 +-
 .../cloud/api/collections/CreateCollectionCmd.java |   53 +-
 .../solr/cloud/api/collections/CreateShardCmd.java |    1 +
 .../cloud/api/collections/CreateSnapshotCmd.java   |    6 +-
 .../solr/cloud/api/collections/DeleteAliasCmd.java |    2 +-
 .../cloud/api/collections/DeleteCollectionCmd.java |    3 +-
 .../solr/cloud/api/collections/DeleteNodeCmd.java  |    7 +-
 .../cloud/api/collections/DeleteReplicaCmd.java    |   10 +-
 .../solr/cloud/api/collections/DeleteShardCmd.java |    5 +-
 .../cloud/api/collections/DeleteSnapshotCmd.java   |    6 +-
 .../api/collections/MaintainRoutedAliasCmd.java    |    8 +-
 .../solr/cloud/api/collections/MigrateCmd.java     |    5 +-
 .../solr/cloud/api/collections/MoveReplicaCmd.java |   16 +-
 .../OverseerCollectionMessageHandler.java          |   88 +-
 .../cloud/api/collections/OverseerRoleCmd.java     |    6 +-
 .../cloud/api/collections/OverseerStatusCmd.java   |    7 +-
 .../api/collections/ReindexCollectionCmd.java      |   16 +-
 .../solr/cloud/api/collections/RenameCmd.java      |    2 +-
 .../solr/cloud/api/collections/ReplaceNodeCmd.java |    5 +-
 .../solr/cloud/api/collections/RestoreCmd.java     |   14 +-
 .../solr/cloud/api/collections/RoutedAlias.java    |    9 +-
 .../cloud/api/collections/SetAliasPropCmd.java     |    2 +-
 .../solr/cloud/api/collections/SplitShardCmd.java  |    5 +-
 .../solr/cloud/api/collections/UtilizeNodeCmd.java |    4 +-
 .../autoscaling/AutoAddReplicasPlanAction.java     |   47 +-
 .../apache/solr/cloud/autoscaling/AutoScaling.java |    2 +
 .../solr/cloud/autoscaling/AutoScalingHandler.java |   10 +
 .../solr/cloud/autoscaling/ComputePlanAction.java  |  174 +-
 .../solr/cloud/autoscaling/ExecutePlanAction.java  |    2 +
 .../cloud/autoscaling/InactiveShardPlanAction.java |    1 +
 .../solr/cloud/autoscaling/IndexSizeTrigger.java   |    2 +
 .../solr/cloud/autoscaling/MetricTrigger.java      |    1 +
 .../solr/cloud/autoscaling/NodeAddedTrigger.java   |    2 +
 .../solr/cloud/autoscaling/NodeLostTrigger.java    |    2 +
 .../solr/cloud/autoscaling/ScheduledTriggers.java  |    3 +
 .../solr/cloud/autoscaling/SearchRateTrigger.java  |    5 +
 .../solr/cloud/autoscaling/SystemLogListener.java  |    2 +
 .../apache/solr/cloud/autoscaling/TriggerBase.java |    3 +
 .../solr/cloud/autoscaling/TriggerEvent.java       |    4 +
 .../solr/cloud/autoscaling/TriggerEventQueue.java  |    2 +
 .../solr/cloud/autoscaling/TriggerUtils.java       |    1 +
 .../cloud/autoscaling/sim/SimCloudManager.java     |    9 +-
 .../autoscaling/sim/SimClusterStateProvider.java   |  298 +-
 .../autoscaling/sim/SimDistribStateManager.java    |    1 +
 .../sim/SimDistributedQueueFactory.java            |    1 +
 .../autoscaling/sim/SimNodeStateProvider.java      |    3 +
 .../solr/cloud/autoscaling/sim/SimScenario.java    |   19 +-
 .../solr/cloud/autoscaling/sim/SimUtils.java       |    1 +
 .../autoscaling/sim/SnapshotCloudManager.java      |    3 +
 .../sim/SnapshotClusterStateProvider.java          |   34 +-
 .../sim/SnapshotDistribStateManager.java           |    2 +
 .../autoscaling/sim/SnapshotNodeStateProvider.java |    3 +
 .../solr/cloud/overseer/ClusterStateMutator.java   |   19 +-
 .../solr/cloud/overseer/CollectionMutator.java     |    3 +-
 .../apache/solr/cloud/overseer/ReplicaMutator.java |   44 +-
 .../apache/solr/cloud/overseer/ZkStateWriter.java  |   43 +-
 .../apache/solr/cloud/rule/ReplicaAssigner.java    |   13 +-
 .../src/java/org/apache/solr/cloud/rule/Rule.java  |   13 +-
 .../solr/cloud/rule/ServerSnitchContext.java       |    1 +
 .../solr/core/AbstractSolrEventListener.java       |    5 +-
 .../java/org/apache/solr/core/BlobRepository.java  |    9 +-
 .../apache/solr/core/CachingDirectoryFactory.java  |    4 +-
 .../java/org/apache/solr/core/CodecFactory.java    |    2 +-
 .../java/org/apache/solr/core/ConfigOverlay.java   |   14 +
 .../src/java/org/apache/solr/core/ConfigSet.java   |    3 +
 .../org/apache/solr/core/ConfigSetProperties.java  |    2 +
 .../org/apache/solr/core/ConfigSetService.java     |    3 +
 .../java/org/apache/solr/core/CoreContainer.java   |  153 +-
 .../java/org/apache/solr/core/CoreDescriptor.java  |   10 +-
 .../apache/solr/core/CorePropertiesLocator.java    |    6 +-
 .../org/apache/solr/core/DirectoryFactory.java     |   19 +-
 .../org/apache/solr/core/HdfsDirectoryFactory.java |    2 +-
 .../solr/core/IndexDeletionPolicyWrapper.java      |    4 +-
 .../org/apache/solr/core/IndexReaderFactory.java   |    2 +-
 .../src/java/org/apache/solr/core/InitParams.java  |   12 +-
 .../org/apache/solr/core/MMapDirectoryFactory.java |    1 +
 .../java/org/apache/solr/core/MemClassLoader.java  |    5 +-
 .../solr/core/NRTCachingDirectoryFactory.java      |    1 +
 .../src/java/org/apache/solr/core/NodeConfig.java  |   40 +-
 .../src/java/org/apache/solr/core/PluginBag.java   |   27 +-
 .../src/java/org/apache/solr/core/PluginInfo.java  |    6 +-
 .../org/apache/solr/core/QuerySenderListener.java  |   54 +-
 .../java/org/apache/solr/core/RequestParams.java   |   57 +-
 .../org/apache/solr/core/SchemaCodecFactory.java   |    5 +-
 .../apache/solr/core/SimpleTextCodecFactory.java   |    1 +
 .../src/java/org/apache/solr/core/SolrConfig.java  |   21 +-
 .../src/java/org/apache/solr/core/SolrCore.java    |   25 +-
 .../org/apache/solr/core/SolrDeletionPolicy.java   |    2 +-
 .../src/java/org/apache/solr/core/SolrPaths.java   |   41 +-
 .../org/apache/solr/core/SolrResourceLoader.java   |  100 +-
 .../java/org/apache/solr/core/SolrXmlConfig.java   |   16 +
 .../solr/core/TransientSolrCoreCacheDefault.java   |    6 +-
 .../src/java/org/apache/solr/core/ZkContainer.java |   14 +-
 .../org/apache/solr/core/backup/BackupManager.java |    2 +-
 .../backup/repository/HdfsBackupRepository.java    |    1 +
 .../repository/LocalFileSystemRepository.java      |    3 +-
 .../solr/core/snapshots/SolrSnapshotManager.java   |    4 +-
 .../solr/core/snapshots/SolrSnapshotsTool.java     |    1 +
 .../apache/solr/filestore/DistribPackageStore.java |    8 +-
 .../org/apache/solr/filestore/PackageStoreAPI.java |    6 +-
 .../solr/handler/AnalysisRequestHandlerBase.java   |    3 +
 .../org/apache/solr/handler/AnalyzeEvaluator.java  |    2 +-
 .../java/org/apache/solr/handler/BlobHandler.java  |   16 +-
 .../java/org/apache/solr/handler/CatStream.java    |   20 +-
 .../solr/handler/CdcrBufferStateManager.java       |    6 +-
 .../solr/handler/CdcrLeaderStateManager.java       |    2 +-
 .../solr/handler/CdcrProcessStateManager.java      |    6 +-
 .../org/apache/solr/handler/CdcrReplicator.java    |   11 +-
 .../apache/solr/handler/CdcrReplicatorManager.java |   37 +-
 .../solr/handler/CdcrReplicatorScheduler.java      |    4 +-
 .../apache/solr/handler/CdcrRequestHandler.java    |   18 +-
 .../solr/handler/CdcrUpdateLogSynchronizer.java    |    8 +-
 .../solr/handler/ContentStreamHandlerBase.java     |    2 +-
 .../handler/DocumentAnalysisRequestHandler.java    |    8 +-
 .../apache/solr/handler/DumpRequestHandler.java    |   10 +-
 .../org/apache/solr/handler/ExportHandler.java     |   70 +-
 .../solr/handler/FieldAnalysisRequestHandler.java  |    3 +
 .../java/org/apache/solr/handler/GraphHandler.java |   23 +-
 .../java/org/apache/solr/handler/IndexFetcher.java |  109 +-
 .../apache/solr/handler/MoreLikeThisHandler.java   |    5 +-
 .../apache/solr/handler/PingRequestHandler.java    |    2 +-
 .../apache/solr/handler/ReplicationHandler.java    |   59 +-
 .../apache/solr/handler/RequestHandlerBase.java    |    8 +-
 .../java/org/apache/solr/handler/RestoreCore.java  |    3 +-
 .../java/org/apache/solr/handler/SQLHandler.java   |   10 +-
 .../org/apache/solr/handler/SchemaHandler.java     |   16 +-
 .../java/org/apache/solr/handler/SnapShooter.java  |   25 +-
 .../org/apache/solr/handler/SolrConfigHandler.java |   62 +-
 .../org/apache/solr/handler/StreamHandler.java     |   99 +-
 .../apache/solr/handler/UpdateRequestHandler.java  |    4 +-
 .../solr/handler/admin/AdminHandlersProxy.java     |    2 +
 .../handler/admin/AutoscalingHistoryHandler.java   |    1 +
 .../solr/handler/admin/BaseHandlerApiSupport.java  |    5 +-
 .../apache/solr/handler/admin/ClusterStatus.java   |   34 +-
 .../org/apache/solr/handler/admin/ColStatus.java   |    7 +-
 .../solr/handler/admin/CollectionsHandler.java     |   23 +-
 .../solr/handler/admin/ConfigSetsHandler.java      |    3 +
 .../solr/handler/admin/CoreAdminHandler.java       |    2 +-
 .../solr/handler/admin/CoreAdminOperation.java     |    7 +-
 .../solr/handler/admin/HealthCheckHandler.java     |    2 +-
 .../solr/handler/admin/IndexSizeEstimator.java     |    3 +
 .../org/apache/solr/handler/admin/InfoHandler.java |    2 +-
 .../apache/solr/handler/admin/LoggingHandler.java  |    2 +
 .../solr/handler/admin/LukeRequestHandler.java     |   34 +-
 .../handler/admin/MetricsCollectorHandler.java     |    2 +-
 .../apache/solr/handler/admin/MetricsHandler.java  |    7 +-
 .../solr/handler/admin/MetricsHistoryHandler.java  |    4 +
 .../solr/handler/admin/RebalanceLeaders.java       |    8 +-
 .../solr/handler/admin/SecurityConfHandler.java    |    7 +-
 .../handler/admin/SegmentsInfoRequestHandler.java  |    7 +-
 .../solr/handler/admin/ShowFileRequestHandler.java |    2 +-
 .../solr/handler/admin/SolrInfoMBeanHandler.java   |    4 +
 .../org/apache/solr/handler/admin/SplitOp.java     |    2 +
 .../solr/handler/admin/SystemInfoHandler.java      |   42 +-
 .../solr/handler/admin/ZookeeperInfoHandler.java   |  201 +-
 .../solr/handler/admin/ZookeeperReadAPI.java       |  145 +
 .../solr/handler/admin/ZookeeperStatusHandler.java |    8 +-
 .../solr/handler/component/CloudReplicaSource.java |    2 +
 .../solr/handler/component/DebugComponent.java     |    8 +
 .../solr/handler/component/ExpandComponent.java    |   15 +-
 .../solr/handler/component/FieldFacetStats.java    |    4 +-
 .../solr/handler/component/HighlightComponent.java |    9 +-
 .../solr/handler/component/HttpShardHandler.java   |  142 +-
 .../handler/component/HttpShardHandlerFactory.java |   10 +-
 .../handler/component/IterativeMergeStrategy.java  |    1 +
 .../solr/handler/component/MergeStrategy.java      |    1 +
 .../component/PhrasesIdentificationComponent.java  |    4 +
 .../component/PivotFacetFieldValueCollection.java  |    1 +
 .../solr/handler/component/PivotFacetHelper.java   |    5 +
 .../handler/component/PivotFacetProcessor.java     |    4 +-
 .../solr/handler/component/QueryComponent.java     |   37 +-
 .../handler/component/QueryElevationComponent.java |    7 +-
 .../handler/component/RangeFacetProcessor.java     |    1 +
 .../handler/component/RealTimeGetComponent.java    |   33 +-
 .../solr/handler/component/ResponseBuilder.java    |    6 +-
 .../solr/handler/component/SearchComponent.java    |    2 +-
 .../solr/handler/component/SearchHandler.java      |    4 +
 .../apache/solr/handler/component/ShardDoc.java    |    1 +
 .../component/ShardFieldSortedHitQueue.java        |    6 +-
 .../solr/handler/component/ShardRequestor.java     |  178 +
 .../handler/component/SortedDateStatsValues.java   |    6 +-
 .../component/SortedNumericStatsValues.java        |    6 +-
 .../handler/component/SpatialHeatmapFacets.java    |    4 +-
 .../handler/component/SpellCheckComponent.java     |   31 +-
 .../handler/component/StandaloneReplicaSource.java |    1 +
 .../solr/handler/component/StatsComponent.java     |  113 +-
 .../apache/solr/handler/component/StatsInfo.java   |  108 +
 .../apache/solr/handler/component/StatsValues.java |    2 +-
 .../solr/handler/component/StatsValuesFactory.java | 1385 ++---
 .../solr/handler/component/SuggestComponent.java   |   22 +-
 .../handler/component/TermVectorComponent.java     |    6 +-
 .../solr/handler/component/TermsComponent.java     |    4 +-
 .../org/apache/solr/handler/export/DoubleCmp.java  |   43 -
 .../org/apache/solr/handler/export/DoubleComp.java |   45 +
 .../apache/solr/handler/export/ExportWriter.java   |  275 +-
 .../org/apache/solr/handler/export/FloatCmp.java   |   44 -
 .../org/apache/solr/handler/export/FloatComp.java  |   44 +
 .../org/apache/solr/handler/export/IntComp.java    |   32 +-
 .../org/apache/solr/handler/export/LongCmp.java    |   45 -
 .../org/apache/solr/handler/export/LongComp.java   |   46 +
 .../solr/handler/export/SingleValueSortDoc.java    |    5 +
 .../org/apache/solr/handler/export/SortDoc.java    |    4 +
 .../solr/handler/export/StringFieldWriter.java     |   16 +-
 .../apache/solr/handler/export/StringValue.java    |   22 +-
 .../apache/solr/handler/loader/JavabinLoader.java  |    6 +-
 .../org/apache/solr/handler/loader/JsonLoader.java |   11 +-
 .../org/apache/solr/handler/loader/XMLLoader.java  |    2 +
 .../apache/solr/handler/sql/CalciteSolrDriver.java |   16 +-
 .../org/apache/solr/handler/sql/LimitStream.java   |    6 +-
 .../org/apache/solr/handler/sql/SolrAggregate.java |    1 +
 .../apache/solr/handler/sql/SolrEnumerator.java    |    3 +
 .../org/apache/solr/handler/sql/SolrFilter.java    |   16 +-
 .../org/apache/solr/handler/sql/SolrMethod.java    |    1 +
 .../org/apache/solr/handler/sql/SolrSchema.java    |   62 +-
 .../org/apache/solr/handler/sql/SolrTable.java     |   31 +-
 .../handler/sql/SolrToEnumerableConverter.java     |    3 +
 .../solr/handler/tagger/TaggerRequestHandler.java  |   12 +-
 .../solr/handler/tagger/TermPrefixCursor.java      |    1 +
 .../solr/highlight/DefaultSolrHighlighter.java     |  512 +-
 .../solr/highlight/HighlightingPluginBase.java     |    2 +-
 .../org/apache/solr/highlight/RegexFragmenter.java |    2 +-
 .../org/apache/solr/highlight/SolrEncoder.java     |    2 +-
 .../org/apache/solr/highlight/SolrFormatter.java   |    2 +-
 .../apache/solr/highlight/SolrFragListBuilder.java |    2 +-
 .../org/apache/solr/highlight/SolrFragmenter.java  |    2 +-
 .../solr/index/WrapperMergePolicyFactory.java      |    1 +
 .../org/apache/solr/internal/csv/CSVParser.java    |    4 +
 .../org/apache/solr/internal/csv/CSVPrinter.java   |    1 +
 .../java/org/apache/solr/logging/LogWatcher.java   |    2 +
 .../org/apache/solr/metrics/MetricSuppliers.java   |    5 +
 .../java/org/apache/solr/metrics/MetricsMap.java   |    3 +
 .../org/apache/solr/metrics/SolrMetricManager.java |    8 +-
 .../apache/solr/metrics/SolrMetricProducer.java    |    9 +-
 .../solr/metrics/reporters/SolrSlf4jReporter.java  |    1 +
 .../reporters/solr/SolrClusterReporter.java        |    4 +-
 .../solr/metrics/reporters/solr/SolrReporter.java  |   73 +-
 .../metrics/reporters/solr/SolrShardReporter.java  |    6 +-
 .../solr/metrics/rrd/SolrRrdBackendFactory.java    |    2 +-
 .../apache/solr/packagemanager/PackageManager.java |    5 +-
 .../solr/packagemanager/RepositoryManager.java     |    1 +
 .../solr/packagemanager/SolrPackageInstance.java   |    5 +
 .../src/java/org/apache/solr/pkg/PackageAPI.java   |    7 +
 .../java/org/apache/solr/pkg/PackageListeners.java |    4 +-
 .../java/org/apache/solr/pkg/PackageLoader.java    |   45 +-
 .../org/apache/solr/pkg/PackagePluginHolder.java   |   35 +-
 .../apache/solr/request/LocalSolrQueryRequest.java |   12 +-
 .../java/org/apache/solr/request/SimpleFacets.java |   12 +-
 .../apache/solr/request/SolrQueryRequestBase.java  |    1 +
 .../apache/solr/request/SolrRequestHandler.java    |    2 +-
 .../org/apache/solr/request/SolrRequestInfo.java   |   89 +-
 .../solr/request/json/JsonQueryConverter.java      |   52 +-
 .../org/apache/solr/request/json/ObjectUtil.java   |    8 +-
 .../apache/solr/response/BinaryResponseWriter.java |   11 +-
 .../apache/solr/response/CSVResponseWriter.java    |    4 +-
 .../org/apache/solr/response/DocsStreamer.java     |    1 +
 .../solr/response/GeoJSONResponseWriter.java       |   20 +-
 .../solr/response/GraphMLResponseWriter.java       |    8 +-
 .../apache/solr/response/JSONResponseWriter.java   |   25 +-
 .../java/org/apache/solr/response/JSONWriter.java  |   43 +-
 .../apache/solr/response/PHPResponseWriter.java    |    6 +-
 .../solr/response/PHPSerializedResponseWriter.java |   24 +-
 .../apache/solr/response/PythonResponseWriter.java |    4 +-
 .../apache/solr/response/QueryResponseWriter.java  |    2 +-
 .../apache/solr/response/RawResponseWriter.java    |    2 +-
 .../apache/solr/response/RubyResponseWriter.java   |    4 +-
 .../solr/response/SchemaXmlResponseWriter.java     |    2 +-
 .../org/apache/solr/response/SchemaXmlWriter.java  |   23 +-
 .../apache/solr/response/SmileResponseWriter.java  |    2 +-
 .../apache/solr/response/SolrQueryResponse.java    |    1 +
 .../solr/response/TabularResponseWriter.java       |   13 +-
 .../apache/solr/response/TextResponseWriter.java   |   16 +-
 .../apache/solr/response/XMLResponseWriter.java    |    2 +-
 .../java/org/apache/solr/response/XMLWriter.java   |   29 +-
 .../apache/solr/response/XSLTResponseWriter.java   |    2 +-
 .../response/transform/DocIdAugmenterFactory.java  |   31 +-
 .../transform/ExplainAugmenterFactory.java         |    2 +-
 .../response/transform/GeoTransformerFactory.java  |    1 +
 .../transform/RawValueTransformerFactory.java      |    3 +-
 .../response/transform/ShardAugmenterFactory.java  |    2 +-
 .../transform/SubQueryAugmenterFactory.java        |   54 +-
 .../response/transform/TransformerFactory.java     |    2 +-
 .../response/transform/ValueAugmenterFactory.java  |   80 +-
 .../response/transform/ValueSourceAugmenter.java   |    3 +
 .../org/apache/solr/rest/BaseSolrResource.java     |    8 +-
 .../java/org/apache/solr/rest/ManagedResource.java |    2 +
 .../analysis/ManagedSynonymFilterFactory.java      |    1 +
 .../analysis/ManagedSynonymGraphFilterFactory.java |    1 +
 .../src/java/org/apache/solr/schema/BoolField.java |  145 +-
 .../solr/schema/ClassicIndexSchemaFactory.java     |    2 +-
 .../org/apache/solr/schema/CurrencyFieldType.java  |    5 +-
 .../org/apache/solr/schema/DatePointField.java     |   49 +-
 .../solr/schema/ExternalFileFieldReloader.java     |    2 +-
 .../apache/solr/schema/FieldTypePluginLoader.java  |   11 +-
 .../java/org/apache/solr/schema/IndexSchema.java   |    7 +-
 .../solr/schema/LatLonPointSpatialField.java       |    1 +
 .../java/org/apache/solr/schema/LatLonType.java    |    4 +
 .../org/apache/solr/schema/ManagedIndexSchema.java |    6 +
 .../solr/schema/ManagedIndexSchemaFactory.java     |    2 +-
 .../solr/schema/OpenExchangeRatesOrgProvider.java  |    4 +-
 .../org/apache/solr/schema/RandomSortField.java    |    2 +-
 .../solr/schema/RptWithGeometrySpatialField.java   |    1 +
 .../java/org/apache/solr/schema/SchemaManager.java |    2 +
 .../org/apache/solr/schema/StrFieldSource.java     |    2 +-
 .../org/apache/solr/schema/TrieDoubleField.java    |    2 +-
 .../org/apache/solr/schema/TrieFloatField.java     |    2 +-
 .../java/org/apache/solr/schema/TrieIntField.java  |    2 +-
 .../java/org/apache/solr/schema/TrieLongField.java |    2 +-
 .../apache/solr/search/AbstractReRankQuery.java    |    2 +-
 .../java/org/apache/solr/search/CacheConfig.java   |    8 +
 .../org/apache/solr/search/CacheRegenerator.java   |    4 +-
 .../java/org/apache/solr/search/CaffeineCache.java |    5 +-
 .../solr/search/CollapsingQParserPlugin.java       |   12 +-
 .../solr/search/ComplexPhraseQParserPlugin.java    |    2 +-
 .../java/org/apache/solr/search/CursorMark.java    |    1 +
 .../src/java/org/apache/solr/search/DocList.java   |    3 +
 .../src/java/org/apache/solr/search/DocSlice.java  |   13 +-
 .../apache/solr/search/ExportQParserPlugin.java    |    5 +
 .../apache/solr/search/ExtendedDismaxQParser.java  |    5 +-
 .../solr/search/FloatPayloadValueSource.java       |    4 +-
 .../org/apache/solr/search/FunctionQParser.java    |    6 +-
 .../org/apache/solr/search/FunctionRangeQuery.java |    4 +
 .../solr/search/GraphTermsQParserPlugin.java       |   96 +-
 .../src/java/org/apache/solr/search/Grouping.java  |   42 +-
 .../solr/search/IGainTermsQParserPlugin.java       |    2 +
 .../org/apache/solr/search/MaxScoreCollector.java  |   10 +-
 .../java/org/apache/solr/search/QParserPlugin.java |    2 +-
 .../java/org/apache/solr/search/QueryCommand.java  |   10 +
 .../java/org/apache/solr/search/QueryContext.java  |    2 +
 .../java/org/apache/solr/search/QueryParsing.java  |    1 +
 .../org/apache/solr/search/QueryResultKey.java     |   15 +-
 .../src/java/org/apache/solr/search/RankQuery.java |    1 +
 .../org/apache/solr/search/ReRankCollector.java    |   12 +-
 .../solr/search/SignificantTermsQParserPlugin.java |    6 +
 .../src/java/org/apache/solr/search/SolrCache.java |    5 +-
 .../apache/solr/search/SolrConstantScoreQuery.java |    1 +
 .../org/apache/solr/search/SolrCoreParser.java     |    1 +
 .../apache/solr/search/SolrDocumentFetcher.java    |    1 +
 .../java/org/apache/solr/search/SolrFilter.java    |    6 +-
 .../org/apache/solr/search/SolrIndexSearcher.java  |   73 +-
 .../org/apache/solr/search/TermsQParserPlugin.java |    3 +
 .../TextLogisticRegressionQParserPlugin.java       |    4 +-
 .../org/apache/solr/search/ValueSourceParser.java  |  651 +--
 .../org/apache/solr/search/XmlQParserPlugin.java   |    3 +-
 .../apache/solr/search/facet/AggValueSource.java   |    1 +
 .../java/org/apache/solr/search/facet/AvgAgg.java  |   20 +-
 .../org/apache/solr/search/facet/CountAgg.java     |    4 +-
 .../org/apache/solr/search/facet/CountValsAgg.java |   10 +-
 .../org/apache/solr/search/facet/DocValuesAcc.java |  575 +--
 .../org/apache/solr/search/facet/FacetBucket.java  |   15 +-
 .../org/apache/solr/search/facet/FacetContext.java |   74 +
 .../apache/solr/search/facet/FacetDebugInfo.java   |    2 +-
 .../org/apache/solr/search/facet/FacetField.java   |   45 +-
 .../apache/solr/search/facet/FacetFieldMerger.java |    7 +-
 .../solr/search/facet/FacetFieldProcessor.java     |   35 +-
 .../search/facet/FacetFieldProcessorByArray.java   |    6 +-
 .../FacetFieldProcessorByEnumTermsStream.java      |    1 +
 .../search/facet/FacetFieldProcessorByHashDV.java  |    7 +-
 .../org/apache/solr/search/facet/FacetHeatmap.java |    8 +-
 .../org/apache/solr/search/facet/FacetModule.java  |  307 +-
 .../org/apache/solr/search/facet/FacetParser.java  |  637 +++
 .../apache/solr/search/facet/FacetProcessor.java   |    9 +-
 .../org/apache/solr/search/facet/FacetQuery.java   |    3 +-
 .../org/apache/solr/search/facet/FacetRange.java   | 1038 +---
 .../apache/solr/search/facet/FacetRangeMerger.java |    4 +-
 .../apache/solr/search/facet/FacetRangeParser.java |   76 +
 .../solr/search/facet/FacetRangeProcessor.java     | 1077 ++++
 .../org/apache/solr/search/facet/FacetRequest.java |  712 +--
 .../solr/search/facet/FacetRequestSorted.java      |   58 +
 .../search/facet/FacetRequestSortedMerger.java     |   10 +-
 .../java/org/apache/solr/search/facet/HLLAgg.java  |    8 +-
 .../org/apache/solr/search/facet/LegacyFacet.java  |    1 +
 .../org/apache/solr/search/facet/MinMaxAgg.java    |   19 +-
 .../org/apache/solr/search/facet/MissingAgg.java   |    4 +-
 .../apache/solr/search/facet/PercentileAgg.java    |    6 +-
 .../apache/solr/search/facet/RelatednessAgg.java   |  101 +-
 .../solr/search/facet/SimpleAggValueSource.java    |    1 +
 .../java/org/apache/solr/search/facet/SlotAcc.java |  760 +--
 .../org/apache/solr/search/facet/StddevAgg.java    |   10 +-
 .../java/org/apache/solr/search/facet/SumAgg.java  |   10 +-
 .../org/apache/solr/search/facet/SumsqAgg.java     |    8 +-
 .../apache/solr/search/facet/UnInvertedField.java  |    4 +-
 .../solr/search/facet/UnInvertedFieldAcc.java      |  174 +-
 .../org/apache/solr/search/facet/UniqueAgg.java    |    6 +-
 .../apache/solr/search/facet/UniqueBlockAgg.java   |    2 +-
 .../solr/search/facet/UniqueBlockQueryAgg.java     |    4 +-
 .../apache/solr/search/facet/UniqueSlotAcc.java    |    2 +
 .../org/apache/solr/search/facet/VarianceAgg.java  |   10 +-
 .../search/function/CollapseScoreFunction.java     |    2 +
 .../solr/search/function/FieldNameValueSource.java |    1 +
 .../solr/search/function/FileFloatSource.java      |   11 +-
 .../solr/search/function/MultiStringFunction.java  |    3 +-
 .../solr/search/function/OrdFieldSource.java       |    1 +
 .../search/function/ReverseOrdFieldSource.java     |    1 +
 .../search/function/ValueSourceRangeFilter.java    |    5 +-
 .../distance/GeoDistValueSourceParser.java         |    3 +-
 .../search/function/distance/GeohashFunction.java  |    3 +
 .../distance/GeohashHaversineFunction.java         |    8 +-
 .../function/distance/HaversineConstFunction.java  |    8 +-
 .../function/distance/HaversineFunction.java       |    7 +-
 .../function/distance/StringDistanceFunction.java  |    3 +
 .../function/distance/VectorDistanceFunction.java  |    7 +-
 .../solr/search/grouping/CommandHandler.java       |   14 +-
 .../distributed/command/GroupConverter.java        |    6 +-
 .../grouping/distributed/command/QueryCommand.java |    1 +
 .../command/SearchGroupsFieldCommand.java          |    3 +
 .../distributed/command/TopGroupsFieldCommand.java |    2 +
 .../SearchGroupShardResponseProcessor.java         |    3 +-
 .../TopGroupsShardResponseProcessor.java           |    4 +-
 .../SearchGroupsResultTransformer.java             |    7 +-
 .../ShardResultTransformer.java                    |    2 +
 .../TopGroupsResultTransformer.java                |    3 +-
 .../GroupedEndResultTransformer.java               |    1 +
 .../solr/search/join/BlockJoinChildQParser.java    |    7 +-
 .../solr/search/join/BlockJoinParentQParser.java   |  105 +-
 .../search/join/ChildFieldValueSourceParser.java   |    4 +-
 .../solr/search/join/GraphEdgeCollector.java       |  207 +
 .../org/apache/solr/search/join/GraphQuery.java    |    2 +-
 .../solr/search/join/GraphTermsCollector.java      |  202 -
 .../apache/solr/search/join/XCJFQParserPlugin.java |    4 +-
 .../org/apache/solr/search/join/XCJFQuery.java     |    3 +-
 .../apache/solr/search/mlt/CloudMLTQParser.java    |    4 +
 .../apache/solr/search/mlt/SimpleMLTQParser.java   |    1 +
 .../apache/solr/search/stats/ExactStatsCache.java  |   10 +
 .../apache/solr/search/stats/LRUStatsCache.java    |    2 +
 .../apache/solr/security/AuditLoggerPlugin.java    |    2 +
 .../apache/solr/security/AuthorizationContext.java |    1 +
 .../solr/security/AutorizationEditOperation.java   |    9 +
 .../org/apache/solr/security/BasicAuthPlugin.java  |    2 +-
 .../org/apache/solr/security/CertAuthPlugin.java   |   51 +
 .../ExternalRoleRuleBasedAuthorizationPlugin.java  |   57 +
 .../org/apache/solr/security/HadoopAuthPlugin.java |    6 +-
 .../org/apache/solr/security/JWTAuthPlugin.java    |   31 +-
 .../org/apache/solr/security/JWTPrincipal.java     |    4 +-
 .../org/apache/solr/security/KerberosFilter.java   |    2 +-
 .../org/apache/solr/security/KerberosPlugin.java   |   31 +-
 .../solr/security/PKIAuthenticationPlugin.java     |    1 +
 .../java/org/apache/solr/security/Permission.java  |    9 +-
 .../solr/security/PermissionNameProvider.java      |    2 +
 .../security/RuleBasedAuthorizationPlugin.java     |  308 +-
 .../security/RuleBasedAuthorizationPluginBase.java |  341 ++
 .../security/Sha256AuthenticationProvider.java     |    9 +-
 .../apache/solr/servlet/DirectSolrConnection.java  |    2 +-
 .../java/org/apache/solr/servlet/HttpSolrCall.java |   15 +-
 .../apache/solr/servlet/LoadAdminUiServlet.java    |   31 +-
 .../org/apache/solr/servlet/ResponseUtils.java     |    3 +-
 .../apache/solr/servlet/SolrDispatchFilter.java    |   20 +-
 .../apache/solr/servlet/SolrRequestParsers.java    |  151 +-
 .../solr/spelling/AbstractLuceneSpellChecker.java  |    3 +-
 .../solr/spelling/DirectSolrSpellChecker.java      |    3 +-
 .../solr/spelling/FileBasedSpellChecker.java       |    2 +-
 .../solr/spelling/IndexBasedSpellChecker.java      |    2 +-
 .../org/apache/solr/spelling/QueryConverter.java   |    3 +-
 .../org/apache/solr/spelling/SolrSpellChecker.java |    2 +-
 .../apache/solr/spelling/SpellCheckCollator.java   |    2 +-
 .../solr/spelling/WordBreakSolrSpellChecker.java   |    8 +-
 .../solr/spelling/suggest/DictionaryFactory.java   |    3 +-
 .../solr/spelling/suggest/LookupFactory.java       |    2 +-
 .../solr/spelling/suggest/SolrSuggester.java       |    1 +
 .../apache/solr/spelling/suggest/Suggester.java    |    2 +-
 .../suggest/fst/AnalyzingInfixLookupFactory.java   |    2 +-
 .../suggest/fst/AnalyzingLookupFactory.java        |    2 +-
 .../suggest/fst/BlendedInfixLookupFactory.java     |    2 +-
 .../spelling/suggest/fst/FSTLookupFactory.java     |    2 +-
 .../suggest/fst/FreeTextLookupFactory.java         |    2 +-
 .../spelling/suggest/fst/FuzzyLookupFactory.java   |    2 +-
 .../spelling/suggest/fst/WFSTLookupFactory.java    |    2 +-
 .../suggest/jaspell/JaspellLookupFactory.java      |    2 +-
 .../spelling/suggest/tst/TSTLookupFactory.java     |    2 +-
 .../solr/store/blockcache/BlockDirectory.java      |    2 +-
 .../org/apache/solr/store/hdfs/HdfsDirectory.java  |    2 +-
 .../org/apache/solr/update/AddUpdateCommand.java   |    1 +
 .../java/org/apache/solr/update/CdcrUpdateLog.java |    4 +
 .../java/org/apache/solr/update/CommitTracker.java |   17 +-
 .../apache/solr/update/DefaultSolrCoreState.java   |    4 +-
 .../apache/solr/update/DirectUpdateHandler2.java   |   16 +-
 .../org/apache/solr/update/DocumentBuilder.java    |    1 +
 .../org/apache/solr/update/HdfsTransactionLog.java |    2 +
 .../java/org/apache/solr/update/HdfsUpdateLog.java |    1 +
 .../org/apache/solr/update/IndexFingerprint.java   |    5 +-
 .../src/java/org/apache/solr/update/PeerSync.java  |    6 +
 .../org/apache/solr/update/PeerSyncWithLeader.java |    4 +
 .../org/apache/solr/update/SolrCmdDistributor.java |    1 +
 .../java/org/apache/solr/update/SolrCoreState.java |    3 +-
 .../org/apache/solr/update/SolrIndexConfig.java    |    7 +-
 .../org/apache/solr/update/SolrIndexSplitter.java  |    6 +-
 .../org/apache/solr/update/SolrIndexWriter.java    |    2 +-
 .../org/apache/solr/update/TransactionLog.java     |  165 +-
 .../src/java/org/apache/solr/update/UpdateLog.java |   16 +-
 .../java/org/apache/solr/update/VersionInfo.java   |    4 +
 ...AbstractDefaultValueUpdateProcessorFactory.java |    2 +-
 .../AddSchemaFieldsUpdateProcessorFactory.java     |    9 +-
 .../processor/AtomicUpdateDocumentMerger.java      |   58 +-
 .../processor/CdcrUpdateProcessorFactory.java      |    2 +-
 .../ClassificationUpdateProcessorFactory.java      |    2 +-
 .../CloneFieldUpdateProcessorFactory.java          |   11 +-
 .../ConcatFieldUpdateProcessorFactory.java         |    2 +-
 .../DefaultValueUpdateProcessorFactory.java        |    2 +-
 .../processor/DistributedZkUpdateProcessor.java    |    2 +-
 .../DocBasedVersionConstraintsProcessor.java       |    8 +-
 ...DocBasedVersionConstraintsProcessorFactory.java |    2 +-
 .../DocExpirationUpdateProcessorFactory.java       |    5 +-
 .../FieldLengthUpdateProcessorFactory.java         |    2 +-
 .../processor/FieldMutatingUpdateProcessor.java    |    7 +-
 .../FieldMutatingUpdateProcessorFactory.java       |   11 +-
 .../FieldNameMutatingUpdateProcessorFactory.java   |    2 +-
 ...IgnoreCommitOptimizeUpdateProcessorFactory.java |    2 +-
 .../IgnoreLargeDocumentProcessorFactory.java       |    5 +-
 .../LastFieldValueUpdateProcessorFactory.java      |    1 +
 .../processor/LogUpdateProcessorFactory.java       |    5 +-
 .../MaxFieldValueUpdateProcessorFactory.java       |    5 +-
 .../MinFieldValueUpdateProcessorFactory.java       |    5 +-
 .../ParseBooleanFieldUpdateProcessorFactory.java   |    4 +-
 .../ParseDateFieldUpdateProcessorFactory.java      |    3 +-
 .../ParseNumericFieldUpdateProcessorFactory.java   |    2 +-
 .../PreAnalyzedUpdateProcessorFactory.java         |    2 +-
 .../processor/RegexReplaceProcessorFactory.java    |    2 +-
 .../update/processor/RegexpBoostProcessor.java     |    1 +
 .../RemoveBlankFieldUpdateProcessorFactory.java    |    2 +-
 .../processor/RunUpdateProcessorFactory.java       |  123 +-
 .../processor/SignatureUpdateProcessorFactory.java |    2 +-
 .../processor/SimpleUpdateProcessorFactory.java    |    3 +-
 .../SkipExistingDocumentsProcessorFactory.java     |    2 +-
 .../StatelessScriptUpdateProcessorFactory.java     |    5 +-
 .../processor/TrimFieldUpdateProcessorFactory.java |    2 +-
 .../TruncateFieldUpdateProcessorFactory.java       |    2 +-
 .../update/processor/URLClassifyProcessor.java     |   56 +
 .../processor/UUIDUpdateProcessorFactory.java      |    2 +-
 .../UniqFieldsUpdateProcessorFactory.java          |    3 +-
 .../processor/UpdateRequestProcessorChain.java     |   10 +-
 .../processor/UpdateRequestProcessorFactory.java   |    2 +-
 .../org/apache/solr/util/ConcurrentLRUCache.java   |   10 +-
 .../src/java/org/apache/solr/util/DOMUtil.java     |    6 +-
 .../src/java/org/apache/solr/util/ExportTool.java  |   56 +-
 .../apache/solr/util/MockSearchableSolrClient.java |    3 +-
 .../src/java/org/apache/solr/util/PackageTool.java |   69 +-
 .../src/java/org/apache/solr/util/RTimerTree.java  |    1 +
 .../src/java/org/apache/solr/util/SolrCLI.java     | 1280 +++--
 .../apache/solr/util/SolrFileCleaningTracker.java  |  147 -
 .../java/org/apache/solr/util/SolrLogLayout.java   |    1 +
 .../java/org/apache/solr/util/SolrLogPostTool.java |  291 +-
 .../java/org/apache/solr/util/SolrPluginUtils.java |   27 +-
 .../java/org/apache/solr/util/TestInjection.java   |    3 +
 .../SSLCredentialProviderFactory.java              |    4 +-
 .../util/plugin/NamedListInitializedPlugin.java    |    2 +-
 .../org/apache/solr/util/stats/MetricUtils.java    |    8 +-
 .../solr/util/tracing/SolrRequestCarrier.java      |    3 +-
 .../apache/solr/util/xslt/TransformerProvider.java |    7 +-
 solr/core/src/test-files/log4j2.xml                |   44 +-
 solr/core/src/test-files/solr/solr-50-all.xml      |    1 +
 .../core/src/test-files/solr/solr-solrreporter.xml |    6 +-
 solr/core/src/test-files/solr/solr.xml             |    1 +
 .../src/test/org/apache/hadoop/fs/FileUtil.java    |   28 +-
 .../datanode/fsdataset/impl/BlockPoolSlice.java    |   50 +-
 .../test/org/apache/hadoop/http/HttpServer2.java   |   55 +-
 .../test/org/apache/hadoop/util/DiskChecker.java   |    4 +-
 .../org/apache/solr/BasicFunctionalityTest.java    |   12 +-
 .../src/test/org/apache/solr/CursorPagingTest.java |    8 +
 .../src/test/org/apache/solr/OutputWriterTest.java |    2 +-
 .../src/test/org/apache/solr/SolrInfoBeanTest.java |    6 +-
 .../test/org/apache/solr/TestCrossCoreJoin.java    |    4 +-
 .../org/apache/solr/TestDistributedGrouping.java   |    3 +
 .../org/apache/solr/TestDistributedSearch.java     |   42 +-
 .../test/org/apache/solr/TestGroupingSearch.java   |  207 +-
 solr/core/src/test/org/apache/solr/TestJoin.java   |   38 +-
 .../test/org/apache/solr/TestRandomDVFaceting.java |   10 +-
 .../test/org/apache/solr/TestRandomFaceting.java   |   22 +-
 .../org/apache/solr/TestSolrCoreProperties.java    |    1 +
 .../apache/solr/analysis/TokenizerChainTest.java   |    1 +
 .../TestEmbeddedSolrServerAdminHandler.java        |    1 +
 .../TestEmbeddedSolrServerConstructors.java        |    1 +
 .../apache/solr/cloud/AliasIntegrationTest.java    |    2 +-
 .../cloud/AssignBackwardCompatibilityTest.java     |    4 +-
 .../apache/solr/cloud/BasicDistributedZkTest.java  |    9 +
 .../test/org/apache/solr/cloud/BasicZkTest.java    |  181 -
 .../solr/cloud/ChaosMonkeyNothingIsSafeTest.java   |    1 +
 ...aosMonkeyNothingIsSafeWithPullReplicasTest.java |    6 +-
 .../ChaosMonkeySafeLeaderWithPullReplicasTest.java |    9 +-
 .../solr/cloud/ChaosMonkeyShardSplitTest.java      |   17 +-
 .../test/org/apache/solr/cloud/CloudTestUtils.java |    6 +
 .../apache/solr/cloud/ClusterStateMockUtil.java    |    2 +-
 .../org/apache/solr/cloud/ClusterStateTest.java    |    8 +-
 .../org/apache/solr/cloud/CollectionPropsTest.java |    9 +-
 .../solr/cloud/CollectionStateFormat2Test.java     |   71 -
 .../solr/cloud/CollectionStateZnodeTest.java       |   70 +
 .../apache/solr/cloud/CollectionsAPISolrJTest.java |   34 +-
 .../org/apache/solr/cloud/ConfigSetsAPITest.java   |    1 +
 .../apache/solr/cloud/CreateRoutedAliasTest.java   |    2 -
 .../solr/cloud/DeleteInactiveReplicaTest.java      |    6 +-
 .../test/org/apache/solr/cloud/DeleteNodeTest.java |    6 +-
 .../org/apache/solr/cloud/DeleteReplicaTest.java   |   38 +-
 .../apache/solr/cloud/DistribCursorPagingTest.java |    1 +
 .../DistribDocExpirationUpdateProcessorTest.java   |    1 +
 .../solr/cloud/DistribJoinFromCollectionTest.java  |    4 +-
 .../solr/cloud/DistributedVersionInfoTest.java     |    8 +-
 .../org/apache/solr/cloud/ForceLeaderTest.java     |   24 +-
 .../solr/cloud/FullSolrCloudDistribCmdsTest.java   |    6 +-
 .../cloud/FullThrottleStoppableIndexingThread.java |    2 +-
 .../solr/cloud/HttpPartitionOnCommitTest.java      |   33 +-
 .../org/apache/solr/cloud/HttpPartitionTest.java   |   27 +-
 .../apache/solr/cloud/KerberosTestServices.java    |    6 +-
 .../org/apache/solr/cloud/LeaderElectionTest.java  |    4 +-
 .../cloud/LeaderFailoverAfterPartitionTest.java    |    2 +-
 .../apache/solr/cloud/LeaderTragicEventTest.java   |    8 +-
 .../solr/cloud/LeaderVoteWaitTimeoutTest.java      |    6 +-
 .../solr/cloud/LegacyCloudClusterPropTest.java     |  179 -
 .../solr/cloud/MetricsHistoryIntegrationTest.java  |    4 +
 .../org/apache/solr/cloud/MigrateRouteKeyTest.java |   11 +-
 .../test/org/apache/solr/cloud/MockSolrSource.java |    2 +-
 .../org/apache/solr/cloud/MoveReplicaTest.java     |   18 +-
 .../apache/solr/cloud/MultiThreadedOCPTest.java    |   68 +-
 .../solr/cloud/NestedShardedAtomicUpdateTest.java  |    4 +
 .../OutOfBoxZkACLAndCredentialsProvidersTest.java  |   12 +-
 ...OverriddenZkACLAndCredentialsProvidersTest.java |   10 +-
 .../OverseerCollectionConfigSetProcessorTest.java  |    7 +-
 .../solr/cloud/OverseerModifyCollectionTest.java   |    1 +
 .../org/apache/solr/cloud/OverseerRolesTest.java   |   10 +-
 .../org/apache/solr/cloud/OverseerStatusTest.java  |    1 +
 .../apache/solr/cloud/OverseerTaskQueueTest.java   |    1 +
 .../test/org/apache/solr/cloud/OverseerTest.java   |  183 +-
 .../apache/solr/cloud/ReindexCollectionTest.java   |    2 +
 .../apache/solr/cloud/ReplaceNodeNoTargetTest.java |   17 +-
 .../org/apache/solr/cloud/ReplaceNodeTest.java     |   10 +-
 .../apache/solr/cloud/ReplicationFactorTest.java   |    6 +-
 .../org/apache/solr/cloud/RollingRestartTest.java  |   10 +-
 .../cloud/RoutingToNodesWithPropertiesTest.java    |    1 +
 .../org/apache/solr/cloud/SSLMigrationTest.java    |    1 +
 .../apache/solr/cloud/SaslZkACLProviderTest.java   |   10 +-
 .../apache/solr/cloud/ShardRoutingCustomTest.java  |    3 -
 .../cloud/SharedFSAutoReplicaFailoverTest.java     |    5 -
 .../test/org/apache/solr/cloud/SliceStateTest.java |    4 +-
 .../apache/solr/cloud/SolrCloudExampleTest.java    |   20 +-
 .../org/apache/solr/cloud/SolrXmlInZkTest.java     |    8 +-
 .../test/org/apache/solr/cloud/SplitShardTest.java |    6 +-
 .../test/org/apache/solr/cloud/SyncSliceTest.java  |    1 +
 .../solr/cloud/SystemCollectionCompatTest.java     |   15 +-
 .../solr/cloud/TestAuthenticationFramework.java    |    6 +-
 .../apache/solr/cloud/TestBaseStatsCacheCloud.java |    1 +
 .../apache/solr/cloud/TestCloudConsistency.java    |    6 +-
 .../TestCloudPhrasesIdentificationComponent.java   |    4 +
 .../org/apache/solr/cloud/TestCloudPivotFacet.java |    4 +-
 .../solr/cloud/TestCloudSearcherWarming.java       |   20 +-
 .../apache/solr/cloud/TestClusterProperties.java   |   10 +-
 .../org/apache/solr/cloud/TestConfigSetsAPI.java   |   29 +-
 .../solr/cloud/TestConfigSetsAPIExclusivity.java   |    4 +
 .../test/org/apache/solr/cloud/TestCryptoKeys.java |    1 +
 .../cloud/TestDynamicFieldNamesIndexCorrectly.java |    4 +-
 .../org/apache/solr/cloud/TestHashPartitioner.java |    1 +
 .../solr/cloud/TestLeaderElectionZkExpiry.java     |    4 +-
 .../org/apache/solr/cloud/TestPullReplica.java     |   17 +-
 .../solr/cloud/TestPullReplicaErrorHandling.java   |   19 +-
 .../solr/cloud/TestQueryingOnDownCollection.java   |    2 +
 .../solr/cloud/TestRandomRequestDistribution.java  |   10 +-
 .../apache/solr/cloud/TestRebalanceLeaders.java    |    1 +
 .../apache/solr/cloud/TestSSLRandomization.java    |   12 +-
 .../cloud/TestSolrCloudWithDelegationTokens.java   |   12 +-
 .../solr/cloud/TestSolrCloudWithKerberosAlt.java   |    2 +-
 .../TestSolrCloudWithSecureImpersonation.java      |    3 +
 .../cloud/TestStressCloudBlindAtomicUpdates.java   |   19 +-
 .../solr/cloud/TestStressInPlaceUpdates.java       |   16 +-
 .../org/apache/solr/cloud/TestStressLiveNodes.java |    8 +-
 .../solr/cloud/TestTlogReplayVsRecovery.java       |    4 +-
 .../org/apache/solr/cloud/TestTlogReplica.java     |    9 +-
 .../TestTolerantUpdateProcessorRandomCloud.java    |   10 +-
 .../org/apache/solr/cloud/TestUtilizeNode.java     |   22 +-
 .../cloud/TestWaitForStateWithJettyShutdowns.java  |    6 +-
 .../org/apache/solr/cloud/TestWithCollection.java  |    6 +
 .../test/org/apache/solr/cloud/TestZkChroot.java   |  153 -
 .../apache/solr/cloud/UnloadDistributedZkTest.java |    2 +
 .../VMParamsZkACLAndCredentialsProvidersTest.java  |   10 +-
 .../src/test/org/apache/solr/cloud/ZkCLITest.java  |   10 +-
 .../org/apache/solr/cloud/ZkControllerTest.java    |    3 +-
 .../org/apache/solr/cloud/ZkNodePropsTest.java     |    4 +-
 .../org/apache/solr/cloud/ZkSolrClientTest.java    |   12 +-
 .../AbstractCloudBackupRestoreTestCase.java        |   12 +-
 .../solr/cloud/api/collections/AssignTest.java     |    1 +
 .../api/collections/CollectionReloadTest.java      |    2 +-
 .../CollectionsAPIAsyncDistributedZkTest.java      |   24 +-
 .../CollectionsAPIDistributedZkTest.java           |    5 +
 .../ConcurrentCreateCollectionTest.java            |   13 +-
 .../solr/cloud/api/collections/ShardSplitTest.java |   73 +-
 .../SimpleCollectionCreateDeleteTest.java          |    7 +-
 .../cloud/api/collections/SplitByPrefixTest.java   |    2 +-
 .../cloud/api/collections/TestCollectionAPI.java   |   84 +-
 .../api/collections/TestReplicaProperties.java     |    2 +
 .../TestRequestStatusCollectionAPI.java            |    2 +
 .../AutoAddReplicasIntegrationTest.java            |  104 +-
 .../autoscaling/AutoAddReplicasPlanActionTest.java |   22 +-
 .../cloud/autoscaling/AutoScalingHandlerTest.java  |   38 +-
 .../cloud/autoscaling/ComputePlanActionTest.java   |  127 +-
 .../cloud/autoscaling/ExecutePlanActionTest.java   |    5 +
 .../cloud/autoscaling/HttpTriggerListenerTest.java |    1 +
 .../IndexSizeTriggerMixedBoundsTest.java           |    4 +-
 .../IndexSizeTriggerSizeEstimationTest.java        |    5 +-
 .../cloud/autoscaling/IndexSizeTriggerTest.java    |   21 +-
 .../autoscaling/MetricTriggerIntegrationTest.java  |    1 +
 .../NodeAddedTriggerIntegrationTest.java           |    6 +-
 .../cloud/autoscaling/NodeAddedTriggerTest.java    |    3 +
 .../NodeLostTriggerIntegrationTest.java            |    6 +-
 .../cloud/autoscaling/NodeLostTriggerTest.java     |    3 +
 .../autoscaling/NodeMarkersRegistrationTest.java   |    2 +
 .../cloud/autoscaling/RestoreTriggerStateTest.java |    2 +
 .../ScheduledMaintenanceTriggerTest.java           |    9 +-
 .../ScheduledTriggerIntegrationTest.java           |    4 +-
 .../SearchRateTriggerIntegrationTest.java          |   10 +-
 .../cloud/autoscaling/SearchRateTriggerTest.java   |    3 +
 .../cloud/autoscaling/SystemLogListenerTest.java   |    7 +-
 .../solr/cloud/autoscaling/TestPolicyCloud.java    |    6 +-
 .../TriggerCooldownIntegrationTest.java            |    1 +
 .../cloud/autoscaling/TriggerEventQueueTest.java   |    1 +
 .../cloud/autoscaling/TriggerIntegrationTest.java  |   30 +-
 .../TriggerSetPropertiesIntegrationTest.java       |   42 +-
 .../autoscaling/sim/SimSolrCloudTestCase.java      |    5 +-
 .../sim/TestSimClusterStateProvider.java           |    2 +-
 .../autoscaling/sim/TestSimComputePlanAction.java  |   50 +-
 .../sim/TestSimDistribStateManager.java            |    4 +-
 .../autoscaling/sim/TestSimExecutePlanAction.java  |   31 +-
 .../autoscaling/sim/TestSimExtremeIndexing.java    |    5 +-
 .../cloud/autoscaling/sim/TestSimLargeCluster.java |   89 +-
 .../autoscaling/sim/TestSimNodeAddedTrigger.java   |    2 +
 .../autoscaling/sim/TestSimNodeLostTrigger.java    |    3 +
 .../cloud/autoscaling/sim/TestSimPolicyCloud.java  |    2 +
 .../cloud/autoscaling/sim/TestSimScenario.java     |    4 +
 .../autoscaling/sim/TestSimTriggerIntegration.java |   23 +-
 .../autoscaling/sim/TestSnapshotCloudManager.java  |   18 +-
 .../solr/cloud/cdcr/BaseCdcrDistributedZkTest.java |   17 +-
 .../solr/cloud/cdcr/CdcrBidirectionalTest.java     |   32 +-
 .../apache/solr/cloud/cdcr/CdcrBootstrapTest.java  |   30 +-
 .../solr/cloud/cdcr/CdcrOpsAndBoundariesTest.java  |    5 +-
 .../cloud/cdcr/CdcrReplicationHandlerTest.java     |    4 +-
 .../solr/cloud/cdcr/CdcrRequestHandlerTest.java    |    5 +
 .../org/apache/solr/cloud/cdcr/CdcrTestsUtil.java  |    6 +-
 .../cloud/cdcr/CdcrVersionReplicationTest.java     |    2 +-
 .../org/apache/solr/cloud/hdfs/StressHdfsTest.java |    2 +
 .../cloud/overseer/TestClusterStateMutator.java    |    4 +-
 .../overseer/ZkCollectionPropsCachingTest.java     |    4 -
 .../solr/cloud/overseer/ZkStateReaderTest.java     |  111 +-
 .../solr/cloud/overseer/ZkStateWriterTest.java     |  150 +-
 .../apache/solr/cloud/rule/ImplicitSnitchTest.java |    3 +
 .../org/apache/solr/cloud/rule/RuleEngineTest.java |    8 +
 .../test/org/apache/solr/cloud/rule/RulesTest.java |    7 +
 .../solr/core/BlobRepositoryMockingTest.java       |    8 +-
 .../test/org/apache/solr/core/CoreSorterTest.java  |    4 +
 .../solr/core/CountUsageValueSourceParser.java     |    3 +-
 .../org/apache/solr/core/DirectoryFactoryTest.java |    7 +-
 .../apache/solr/core/DummyValueSourceParser.java   |    3 +-
 .../solr/core/ExitableDirectoryReaderTest.java     |    6 +
 .../org/apache/solr/core/FakeDeletionPolicy.java   |    6 +-
 .../apache/solr/core/HdfsDirectoryFactoryTest.java |    1 +
 .../src/test/org/apache/solr/core/HelloStream.java |   10 +-
 .../org/apache/solr/core/MockEventListener.java    |    2 +-
 .../core/MockQuerySenderListenerReqHandler.java    |    2 +-
 .../apache/solr/core/MockShardHandlerFactory.java  |    1 +
 .../org/apache/solr/core/QueryResultKeyTest.java   |   16 +-
 .../org/apache/solr/core/RequestHandlersTest.java  |    1 +
 .../org/apache/solr/core/ResourceLoaderTest.java   |   11 +-
 .../solr/core/SolrCoreCheckLockOnStartupTest.java  |    4 +-
 .../org/apache/solr/core/TestConfigOverlay.java    |    1 +
 .../apache/solr/core/TestConfigSetImmutable.java   |    3 +
 .../apache/solr/core/TestConfigSetProperties.java  |    4 +
 .../org/apache/solr/core/TestCoreContainer.java    |   85 +
 .../org/apache/solr/core/TestCoreDiscovery.java    |    3 +-
 .../org/apache/solr/core/TestDirectoryFactory.java |    1 +
 .../org/apache/solr/core/TestDynamicLoading.java   |    9 +-
 .../apache/solr/core/TestDynamicLoadingUrl.java    |    1 +
 .../test/org/apache/solr/core/TestInitParams.java  |   12 +-
 .../org/apache/solr/core/TestJmxIntegration.java   |   13 +-
 .../test/org/apache/solr/core/TestLazyCores.java   |   75 +-
 .../apache/solr/core/TestShardHandlerFactory.java  |    1 +
 .../apache/solr/core/TestSolrConfigHandler.java    |   14 +
 .../src/test/org/apache/solr/core/TestSolrXml.java |   10 +
 .../repository/HdfsBackupRepositoryTest.java       |   94 +-
 .../core/snapshots/TestSolrCloudSnapshots.java     |    8 +-
 .../solr/core/snapshots/TestSolrCoreSnapshots.java |    2 +
 .../solr/filestore/TestDistribPackageStore.java    |   16 +-
 .../handler/AnalysisRequestHandlerTestBase.java    |    2 +-
 .../apache/solr/handler/BackupStatusChecker.java   |    4 +
 .../handler/BinaryUpdateRequestHandlerTest.java    |   30 +-
 .../DocumentAnalysisRequestHandlerTest.java        |    2 +
 .../handler/FieldAnalysisRequestHandlerTest.java   |   32 +-
 .../org/apache/solr/handler/JsonLoaderTest.java    |    4 +
 .../solr/handler/MoreLikeThisHandlerTest.java      |   11 +-
 .../solr/handler/PingRequestHandlerTest.java       |    3 +
 .../org/apache/solr/handler/TestBlobHandler.java   |    1 +
 .../org/apache/solr/handler/TestConfigReload.java  |    9 +-
 .../org/apache/solr/handler/TestCoreBackup.java    |   24 +-
 .../solr/handler/TestReplicationHandler.java       |   49 +-
 .../TestReplicationHandlerDiskOverFlow.java        |    5 +-
 .../org/apache/solr/handler/TestReqParamsAPI.java  |    2 +
 .../org/apache/solr/handler/TestSQLHandler.java    |    6 +-
 .../solr/handler/TestSolrConfigHandlerCloud.java   |    4 +-
 .../handler/TestSolrConfigHandlerConcurrent.java   |   14 +-
 .../handler/ThrowErrorOnInitRequestHandler.java    |    2 +-
 .../apache/solr/handler/V2ApiIntegrationTest.java  |    6 +
 .../org/apache/solr/handler/V2StandaloneTest.java  |    2 +
 .../solr/handler/XsltUpdateRequestHandlerTest.java |    7 +-
 .../admin/AutoscalingHistoryHandlerTest.java       |   25 +-
 .../handler/admin/CoreAdminCreateDiscoverTest.java |    2 +
 .../solr/handler/admin/CoreAdminHandlerTest.java   |    7 +-
 .../handler/admin/CoreAdminRequestStatusTest.java  |    2 +
 .../admin/CoreMergeIndexesAdminHandlerTest.java    |    5 +-
 .../solr/handler/admin/HealthCheckHandlerTest.java |    1 +
 .../solr/handler/admin/IndexSizeEstimatorTest.java |   10 +
 .../solr/handler/admin/LukeRequestHandlerTest.java |   15 +
 .../solr/handler/admin/MBeansHandlerTest.java      |    2 +
 .../solr/handler/admin/MetricsHandlerTest.java     |   18 +
 .../admin/PropertiesRequestHandlerTest.java        |    1 +
 .../handler/admin/SecurityConfHandlerTest.java     |    7 +-
 .../admin/SegmentsInfoRequestHandlerTest.java      |   16 +-
 .../solr/handler/admin/StatsReloadRaceTest.java    |    2 +
 .../solr/handler/admin/TestApiFramework.java       |   33 +-
 .../solr/handler/admin/TestCollectionAPIs.java     |   24 +-
 .../apache/solr/handler/admin/TestConfigsApi.java  |   20 +-
 .../solr/handler/admin/TestCoreAdminApis.java      |   12 +-
 .../solr/handler/admin/ZookeeperReadAPITest.java   |  101 +
 .../handler/admin/ZookeeperStatusHandlerTest.java  |   52 +-
 .../component/CustomHighlightComponentTest.java    |   21 +-
 .../component/CustomTermsComponentTest.java        |    2 +-
 .../component/DistributedDebugComponentTest.java   |    8 +-
 .../component/DistributedFacetPivotLargeTest.java  |    3 +-
 .../DistributedFacetPivotLongTailTest.java         |    2 +
 .../component/DistributedFacetPivotSmallTest.java  |   26 +-
 .../component/DistributedMLTComponentTest.java     |    2 +-
 .../DistributedQueryComponentOptimizationTest.java |    1 +
 .../handler/component/InfixSuggestersTest.java     |    2 +
 .../PhrasesIdentificationComponentTest.java        |    4 +
 .../component/QueryElevationComponentTest.java     |   75 +-
 .../component/ResourceSharingTestComponent.java    |    4 +-
 .../solr/handler/component/SearchHandlerTest.java  |   74 +-
 .../handler/component/SpellCheckComponentTest.java |    7 +-
 .../solr/handler/component/StatsComponentTest.java |    7 +-
 .../solr/handler/component/TermsComponentTest.java |   13 +-
 .../component/TestHttpShardHandlerFactory.java     |    4 +-
 .../component/TestTrackingShardHandlerFactory.java |    2 +
 .../solr/handler/export/TestExportWriter.java      |   59 +-
 .../org/apache/solr/handler/tagger/TaggerTest.java |    6 +-
 .../apache/solr/handler/tagger/TaggerTestCase.java |   11 +-
 .../apache/solr/highlight/DummyHighlighter.java    |    1 +
 .../org/apache/solr/highlight/HighlighterTest.java |   20 +-
 .../apache/solr/index/hdfs/CheckHdfsIndexTest.java |    2 +
 .../org/apache/solr/logging/TestLogWatcher.java    |    1 +
 .../apache/solr/metrics/SolrMetricManagerTest.java |    2 +
 .../solr/metrics/SolrMetricsIntegrationTest.java   |    2 +-
 .../reporters/SolrGraphiteReporterTest.java        |    2 +-
 .../reporters/SolrJmxReporterCloudTest.java        |    6 +-
 .../metrics/reporters/SolrSlf4jReporterTest.java   |    1 +
 .../reporters/solr/SolrCloudReportersTest.java     |    4 +-
 .../reporters/solr/SolrShardReporterTest.java      |   12 +
 .../src/test/org/apache/solr/pkg/TestPackages.java |  155 +-
 .../org/apache/solr/request/SimpleFacetsTest.java  |    3 +-
 .../test/org/apache/solr/request/TestFaceting.java |   25 +
 .../apache/solr/request/TestIntervalFaceting.java  |    2 +-
 .../org/apache/solr/request/TestWriterPerf.java    |    5 +-
 .../solr/request/macro/TestMacroExpander.java      |    2 +
 .../org/apache/solr/response/JSONWriterTest.java   |   10 +-
 .../org/apache/solr/response/SmileWriterTest.java  |   11 +
 .../solr/response/TestBinaryResponseWriter.java    |    2 +
 .../solr/response/TestGeoJSONResponseWriter.java   |    4 +
 .../solr/response/TestGraphMLResponseWriter.java   |   22 +-
 .../response/TestJavabinTupleStreamParser.java     |    7 +-
 .../response/TestPHPSerializedResponseWriter.java  |    2 +-
 .../org/apache/solr/response/TestPushWriter.java   |    7 +-
 .../solr/response/TestRawResponseWriter.java       |    2 +
 .../solr/response/TestRetrieveFieldsOptimizer.java |    3 +
 .../solr/response/TestSolrQueryResponse.java       |    1 +
 .../TestChildDocTransformerHierarchy.java          |    1 +
 .../apache/solr/rest/schema/TestBulkSchemaAPI.java |   40 +-
 .../apache/solr/schema/ChangedSchemaMergeTest.java |    3 +-
 .../test/org/apache/solr/schema/DocValuesTest.java |    4 +-
 .../schema/OpenExchangeRatesOrgProviderTest.java   |    2 +-
 .../solr/schema/ResolveAnalyzerByNameTest.java     |    7 +
 .../solr/schema/SpatialRPTFieldTypeTest.java       |    2 +
 .../solr/schema/TestBulkSchemaConcurrent.java      |   23 +-
 .../apache/solr/schema/TestCloudManagedSchema.java |    3 +
 .../org/apache/solr/schema/TestManagedSchema.java  |    3 +
 .../apache/solr/schema/TestManagedSchemaAPI.java   |    2 +-
 .../solr/schema/TestManagedSchemaThreadSafety.java |    1 +
 .../org/apache/solr/schema/TestPointFields.java    |    1 +
 .../solr/schema/TestUseDocValuesAsStored2.java     |    1 +
 .../solr/search/AnalyticsMergeStrategyTest.java    |    4 +
 .../solr/search/AnalyticsTestQParserPlugin.java    |   11 +
 .../solr/search/CurrencyRangeFacetCloudTest.java   |   27 +
 .../org/apache/solr/search/LargeFieldTest.java     |    1 +
 .../apache/solr/search/MaxScoreCollectorTest.java  |   91 +
 .../org/apache/solr/search/MergeStrategyTest.java  |    1 +
 .../apache/solr/search/MockSearchComponent.java    |    2 +-
 .../org/apache/solr/search/QueryEqualityTest.java  |   10 +-
 .../apache/solr/search/RankQueryTestPlugin.java    |   25 +-
 .../apache/solr/search/SolrIndexSearcherTest.java  |  330 ++
 .../solr/search/TestAddFieldRealTimeGet.java       |    8 +-
 .../solr/search/TestCollapseQParserPlugin.java     |   37 +-
 .../test/org/apache/solr/search/TestDocSet.java    |    3 +-
 .../solr/search/TestExtendedDismaxParser.java      |   60 +-
 .../apache/solr/search/TestHashQParserPlugin.java  |   26 +-
 .../org/apache/solr/search/TestIndexSearcher.java  |    8 +-
 .../solr/search/TestMaxScoreQueryParser.java       |    1 +
 .../solr/search/TestReRankQParserPlugin.java       |   95 +
 .../org/apache/solr/search/TestRealTimeGet.java    |    8 +-
 .../test/org/apache/solr/search/TestRecovery.java  |   10 +
 .../org/apache/solr/search/TestRecoveryHdfs.java   |    5 +
 .../org/apache/solr/search/TestReloadDeadlock.java |    2 +-
 .../org/apache/solr/search/TestSmileRequest.java   |    2 +
 .../org/apache/solr/search/TestSolrCachePerf.java  |    3 +
 .../src/test/org/apache/solr/search/TestSolrJ.java |    2 +
 .../apache/solr/search/TestSolrQueryParser.java    |    1 +
 .../src/test/org/apache/solr/search/TestSort.java  |    5 +-
 .../org/apache/solr/search/TestStressRecovery.java |    2 +
 .../org/apache/solr/search/TestStressReorder.java  |    6 +-
 .../apache/solr/search/TestStressUserVersions.java |    8 +-
 .../org/apache/solr/search/TestStressVersions.java |    2 +
 .../apache/solr/search/TestTermsQParserPlugin.java |    6 +
 .../org/apache/solr/search/facet/DebugAgg.java     |    6 +-
 ...stributedFacetSimpleRefinementLongTailTest.java |   11 +-
 .../solr/search/facet/RangeFacetCloudTest.java     |   40 +-
 .../search/facet/SpatialHeatmapFacetsTest.java     |    5 +
 .../search/facet/TestCloudJSONFacetJoinDomain.java |    9 +-
 .../solr/search/facet/TestCloudJSONFacetSKG.java   |  342 +-
 .../search/facet/TestCloudJSONFacetSKGEquiv.java   | 1001 ++++
 .../solr/search/facet/TestJsonFacetRefinement.java |   54 +-
 .../apache/solr/search/facet/TestJsonFacets.java   |  170 +-
 .../search/facet/TestJsonFacetsStatsParsing.java   |    2 +
 .../facet/TestJsonFacetsWithNestedObjects.java     |   12 +-
 .../solr/search/function/NvlValueSourceParser.java |    2 +-
 .../function/TestMinMaxOnMultiValuedField.java     |   13 +-
 .../solr/search/join/TestCloudNestedDocsSort.java  |    4 +-
 .../solr/search/join/TestNestedDocsSort.java       |    1 +
 .../solr/search/join/TestScoreJoinQPNoScore.java   |   27 +-
 .../solr/search/join/TestScoreJoinQPScore.java     |   18 +-
 .../join/another/BJQFilterAccessibleTest.java      |    2 +-
 .../apache/solr/search/json/TestJsonRequest.java   |   70 +-
 .../solr/search/mlt/CloudMLTQParserTest.java       |    1 +
 .../solr/security/AuditLoggerIntegrationTest.java  |   14 +-
 .../BaseTestRuleBasedAuthorizationPlugin.java      |  606 +++
 .../solr/security/BasicAuthIntegrationTest.java    |    7 +-
 .../solr/security/BasicAuthOnSingleNodeTest.java   |   44 +-
 .../solr/security/CallbackAuditLoggerPlugin.java   |    4 +-
 .../apache/solr/security/CertAuthPluginTest.java   |   79 +
 .../security/HttpParamDelegationTokenPlugin.java   |    2 +-
 .../apache/solr/security/JWTAuthPluginTest.java    |   22 +-
 .../security/JWTVerificationkeyResolverTest.java   |    4 +-
 .../solr/security/MockAuditLoggerPlugin.java       |    4 +-
 .../solr/security/MockAuthorizationPlugin.java     |    2 +-
 .../solr/security/PrincipalWithUserRoles.java      |   91 +
 .../solr/security/TestAuthorizationFramework.java  |    3 +
 ...stExternalRoleRuleBasedAuthorizationPlugin.java |   78 +
 .../security/TestRuleBasedAuthorizationPlugin.java |  585 ---
 .../security/TestSha256AuthenticationProvider.java |    4 +
 .../solr/security/hadoop/ImpersonationUtil.java    |    1 +
 .../hadoop/TestDelegationWithHadoopAuth.java       |    7 +-
 .../security/hadoop/TestZkAclsWithHadoopAuth.java  |    1 +
 .../apache/solr/servlet/SolrRequestParserTest.java |    2 +
 .../solr/spelling/DirectSolrSpellCheckerTest.java  |    3 +
 .../solr/spelling/FileBasedSpellCheckerTest.java   |    7 +
 .../solr/spelling/IndexBasedSpellCheckerTest.java  |    8 +
 .../solr/spelling/SpellCheckCollatorTest.java      |    9 +
 .../solr/spelling/SpellingQueryConverterTest.java  |    6 +
 .../suggest/RandomTestDictionaryFactory.java       |    6 +-
 .../solr/spelling/suggest/SuggesterTest.java       |    2 +
 .../solr/store/blockcache/BlockCacheTest.java      |    4 +-
 .../apache/solr/store/hdfs/HdfsDirectoryTest.java  |    2 +-
 .../org/apache/solr/update/CdcrUpdateLogTest.java  |    8 +
 .../solr/update/DirectUpdateHandlerTest.java       |   15 +-
 .../apache/solr/update/MaxSizeAutoCommitTest.java  |    2 +-
 .../solr/update/MockStreamingSolrClients.java      |    2 +-
 .../apache/solr/update/MockingHttp2SolrClient.java |    7 +-
 .../test/org/apache/solr/update/PeerSyncTest.java  |    1 +
 .../solr/update/PeerSyncWithBufferUpdatesTest.java |    1 +
 .../PeerSyncWithIndexFingerprintCachingTest.java   |    2 +
 ...ncWithLeaderAndIndexFingerprintCachingTest.java |    1 +
 .../apache/solr/update/PeerSyncWithLeaderTest.java |    1 +
 .../org/apache/solr/update/SoftAutoCommitTest.java |    2 +-
 .../apache/solr/update/SolrCmdDistributorTest.java |    2 +-
 .../apache/solr/update/SolrIndexSplitterTest.java  |    3 +
 .../solr/update/TestInPlaceUpdatesDistrib.java     |   63 +-
 .../solr/update/TestInPlaceUpdatesStandalone.java  |    1 +
 .../solr/update/TestIndexingPerformance.java       |    8 +-
 .../solr/update/TestNestedUpdateProcessor.java     |    2 +
 .../test/org/apache/solr/update/TestUpdate.java    |    2 +-
 .../test/org/apache/solr/update/UpdateLogTest.java |    1 +
 .../solr/update/processor/AtomicUpdatesTest.java   |   15 +-
 .../CategoryRoutedAliasUpdateProcessorTest.java    |    6 +-
 .../ClassificationUpdateProcessorFactoryTest.java  |    4 +
 ...assificationUpdateProcessorIntegrationTest.java |    2 -
 .../ClassificationUpdateProcessorTest.java         |    5 +
 .../CustomUpdateRequestProcessorFactory.java       |    3 +-
 .../DimensionalRoutedAliasUpdateProcessorTest.java |    6 +-
 .../IgnoreLargeDocumentProcessorFactoryTest.java   |    1 +
 .../update/processor/NestedAtomicUpdateTest.java   |    1 +
 .../processor/RoutedAliasUpdateProcessorTest.java  |    1 +
 .../SignatureUpdateProcessorFactoryTest.java       |    1 +
 .../SkipExistingDocumentsProcessorFactoryTest.java |    1 +
 .../processor/TestNamedUpdateProcessors.java       |    7 +-
 .../TimeRoutedAliasUpdateProcessorTest.java        |    8 +-
 .../processor/TolerantUpdateProcessorTest.java     |    2 +-
 .../processor/TrackingUpdateProcessorFactory.java  |    2 +-
 .../UpdateRequestProcessorFactoryTest.java         |    2 +-
 .../org/apache/solr/util/MockCoreContainer.java    |    2 +-
 .../org/apache/solr/util/OrderedExecutorTest.java  |   28 +-
 .../org/apache/solr/util/SolrLogPostToolTest.java  |   42 +-
 .../org/apache/solr/util/SolrPluginUtilsTest.java  |    2 +-
 .../test/org/apache/solr/util/TestRTimerTree.java  |    3 +
 .../apache/solr/util/TestSolrCLIRunExample.java    |   17 +-
 .../solr/util/TestSolrJacksonAnnotation.java       |    2 +
 .../src/test/org/apache/solr/util/TestUtils.java   |   12 +-
 .../apache/solr/util/stats/MetricUtilsTest.java    |   10 +
 .../solr/util/tracing/TestHttpServletCarrier.java  |    1 +
 solr/example/build.gradle                          |    2 +
 solr/licenses/caffeine-2.8.0.jar.sha1              |    1 -
 solr/licenses/caffeine-2.8.4.jar.sha1              |    1 +
 solr/licenses/commons-cli-1.2.jar.sha1             |    1 -
 solr/licenses/commons-cli-1.4.jar.sha1             |    1 +
 solr/licenses/commons-fileupload-1.3.3.jar.sha1    |    1 -
 solr/licenses/commons-fileupload-LICENSE-ASL.txt   |  202 -
 solr/licenses/commons-fileupload-NOTICE.txt        |    5 -
 solr/licenses/hppc-0.8.1.jar.sha1                  |    1 -
 solr/licenses/hppc-0.8.2.jar.sha1                  |    1 +
 solr/licenses/log4j-1.2-api-2.11.2.jar.sha1        |    1 -
 solr/licenses/log4j-1.2-api-2.13.2.jar.sha1        |    1 +
 solr/licenses/log4j-api-2.11.2.jar.sha1            |    1 -
 solr/licenses/log4j-api-2.13.2.jar.sha1            |    1 +
 solr/licenses/log4j-core-2.11.2.jar.sha1           |    1 -
 solr/licenses/log4j-core-2.13.2.jar.sha1           |    1 +
 solr/licenses/log4j-slf4j-impl-2.11.2.jar.sha1     |    1 -
 solr/licenses/log4j-slf4j-impl-2.13.2.jar.sha1     |    1 +
 solr/licenses/log4j-web-2.11.2.jar.sha1            |    1 -
 solr/licenses/log4j-web-2.13.2.jar.sha1            |    1 +
 solr/packaging/build.gradle                        |    3 +-
 solr/server/build.gradle                           |    2 +
 solr/server/resources/log4j2-console.xml           |   28 +-
 solr/server/resources/log4j2.xml                   |   67 +-
 solr/server/solr/solr.xml                          |    1 +
 solr/site/index.template.md                        |   37 +
 solr/site/online-link.template.md                  |   19 +
 solr/solr-ref-guide/build.gradle                   |    5 +-
 solr/solr-ref-guide/build.xml                      |    1 -
 solr/solr-ref-guide/src/_config.yml.template       |    2 -
 solr/solr-ref-guide/src/_includes/head.html        |   26 +-
 solr/solr-ref-guide/src/_includes/head_print.html  |   29 -
 solr/solr-ref-guide/src/_includes/sidebar.html     |   35 +-
 solr/solr-ref-guide/src/_includes/taglogic.html    |   22 -
 solr/solr-ref-guide/src/_includes/toc.html         |    9 -
 solr/solr-ref-guide/src/_includes/topnav.html      |   39 +-
 solr/solr-ref-guide/src/_layouts/default.html      |   33 +-
 .../solr-ref-guide/src/_layouts/default_print.html |   25 -
 solr/solr-ref-guide/src/_layouts/home.html         |   27 +-
 solr/solr-ref-guide/src/_layouts/page.html         |   29 +-
 solr/solr-ref-guide/src/_layouts/page_print.html   |   15 -
 solr/solr-ref-guide/src/_templates/open.html.slim  |    2 +-
 .../src/analytics-expression-sources.adoc          |    1 -
 .../src/analytics-mapping-functions.adoc           |    1 -
 .../src/analytics-reduction-functions.adoc         |    3 +-
 solr/solr-ref-guide/src/analytics.adoc             |    3 +-
 .../authentication-and-authorization-plugins.adoc  |    2 +-
 .../src/cert-authentication-plugin.adoc            |   61 +
 .../src/cluster-node-management.adoc               |   41 +-
 solr/solr-ref-guide/src/collection-aliasing.adoc   |    3 +-
 solr/solr-ref-guide/src/collection-management.adoc |    5 +-
 solr/solr-ref-guide/src/collections-api.adoc       |    2 +-
 .../solr-ref-guide/src/colocating-collections.adoc |    3 +-
 .../src/common-query-parameters.adoc               |   42 +-
 solr/solr-ref-guide/src/configsets-api.adoc        |    2 +-
 solr/solr-ref-guide/src/coreadmin-api.adoc         |    6 +-
 solr/solr-ref-guide/src/css/customstyles.css       |  919 ----
 solr/solr-ref-guide/src/css/decoration.css         |  254 +
 solr/solr-ref-guide/src/css/font-awesome.min.css   |    4 -
 solr/solr-ref-guide/src/css/lavish-bootstrap.css   | 5423 --------------------
 solr/solr-ref-guide/src/css/navs.css               |  366 ++
 solr/solr-ref-guide/src/css/printstyles.css        |  160 -
 solr/solr-ref-guide/src/css/ref-guide.css          | 2919 +++++------
 solr/solr-ref-guide/src/css/search.css             |   47 +
 solr/solr-ref-guide/src/css/theme-solr.css         |  147 -
 solr/solr-ref-guide/src/distributed-requests.adoc  |    4 +
 solr/solr-ref-guide/src/enabling-ssl.adoc          |  238 +-
 solr/solr-ref-guide/src/exporting-result-sets.adoc |   28 +
 .../glyphicons/glyphicons-halflings-regular.eot    |  Bin 20127 -> 0 bytes
 .../glyphicons/glyphicons-halflings-regular.svg    |  288 --
 .../glyphicons/glyphicons-halflings-regular.ttf    |  Bin 45404 -> 0 bytes
 .../glyphicons/glyphicons-halflings-regular.woff   |  Bin 23424 -> 0 bytes
 .../glyphicons/glyphicons-halflings-regular.woff2  |  Bin 18028 -> 0 bytes
 .../src/fonts/mplus1mn/mplus1mn-bold-ascii.ttf     |  Bin 15868 -> 0 bytes
 .../fonts/mplus1mn/mplus1mn-bold_italic-ascii.ttf  |  Bin 15908 -> 0 bytes
 .../src/fonts/mplus1mn/mplus1mn-italic-ascii.ttf   |  Bin 15928 -> 0 bytes
 .../mplus1mn/mplus1mn-regular-ascii-conums.ttf     |  Bin 20024 -> 0 bytes
 .../src/fonts/mplus1p-regular-fallback.ttf         |  Bin 1405716 -> 0 bytes
 solr/solr-ref-guide/src/format-of-solr-xml.adoc    |    4 +
 solr/solr-ref-guide/src/function-queries.adoc      |    1 -
 solr/solr-ref-guide/src/how-to-contribute.adoc     |   16 +-
 solr/solr-ref-guide/src/index.adoc                 |   31 +-
 solr/solr-ref-guide/src/installing-solr.adoc       |    2 +-
 solr/solr-ref-guide/src/js/customscripts.js        |   68 +-
 solr/solr-ref-guide/src/js/ref-guide-toc.js        |   36 -
 solr/solr-ref-guide/src/js/toc.js                  |   82 -
 solr/solr-ref-guide/src/json-facet-api.adoc        |    5 +-
 solr/solr-ref-guide/src/json-query-dsl.adoc        |    4 +-
 .../src/jwt-authentication-plugin.adoc             |    3 +-
 .../src/major-changes-in-solr-7.adoc               |    1 -
 .../src/major-changes-in-solr-8.adoc               |    1 -
 .../src/major-changes-in-solr-9.adoc               |   13 +-
 solr/solr-ref-guide/src/meta-docs/jekyll.adoc      |   72 +-
 solr/solr-ref-guide/src/meta-docs/publish.adoc     |    6 +-
 solr/solr-ref-guide/src/metrics-reporting.adoc     |    2 +-
 .../src/overview-of-the-solr-admin-ui.adoc         |    2 +-
 .../src/package-manager-internals.adoc             |    1 -
 solr/solr-ref-guide/src/package-manager.adoc       |    1 -
 solr/solr-ref-guide/src/replica-management.adoc    |   91 +-
 ...andlers-and-searchcomponents-in-solrconfig.adoc |    9 +
 .../src/rule-based-authorization-plugin.adoc       |   63 +-
 .../src/rule-based-replica-placement.adoc          |    2 +-
 solr/solr-ref-guide/src/schema-api.adoc            |    1 -
 solr/solr-ref-guide/src/securing-solr.adoc         |    2 +
 solr/solr-ref-guide/src/shard-management.adoc      |    5 +-
 .../src/solr-control-script-reference.adoc         |    1 -
 solr/solr-ref-guide/src/solr-glossary.adoc         |    2 +-
 solr/solr-ref-guide/src/solr-tutorial.adoc         |    1 -
 solr/solr-ref-guide/src/solr-upgrade-notes.adoc    |    3 +-
 .../src/solrcloud-autoscaling-api.adoc             |    3 +-
 .../src/solrcloud-autoscaling-overview.adoc        |    3 +-
 .../solrcloud-autoscaling-policy-preferences.adoc  |    3 +-
 .../src/solrcloud-autoscaling-trigger-actions.adoc |   71 +-
 .../src/solrcloud-autoscaling-triggers.adoc        |    1 -
 .../src/stream-decorator-reference.adoc            |    3 +-
 .../src/stream-evaluator-reference.adoc            |    3 +-
 .../src/stream-source-reference.adoc               |    3 +-
 ...ding-data-with-solr-cell-using-apache-tika.adoc |    1 -
 ...ta-store-data-with-the-data-import-handler.adoc |    2 +-
 solr/solrj/build.gradle                            |    2 +
 .../org/apache/solr/client/solrj/SolrClient.java   |    4 +-
 .../org/apache/solr/client/solrj/SolrRequest.java  |    3 +
 .../org/apache/solr/client/solrj/SolrResponse.java |    1 +
 .../apache/solr/client/solrj/V2RequestSupport.java |    1 +
 .../client/solrj/beans/DocumentObjectBinder.java   |   13 +-
 .../solr/client/solrj/cloud/SocketProxy.java       |   56 +-
 .../solr/client/solrj/cloud/SolrCloudManager.java  |    2 +-
 .../cloud/autoscaling/AddReplicaSuggester.java     |    3 +
 .../solrj/cloud/autoscaling/AutoScalingConfig.java |   29 +
 .../client/solrj/cloud/autoscaling/Clause.java     |   19 +-
 .../cloud/autoscaling/DelegatingCloudManager.java  |    2 +-
 .../cloud/autoscaling/DeleteNodeSuggester.java     |    2 +
 .../cloud/autoscaling/DeleteReplicaSuggester.java  |    4 +
 .../cloud/autoscaling/MoveReplicaSuggester.java    |    2 +
 .../solrj/cloud/autoscaling/NoneSuggester.java     |    2 +
 .../client/solrj/cloud/autoscaling/Operand.java    |    1 +
 .../client/solrj/cloud/autoscaling/Policy.java     |  107 +-
 .../solrj/cloud/autoscaling/PolicyHelper.java      |   71 +-
 .../client/solrj/cloud/autoscaling/Preference.java |    9 +
 .../solrj/cloud/autoscaling/ReplicaCount.java      |    6 +
 .../solrj/cloud/autoscaling/ReplicaInfo.java       |   10 +-
 .../solrj/cloud/autoscaling/ReplicaVariable.java   |    1 +
 .../solr/client/solrj/cloud/autoscaling/Row.java   |   40 +-
 .../cloud/autoscaling/SplitShardSuggester.java     |    3 +
 .../client/solrj/cloud/autoscaling/Suggester.java  |   16 +-
 .../client/solrj/cloud/autoscaling/Suggestion.java |    4 +
 .../cloud/autoscaling/UnsupportedSuggester.java    |    4 +-
 .../client/solrj/cloud/autoscaling/Variable.java   |    3 +
 .../solrj/cloud/autoscaling/VariableBase.java      |    2 +
 .../solrj/cloud/autoscaling/VersionedData.java     |    7 +
 .../cloud/autoscaling/WithCollectionVariable.java  |    4 +
 .../client/solrj/impl/BaseCloudSolrClient.java     |   59 +-
 .../solrj/impl/BaseHttpClusterStateProvider.java   |   16 +-
 .../solr/client/solrj/impl/BaseHttpSolrClient.java |    6 +-
 .../client/solrj/impl/BinaryRequestWriter.java     |    6 +-
 .../client/solrj/impl/BinaryResponseParser.java    |    1 +
 .../solr/client/solrj/impl/CloudSolrClient.java    |    2 +-
 .../client/solrj/impl/ClusterStateProvider.java    |    2 +
 .../impl/ConcurrentUpdateHttp2SolrClient.java      |   19 +-
 .../solrj/impl/ConcurrentUpdateSolrClient.java     |   18 +-
 .../solrj/impl/DelegationTokenHttpSolrClient.java  |    2 +-
 .../solrj/impl/Http2ClusterStateProvider.java      |    1 +
 .../solr/client/solrj/impl/Http2SolrClient.java    |  112 +-
 .../solr/client/solrj/impl/HttpClientUtil.java     |    8 +-
 .../solrj/impl/HttpClusterStateProvider.java       |    1 +
 .../solr/client/solrj/impl/HttpSolrClient.java     |   92 +-
 .../client/solrj/impl/Krb5HttpClientBuilder.java   |   13 +-
 .../solr/client/solrj/impl/LBHttpSolrClient.java   |    4 +-
 .../solr/client/solrj/impl/LBSolrClient.java       |   15 +-
 .../client/solrj/impl/SolrClientCloudManager.java  |   20 +-
 .../solrj/impl/SolrClientNodeStateProvider.java    |   31 +-
 .../solrj/impl/SolrHttpRequestRetryHandler.java    |    4 +-
 .../solrj/impl/StreamingBinaryResponseParser.java  |    3 +
 .../solr/client/solrj/impl/XMLResponseParser.java  |    6 +-
 .../solrj/impl/ZkClientClusterStateProvider.java   |    3 +-
 .../client/solrj/impl/ZkDistribStateManager.java   |    1 +
 .../client/solrj/io/ClassificationEvaluation.java  |    8 +-
 .../java/org/apache/solr/client/solrj/io/Lang.java |    4 +
 .../apache/solr/client/solrj/io/ModelCache.java    |    2 +-
 .../solr/client/solrj/io/SolrClientCache.java      |    2 +-
 .../org/apache/solr/client/solrj/io/Tuple.java     |  168 +-
 .../solr/client/solrj/io/comp/FieldComparator.java |    5 +
 .../solr/client/solrj/io/eq/FieldEqualitor.java    |    3 +
 .../solr/client/solrj/io/eval/AkimaEvaluator.java  |    3 +-
 .../solr/client/solrj/io/eval/AnovaEvaluator.java  |   12 +-
 .../solr/client/solrj/io/eval/ArrayEvaluator.java  |    2 +
 .../solr/client/solrj/io/eval/AscEvaluator.java    |    1 +
 .../solr/client/solrj/io/eval/Attributes.java      |    1 +
 .../solrj/io/eval/BicubicSplineEvaluator.java      |    2 +
 .../solrj/io/eval/ChebyshevDistanceEvaluator.java  |    1 +
 .../solrj/io/eval/ChiSquareDataSetEvaluator.java   |   13 +-
 .../client/solrj/io/eval/ColumnAtEvaluator.java    |    2 +-
 .../client/solrj/io/eval/ConvexHullEvaluator.java  |    2 +-
 .../client/solrj/io/eval/ConvolutionEvaluator.java |    1 +
 .../client/solrj/io/eval/CorrelationEvaluator.java |    3 +-
 .../solrj/io/eval/CosineSimilarityEvaluator.java   |    2 +
 .../client/solrj/io/eval/CovarianceEvaluator.java  |    1 +
 .../solr/client/solrj/io/eval/DbscanEvaluator.java |    7 +-
 .../client/solrj/io/eval/DensityEvaluator.java     |    1 +
 .../client/solrj/io/eval/DescribeEvaluator.java    |   30 +-
 .../client/solrj/io/eval/DistanceEvaluator.java    |    1 +
 .../client/solrj/io/eval/DotProductEvaluator.java  |    2 +
 .../solr/client/solrj/io/eval/EBEAddEvaluator.java |    3 +-
 .../client/solrj/io/eval/EBEDivideEvaluator.java   |    3 +-
 .../client/solrj/io/eval/EBEMultiplyEvaluator.java |    3 +-
 .../client/solrj/io/eval/EBESubtractEvaluator.java |    3 +-
 .../solrj/io/eval/EnclosingDiskEvaluator.java      |    5 +-
 .../io/eval/EnumeratedDistributionEvaluator.java   |    6 +
 .../solrj/io/eval/EuclideanDistanceEvaluator.java  |    1 +
 .../solr/client/solrj/io/eval/FFTEvaluator.java    |    2 +-
 .../solrj/io/eval/FeatureSelectEvaluator.java      |    5 +-
 .../client/solrj/io/eval/FieldValueEvaluator.java  |    1 +
 .../client/solrj/io/eval/FindDelayEvaluator.java   |    2 +
 .../solrj/io/eval/FrequencyTableEvaluator.java     |   17 +-
 .../client/solrj/io/eval/FuzzyKmeansEvaluator.java |    7 +-
 .../solrj/io/eval/GTestDataSetEvaluator.java       |   13 +-
 .../client/solrj/io/eval/GaussFitEvaluator.java    |    1 +
 .../solrj/io/eval/GetBaryCenterEvaluator.java      |    2 +-
 .../client/solrj/io/eval/GetCacheEvaluator.java    |    2 +
 .../client/solrj/io/eval/GetCenterEvaluator.java   |    3 +-
 .../client/solrj/io/eval/GetClusterEvaluator.java  |    4 +-
 .../client/solrj/io/eval/GetRadiusEvaluator.java   |    1 +
 .../solrj/io/eval/GetSupportPointsEvaluator.java   |    4 +-
 .../client/solrj/io/eval/HarmonicFitEvaluator.java |    3 +
 .../client/solrj/io/eval/HistogramEvaluator.java   |   24 +-
 .../solr/client/solrj/io/eval/IFFTEvaluator.java   |    2 +-
 .../client/solrj/io/eval/IndexOfEvaluator.java     |    1 +
 .../client/solrj/io/eval/IntegrateEvaluator.java   |    2 +-
 .../solr/client/solrj/io/eval/IsNullEvaluator.java |    1 +
 .../solr/client/solrj/io/eval/KmeansEvaluator.java |    9 +-
 .../solr/client/solrj/io/eval/KnnEvaluator.java    |    9 +-
 .../solrj/io/eval/KnnRegressionEvaluator.java      |    3 +
 .../solrj/io/eval/KolmogorovSmirnovEvaluator.java  |   19 +-
 .../solr/client/solrj/io/eval/L1NormEvaluator.java |    1 +
 .../client/solrj/io/eval/LInfNormEvaluator.java    |    1 +
 .../solrj/io/eval/LatLonVectorsEvaluator.java      |    6 +-
 .../solr/client/solrj/io/eval/LerpEvaluator.java   |    3 +-
 .../client/solrj/io/eval/ListCacheEvaluator.java   |    8 +
 .../solr/client/solrj/io/eval/LoessEvaluator.java  |    3 +-
 .../solrj/io/eval/MannWhitneyUEvaluator.java       |   12 +-
 .../apache/solr/client/solrj/io/eval/Matrix.java   |    7 +-
 .../solr/client/solrj/io/eval/MatrixEvaluator.java |    1 +
 .../solrj/io/eval/MatrixMultiplyEvaluator.java     |    1 +
 .../solrj/io/eval/MeanDifferenceEvaluator.java     |    1 +
 .../solr/client/solrj/io/eval/MeanEvaluator.java   |    1 +
 .../solr/client/solrj/io/eval/MemsetEvaluator.java |    6 +-
 .../client/solrj/io/eval/MinMaxScaleEvaluator.java |    3 +-
 .../solr/client/solrj/io/eval/ModeEvaluator.java   |    3 +-
 .../client/solrj/io/eval/MonteCarloEvaluator.java  |   10 +-
 .../client/solrj/io/eval/MultiKmeansEvaluator.java |    6 +-
 .../MultiVariateNormalDistributionEvaluator.java   |    1 +
 .../client/solrj/io/eval/NaturalEvaluator.java     |    2 +-
 .../solr/client/solrj/io/eval/NormEvaluator.java   |    1 +
 .../solrj/io/eval/NormalizeSumEvaluator.java       |    3 +-
 .../client/solrj/io/eval/NotNullEvaluator.java     |    1 +
 .../solrj/io/eval/OLSRegressionEvaluator.java      |    7 +-
 .../solr/client/solrj/io/eval/OnesEvaluator.java   |    2 +-
 .../client/solrj/io/eval/OscillateEvaluator.java   |    2 +
 .../client/solrj/io/eval/OutliersEvaluator.java    |    8 +-
 .../client/solrj/io/eval/PairSortEvaluator.java    |    3 +-
 .../client/solrj/io/eval/PairedTTestEvaluator.java |   10 +-
 .../client/solrj/io/eval/PercentileEvaluator.java  |    3 +-
 .../solr/client/solrj/io/eval/PivotEvaluator.java  |   13 +-
 .../solrj/io/eval/PolyFitDerivativeEvaluator.java  |    2 +
 .../client/solrj/io/eval/PolyFitEvaluator.java     |    1 +
 .../solr/client/solrj/io/eval/PowerEvaluator.java  |    9 +-
 .../client/solrj/io/eval/PredictEvaluator.java     |   11 +-
 .../solr/client/solrj/io/eval/PrimesEvaluator.java |    2 +-
 .../client/solrj/io/eval/PutCacheEvaluator.java    |    1 +
 .../client/solrj/io/eval/RecursiveEvaluator.java   |   14 +-
 .../client/solrj/io/eval/RegressionEvaluator.java  |    2 +
 .../client/solrj/io/eval/RemoveCacheEvaluator.java |    2 +
 .../solr/client/solrj/io/eval/RepeatEvaluator.java |    2 +-
 .../solr/client/solrj/io/eval/RowAtEvaluator.java  |    2 +-
 .../solr/client/solrj/io/eval/SampleEvaluator.java |    2 +-
 .../client/solrj/io/eval/ScalarAddEvaluator.java   |    3 +-
 .../solr/client/solrj/io/eval/ScaleEvaluator.java  |    2 +-
 .../solrj/io/eval/SetColumnLabelsEvaluator.java    |    3 +-
 .../solrj/io/eval/SetRowLabelsEvaluator.java       |    3 +-
 .../client/solrj/io/eval/SetValueEvaluator.java    |    8 +-
 .../solr/client/solrj/io/eval/SplineEvaluator.java |    3 +-
 .../solr/client/solrj/io/eval/SplitEvaluator.java  |    2 +-
 .../solrj/io/eval/StandardDeviationEvaluator.java  |    1 +
 .../client/solrj/io/eval/SumColumnsEvaluator.java  |    2 +-
 .../solrj/io/eval/SumDifferenceEvaluator.java      |    1 +
 .../client/solrj/io/eval/SumRowsEvaluator.java     |    2 +-
 .../solr/client/solrj/io/eval/SumSqEvaluator.java  |    1 +
 .../solr/client/solrj/io/eval/TTestEvaluator.java  |   13 +-
 .../client/solrj/io/eval/TermVectorsEvaluator.java |   16 +-
 .../solrj/io/eval/TimeDifferencingEvaluator.java   |   97 +-
 .../client/solrj/io/eval/TopFeaturesEvaluator.java |    8 +-
 .../solr/client/solrj/io/eval/UnitEvaluator.java   |    3 +-
 .../client/solrj/io/eval/ValueAtEvaluator.java     |    1 +
 .../client/solrj/io/eval/VarianceEvaluator.java    |    1 +
 .../solr/client/solrj/io/eval/VectorFunction.java  |    4 +
 .../solr/client/solrj/io/eval/ZerosEvaluator.java  |    2 +-
 .../client/solrj/io/graph/GatherNodesStream.java   |   52 +-
 .../apache/solr/client/solrj/io/graph/Node.java    |   20 +-
 .../client/solrj/io/graph/ShortestPathStream.java  |   31 +-
 .../solr/client/solrj/io/graph/Traversal.java      |   11 +-
 .../client/solrj/io/graph/TraversalIterator.java   |    9 +-
 .../solr/client/solrj/io/ops/GroupOperation.java   |   17 +-
 .../client/solrj/io/sql/ResultSetMetaDataImpl.java |    2 +
 .../client/solrj/io/stream/CalculatorStream.java   |   12 +-
 .../solrj/io/stream/CartesianProductStream.java    |    1 +
 .../solr/client/solrj/io/stream/CellStream.java    |    9 +-
 .../client/solrj/io/stream/CloudSolrStream.java    |   24 +-
 .../solr/client/solrj/io/stream/CommitStream.java  |    2 +-
 .../solr/client/solrj/io/stream/CsvStream.java     |    3 +-
 .../solr/client/solrj/io/stream/DaemonStream.java  |   27 +-
 .../client/solrj/io/stream/DeepRandomStream.java   |   20 +-
 .../solr/client/solrj/io/stream/EchoStream.java    |   11 +-
 .../solr/client/solrj/io/stream/EvalStream.java    |    2 +-
 .../client/solrj/io/stream/ExceptionStream.java    |   12 +-
 .../client/solrj/io/stream/ExecutorStream.java     |    9 +-
 .../solr/client/solrj/io/stream/Facet2DStream.java |   26 +-
 .../solr/client/solrj/io/stream/FacetStream.java   |   96 +-
 .../solrj/io/stream/FeaturesSelectionStream.java   |   33 +-
 .../solr/client/solrj/io/stream/FetchStream.java   |    4 +-
 .../solr/client/solrj/io/stream/GetStream.java     |   14 +-
 .../client/solrj/io/stream/HashRollupStream.java   |   12 +-
 .../solr/client/solrj/io/stream/JDBCStream.java    |   23 +-
 .../client/solrj/io/stream/JSONTupleStream.java    |    1 +
 .../solrj/io/stream/JavabinTupleStreamParser.java  |    3 +
 .../solr/client/solrj/io/stream/KnnStream.java     |   13 +-
 .../solr/client/solrj/io/stream/LetStream.java     |    6 +-
 .../solr/client/solrj/io/stream/ListStream.java    |    5 +-
 .../solr/client/solrj/io/stream/ModelStream.java   |    6 +-
 .../solr/client/solrj/io/stream/NoOpStream.java    |    6 +-
 .../solr/client/solrj/io/stream/NullStream.java    |    3 +-
 .../client/solrj/io/stream/ParallelListStream.java |    9 +-
 .../client/solrj/io/stream/ParallelStream.java     |   10 +-
 .../solr/client/solrj/io/stream/PlotStream.java    |   21 +-
 .../client/solrj/io/stream/PriorityStream.java     |    2 +-
 .../solr/client/solrj/io/stream/RandomStream.java  |   15 +-
 .../solr/client/solrj/io/stream/RollupStream.java  |   16 +-
 .../client/solrj/io/stream/ScoreNodesStream.java   |   15 +-
 .../solr/client/solrj/io/stream/SearchStream.java  |   16 +-
 .../solr/client/solrj/io/stream/SelectStream.java  |   15 +-
 .../solrj/io/stream/SignificantTermsStream.java    |   27 +-
 .../solr/client/solrj/io/stream/SolrStream.java    |   13 +-
 .../solr/client/solrj/io/stream/StatsStream.java   |  286 +-
 .../solr/client/solrj/io/stream/StreamContext.java |   11 +-
 .../client/solrj/io/stream/TextLogitStream.java    |   50 +-
 .../client/solrj/io/stream/TimeSeriesStream.java   |   30 +-
 .../solr/client/solrj/io/stream/TopicStream.java   |   12 +-
 .../solr/client/solrj/io/stream/TupStream.java     |   20 +-
 .../solr/client/solrj/io/stream/TupleStream.java   |    3 +-
 .../solr/client/solrj/io/stream/UpdateStream.java  |   21 +-
 .../solr/client/solrj/io/stream/ZplotStream.java   |   38 +-
 .../client/solrj/io/stream/expr/Explanation.java   |    1 +
 .../solrj/io/stream/expr/StreamExplanation.java    |    1 +
 .../solrj/io/stream/expr/StreamExpression.java     |    1 +
 .../expr/StreamExpressionNamedParameter.java       |    1 +
 .../io/stream/expr/StreamExpressionValue.java      |    1 +
 .../client/solrj/io/stream/expr/StreamFactory.java |  249 +-
 .../solrj/io/stream/metrics/CountMetric.java       |    4 +-
 .../solrj/io/stream/metrics/PercentileMetric.java  |   84 +
 .../client/solrj/io/stream/metrics/StdMetric.java  |   93 +
 .../solrj/request/CollectionAdminRequest.java      |   40 +-
 .../client/solrj/request/CollectionApiMapping.java |    9 +-
 .../solrj/request/ConfigSetAdminRequest.java       |    3 +-
 .../solr/client/solrj/request/CoreApiMapping.java  |    3 +-
 .../solrj/request/JavaBinUpdateRequestCodec.java   |   17 +-
 .../solrj/request/MultiContentWriterRequest.java   |    7 +-
 .../solr/client/solrj/request/RequestWriter.java   |   13 +-
 .../solr/client/solrj/request/UpdateRequest.java   |    2 +-
 .../solr/client/solrj/request/V1toV2ApiMapper.java |    1 +
 .../solr/client/solrj/request/json/DomainMap.java  |    3 +
 .../client/solrj/request/json/HeatmapFacetMap.java |    3 +-
 .../client/solrj/request/json/JsonFacetMap.java    |    5 +-
 .../solrj/request/json/JsonQueryRequest.java       |    8 +
 .../solrj/response/AnalysisResponseBase.java       |    1 +
 .../solrj/response/CollectionAdminResponse.java    |    1 +
 .../solrj/response/ConfigSetAdminResponse.java     |    3 +-
 .../solrj/response/DelegationTokenResponse.java    |    3 +
 .../solr/client/solrj/response/FieldStatsInfo.java |    1 +
 .../client/solrj/response/HealthCheckResponse.java |    1 +
 .../solr/client/solrj/response/PivotField.java     |    5 +-
 .../solr/client/solrj/response/QueryResponse.java  |   11 +-
 .../solr/client/solrj/response/RangeFacet.java     |    5 +-
 .../client/solrj/response/SolrResponseBase.java    |    3 +
 .../client/solrj/response/SpellCheckResponse.java  |    1 +
 .../client/solrj/response/SuggesterResponse.java   |    1 +
 .../solrj/response/json/BucketBasedJsonFacet.java  |    1 +
 .../solrj/response/json/HeatmapJsonFacet.java      |    1 +
 .../solrj/response/json/NestableJsonFacet.java     |    1 +
 .../solrj/response/schema/SchemaResponse.java      |   32 +-
 .../RequestReplicaListTransformerGenerator.java    |    6 +-
 .../apache/solr/client/solrj/util/ClientUtils.java |    2 +
 .../org/apache/solr/common/IteratorWriter.java     |    1 +
 .../apache/solr/common/LinkedHashMapWriter.java    |    2 +
 .../org/apache/solr/common/MapSerializable.java    |    1 +
 .../src/java/org/apache/solr/common/MapWriter.java |    1 +
 .../java/org/apache/solr/common/MapWriterMap.java  |    7 +-
 .../org/apache/solr/common/NavigableObject.java    |    6 +-
 .../java/org/apache/solr/common/SolrDocument.java  |    5 +-
 .../org/apache/solr/common/SolrDocumentBase.java   |    1 +
 .../org/apache/solr/common/SolrDocumentList.java   |   10 +
 .../java/org/apache/solr/common/SolrException.java |   14 +-
 .../org/apache/solr/common/SolrInputField.java     |    4 +-
 .../java/org/apache/solr/common/cloud/Aliases.java |    4 +-
 .../solr/common/cloud/ClusterProperties.java       |    4 +
 .../org/apache/solr/common/cloud/ClusterState.java |   87 +-
 .../solr/common/cloud/CompositeIdRouter.java       |    1 +
 .../solr/common/cloud/ConnectionManager.java       |    6 +-
 .../apache/solr/common/cloud/DocCollection.java    |   31 +-
 .../org/apache/solr/common/cloud/DocRouter.java    |    2 +
 .../solr/common/cloud/NodesSysPropsCacher.java     |    4 +-
 .../java/org/apache/solr/common/cloud/Replica.java |    7 +-
 .../java/org/apache/solr/common/cloud/Slice.java   |    3 +
 .../org/apache/solr/common/cloud/SolrZkClient.java |   15 +-
 .../apache/solr/common/cloud/SolrZooKeeper.java    |    1 +
 .../apache/solr/common/cloud/ZkConfigManager.java  |    3 +-
 .../solr/common/cloud/ZkMaintenanceUtils.java      |    2 +-
 .../org/apache/solr/common/cloud/ZkNodeProps.java  |    6 +
 .../apache/solr/common/cloud/ZkStateReader.java    |  282 +-
 .../solr/common/cloud/rule/ImplicitSnitch.java     |    5 +-
 .../org/apache/solr/common/cloud/rule/Snitch.java  |    1 +
 .../solr/common/cloud/rule/SnitchContext.java      |    1 +
 .../solr/common/params/CollectionParams.java       |   43 +-
 .../apache/solr/common/params/CommonParams.java    |    6 +
 .../apache/solr/common/params/MapSolrParams.java   |   22 +-
 .../solr/common/params/MultiMapSolrParams.java     |    5 +
 .../org/apache/solr/common/params/SolrParams.java  |    7 +-
 .../apache/solr/common/params/StreamParams.java    |   41 +
 .../common/util/ByteArrayUtf8CharSequence.java     |    6 +-
 .../apache/solr/common/util/CommandOperation.java  |   16 +-
 .../apache/solr/common/util/ContentStreamBase.java |    3 +-
 .../org/apache/solr/common/util/ExecutorUtil.java  |    2 +
 .../solr/common/util/FastJavaBinDecoder.java       |    6 +
 .../src/java/org/apache/solr/common/util/Hash.java |    2 +
 .../org/apache/solr/common/util/JavaBinCodec.java  |   20 +-
 .../apache/solr/common/util/JsonRecordReader.java  |   10 +
 .../apache/solr/common/util/JsonSchemaCreator.java |    3 +-
 .../solr/common/util/JsonSchemaValidator.java      |   22 +-
 .../apache/solr/common/util/JsonTextWriter.java    |   24 +-
 .../apache/solr/common/util/MapBackedCache.java    |    4 +
 .../org/apache/solr/common/util/NamedList.java     |    6 +-
 .../src/java/org/apache/solr/common/util/Pair.java |    1 +
 .../org/apache/solr/common/util/RetryUtil.java     |   13 +-
 .../java/org/apache/solr/common/util/StrUtils.java |    2 +-
 .../org/apache/solr/common/util/TextWriter.java    |    8 +-
 .../org/apache/solr/common/util/TimeSource.java    |    4 +-
 .../java/org/apache/solr/common/util/Utils.java    |   43 +-
 .../apache/solr/common/util/ValidatingJsonMap.java |   19 +-
 .../apache/solr/common/util/XMLErrorLogger.java    |    4 +-
 solr/solrj/src/java/org/noggit/CharArr.java        |  262 +-
 solr/solrj/src/java/org/noggit/JSONParser.java     |    2 +-
 .../src/resources/apispec/cluster.Commands.json    |    3 -
 .../apispec/collections.collection.Commands.json   |    8 +-
 ...collections.collection.shards.shard.delete.json |    2 +-
 ...ons.collection.shards.shard.replica.delete.json |    2 +-
 solr/solrj/src/test-files/log4j2.xml               |   45 +-
 .../src/test-files/solrj/javabin_backcompat.bin    |  Bin 169 -> 170 bytes
 .../ref_guide_examples/JsonRequestApiTest.java     |    2 +-
 .../UsingSolrJRefGuideExamplesTest.java            |    5 +-
 .../solr/client/solrj/LargeVolumeTestBase.java     |   10 +-
 .../client/solrj/MergeIndexesExampleTestBase.java  |    4 +-
 .../apache/solr/client/solrj/SolrExampleTests.java |   19 +-
 .../client/solrj/SolrSchemalessExampleTest.java    |    2 +
 .../solr/client/solrj/TestSolrJErrorHandling.java  |   16 +-
 .../solrj/beans/TestDocumentObjectBinder.java      |    1 +
 .../client/solrj/cloud/autoscaling/TestPolicy.java |  159 +-
 .../solrj/cloud/autoscaling/TestPolicy2.java       |   28 +-
 .../solrj/embedded/SolrExampleJettyTest.java       |    1 +
 .../solrj/embedded/TestEmbeddedSolrServer.java     |    2 +-
 .../client/solrj/impl/BasicHttpSolrClientTest.java |   53 +-
 .../impl/CloudHttp2SolrClientBadInputTest.java     |    4 +-
 .../solrj/impl/CloudHttp2SolrClientRetryTest.java  |    1 +
 .../solrj/impl/CloudHttp2SolrClientTest.java       |   38 +-
 .../solrj/impl/CloudSolrClientBadInputTest.java    |    4 +-
 .../solrj/impl/CloudSolrClientBuilderTest.java     |    2 +-
 .../solrj/impl/CloudSolrClientCacheTest.java       |   11 +-
 .../solrj/impl/CloudSolrClientRetryTest.java       |    1 +
 .../client/solrj/impl/CloudSolrClientTest.java     |   34 +-
 ...oncurrentUpdateHttp2SolrClientBadInputTest.java |    4 +-
 .../ConcurrentUpdateSolrClientBadInputTest.java    |    4 +-
 .../ConcurrentUpdateSolrClientBuilderTest.java     |    2 +-
 .../impl/Http2SolrClientCompatibilityTest.java     |    7 +-
 .../client/solrj/impl/Http2SolrClientTest.java     |   44 +-
 .../solrj/impl/HttpSolrClientBadInputTest.java     |    4 +-
 .../solrj/impl/LBHttpSolrClientBadInputTest.java   |    4 +-
 .../org/apache/solr/client/solrj/io/TestLang.java  |    4 +-
 .../client/solrj/io/graph/GraphExpressionTest.java |   16 +-
 .../solr/client/solrj/io/graph/GraphTest.java      |   10 +-
 .../apache/solr/client/solrj/io/sql/JdbcTest.java  |    2 +
 .../solrj/io/stream/CloudAuthStreamTest.java       |    9 +-
 .../client/solrj/io/stream/JDBCStreamTest.java     |    4 +-
 .../client/solrj/io/stream/MathExpressionTest.java |  258 +-
 .../client/solrj/io/stream/RecordCountStream.java  |    2 +-
 .../solrj/io/stream/SelectWithEvaluatorsTest.java  |   10 +-
 .../solrj/io/stream/StreamDecoratorTest.java       |   33 +-
 .../solrj/io/stream/StreamExpressionTest.java      |  308 +-
 .../solr/client/solrj/io/stream/StreamingTest.java |   14 +-
 .../solrj/io/stream/eval/AscEvaluatorTest.java     |    6 +
 .../io/stream/eval/ConversionEvaluatorsTest.java   |   24 +-
 .../solrj/io/stream/eval/ReverseEvaluatorTest.java |    1 +
 .../io/stream/eval/TemporalEvaluatorsTest.java     |    1 +
 .../solrj/io/stream/ops/ConcatOperationTest.java   |    1 +
 .../client/solrj/io/stream/ops/OperationsTest.java |    1 +
 .../solr/client/solrj/request/SchemaTest.java      |    2 +
 .../solrj/request/TestConfigSetAdminRequest.java   |    3 +-
 .../solr/client/solrj/request/TestCoreAdmin.java   |    4 +-
 .../solrj/request/TestUpdateRequestCodec.java      |    6 +-
 .../solr/client/solrj/request/TestV2Request.java   |    4 +-
 .../client/solrj/request/json/DomainMapTest.java   |    7 +
 .../solrj/response/AnlysisResponseBaseTest.java    |    6 +-
 .../response/DocumentAnalysisResponseTest.java     |    2 +
 .../solrj/response/FieldAnalysisResponseTest.java  |    2 +
 .../solrj/response/NoOpResponseParserTest.java     |    2 +
 .../client/solrj/response/QueryResponseTest.java   |    1 +
 .../response/TestDelegationTokenResponse.java      |    2 +-
 ...RequestReplicaListTransformerGeneratorTest.java |   17 +-
 .../org/apache/solr/common/SolrDocumentTest.java   |    5 +-
 .../solr/common/TestToleratedUpdateError.java      |    2 +
 .../apache/solr/common/cloud/SolrZkClientTest.java |    2 +-
 .../cloud/TestCloudCollectionsListeners.java       |  110 -
 .../common/cloud/TestCollectionStateWatchers.java  |   23 -
 .../common/cloud/TestDocCollectionWatcher.java     |   26 -
 .../solr/common/params/CommonParamsTest.java       |    2 +
 .../apache/solr/common/util/JsonValidatorTest.java |    3 +
 .../org/apache/solr/common/util/NamedListTest.java |    5 +-
 .../solr/common/util/TestFastJavabinDecoder.java   |   13 +
 .../apache/solr/common/util/TestJavaBinCodec.java  |   54 +-
 .../solr/common/util/TestJsonRecordReader.java     |    5 +
 .../solr/common/util/TestNamedListCodec.java       |   15 +
 .../org/apache/solr/common/util/TestPathTrie.java  |    2 +
 .../solr/common/util/TestValidatingJsonMap.java    |    1 +
 .../solr/common/util/Utf8CharSequenceTest.java     |    6 +
 solr/test-framework/build.gradle                   |    3 +-
 .../apache/solr/BaseDistributedSearchTestCase.java |   24 +-
 .../src/java/org/apache/solr/JSONTestUtil.java     |    7 +
 .../java/org/apache/solr/SolrJettyTestBase.java    |    2 +-
 .../src/java/org/apache/solr/SolrTestCase.java     |    2 +-
 .../src/java/org/apache/solr/SolrTestCaseHS.java   |   50 +-
 .../src/java/org/apache/solr/SolrTestCaseJ4.java   |  103 +-
 .../solr/cloud/AbstractDistribZkTestBase.java      |   15 +-
 .../solr/cloud/AbstractFullDistribZkTestBase.java  |  102 +-
 .../java/org/apache/solr/cloud/ChaosMonkey.java    |    6 +-
 .../org/apache/solr/cloud/CloudInspectUtil.java    |   23 +-
 .../java/org/apache/solr/cloud/ConfigRequest.java  |    1 +
 .../src/java/org/apache/solr/cloud/IpTables.java   |    4 +-
 .../apache/solr/cloud/MiniSolrCloudCluster.java    |   12 +-
 .../apache/solr/cloud/SolrCloudAuthTestCase.java   |    4 +
 .../org/apache/solr/cloud/SolrCloudTestCase.java   |    9 +-
 .../apache/solr/cloud/StoppableCommitThread.java   |    4 +-
 .../apache/solr/cloud/StoppableSearchThread.java   |    2 +-
 .../java/org/apache/solr/cloud/ZkTestServer.java   |   24 +-
 .../apache/solr/core/MockTracerConfigurator.java   |    2 +-
 .../component/TrackingShardHandlerFactory.java     |    3 +-
 .../org/apache/solr/util/RandomMergePolicy.java    |    4 +-
 .../java/org/apache/solr/util/RandomizeSSL.java    |    4 +-
 .../java/org/apache/solr/util/RestTestBase.java    |   71 +-
 .../src/java/org/apache/solr/util/TestHarness.java |    5 +-
 solr/webapp/build.gradle                           |    2 +
 solr/webapp/web/css/angular/index.css              |    3 +
 solr/webapp/web/js/angular/controllers/index.js    |    6 +
 solr/webapp/web/js/angular/controllers/login.js    |    2 +-
 solr/webapp/web/partials/index.html                |   34 +
 solr/webapp/web/partials/login.html                |   17 +
 versions.lock                                      |   21 +-
 versions.props                                     |    9 +-
 2203 files changed, 47628 insertions(+), 38547 deletions(-)

diff --cc solr/core/src/java/org/apache/solr/cloud/api/collections/Assign.java
index 997558b,b577340..383b250
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/Assign.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/Assign.java
@@@ -326,9 -328,11 +328,10 @@@ public class Assign 
    public static List<ReplicaPosition> getNodesForNewReplicas(ClusterState clusterState, String collectionName,
                                                            String shard, int nrtReplicas, int tlogReplicas, int pullReplicas,
                                                            Object createNodeSet, SolrCloudManager cloudManager) throws IOException, InterruptedException, AssignmentException {
-     log.debug("getNodesForNewReplicas() shard: {} , nrtReplicas : {} , tlogReplicas: {} , pullReplicas: {} , createNodeSet {}", shard, nrtReplicas, tlogReplicas, pullReplicas, createNodeSet);
+     log.debug("getNodesForNewReplicas() shard: {} , nrtReplicas : {} , tlogReplicas: {} , pullReplicas: {} , createNodeSet {}"
+         , shard, nrtReplicas, tlogReplicas, pullReplicas, createNodeSet);
      DocCollection coll = clusterState.getCollection(collectionName);
 -    int maxShardsPerNode = coll.getMaxShardsPerNode() == -1 ? Integer.MAX_VALUE : coll.getMaxShardsPerNode();
 -    List<String> createNodeList;
 +    List<String> createNodeList = null;
  
      if (createNodeSet instanceof List) {
        createNodeList = (List<String>) createNodeSet;
@@@ -337,8 -341,27 +340,11 @@@
        createNodeList = createNodeSet == null ? null : new ArrayList<>(new LinkedHashSet<>(StrUtils.splitSmart((String) createNodeSet, ",", true)));
      }
  
-     HashMap<String, ReplicaCount> nodeNameVsShardCount = getNodeNameVsShardCount(collectionName, clusterState, createNodeList);
+     // produces clear message when down nodes are the root cause, without this the user just
+     // gets a log message of detail about the nodes that are up, and a message that policies could not
+     // be satisfied which then requires study to diagnose the issue.
+     checkLiveNodes(createNodeList,clusterState);
  
 -    if (createNodeList == null) { // We only care if we haven't been told to put new replicas on specific nodes.
 -      HashMap<String, ReplicaCount> nodeNameVsShardCount = getNodeNameVsShardCount(collectionName, clusterState, null);
 -      long availableSlots = 0;
 -      for (Map.Entry<String, ReplicaCount> ent : nodeNameVsShardCount.entrySet()) {
 -        //ADDREPLICA can put more than maxShardsPerNode on an instance, so this test is necessary.
 -        if (maxShardsPerNode > ent.getValue().thisCollectionNodes) {
 -          availableSlots += (maxShardsPerNode - ent.getValue().thisCollectionNodes);
 -        }
 -      }
 -      if (availableSlots < nrtReplicas + tlogReplicas + pullReplicas) {
 -        throw new AssignmentException(
 -            String.format(Locale.ROOT, "Cannot create %d new replicas for collection %s given the current number of eligible live nodes %d and a maxShardsPerNode of %d",
 -                nrtReplicas, collectionName, nodeNameVsShardCount.size(), maxShardsPerNode));
 -      }
 -    }
 -
      AssignRequest assignRequest = new AssignRequestBuilder()
          .forCollection(collectionName)
          .forShard(Collections.singletonList(shard))
@@@ -392,25 -415,23 +398,22 @@@
  
    static HashMap<String, ReplicaCount> getNodeNameVsShardCount(String collectionName,
                                                                         ClusterState clusterState, List<String> createNodeList) {
-     Set<String> nodes = clusterState.getLiveNodes();
- 
-     List<String> nodeList = new ArrayList<>(nodes.size());
-     nodeList.addAll(nodes);
-     if (createNodeList != null) nodeList.retainAll(createNodeList);
- 
      HashMap<String, ReplicaCount> nodeNameVsShardCount = new HashMap<>();
-     for (String s : nodeList) {
+     List<String> liveNodes = createNodeList == null || createNodeList.isEmpty() ?
+         new ArrayList<>(clusterState.getLiveNodes()) :
+         checkLiveNodes(createNodeList, clusterState);
+ 
+     for (String s : liveNodes) {
        nodeNameVsShardCount.put(s, new ReplicaCount(s));
      }
+ 
+     // if we were given a list, just use that, don't worry about counts
      if (createNodeList != null) { // Overrides petty considerations about maxShardsPerNode
-       if (createNodeList.size() != nodeNameVsShardCount.size()) {
-         throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
-             "At least one of the node(s) specified " + createNodeList + " are not currently active in "
-                 + nodeNameVsShardCount.keySet() + ", no action taken.");
-       }
        return nodeNameVsShardCount;
      }
+ 
+     // if we get here we were not given a createNodeList, build a map with real counts.
      DocCollection coll = clusterState.getCollection(collectionName);
 -    int maxShardsPerNode = coll.getMaxShardsPerNode() == -1 ? Integer.MAX_VALUE : coll.getMaxShardsPerNode();
      Map<String, DocCollection> collections = clusterState.getCollectionsMap();
      for (Map.Entry<String, DocCollection> entry : collections.entrySet()) {
        DocCollection c = entry.getValue();
diff --cc solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java
index b8608b8,8eaf8f8..d98d50a
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java
@@@ -320,8 -320,8 +318,7 @@@ public class ReindexCollectionCmd imple
          }
        }
  
 -      propMap.put(ZkStateReader.MAX_SHARDS_PER_NODE, maxShardsPerNode);
        propMap.put(CommonAdminParams.WAIT_FOR_FINAL_STATE, true);
-       propMap.put(DocCollection.STATE_FORMAT, message.getInt(DocCollection.STATE_FORMAT, coll.getStateFormat()));
        if (rf != null) {
          propMap.put(ZkStateReader.REPLICATION_FACTOR, rf);
        }
diff --cc solr/core/src/java/org/apache/solr/cloud/api/collections/RestoreCmd.java
index 21b061a,c7b5aa1..d678780a
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/RestoreCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/RestoreCmd.java
@@@ -64,8 -64,8 +64,7 @@@ import org.apache.solr.handler.componen
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
- import static org.apache.solr.common.cloud.DocCollection.STATE_FORMAT;
  import static org.apache.solr.common.cloud.ZkStateReader.COLLECTION_PROP;
 -import static org.apache.solr.common.cloud.ZkStateReader.MAX_SHARDS_PER_NODE;
  import static org.apache.solr.common.cloud.ZkStateReader.NRT_REPLICAS;
  import static org.apache.solr.common.cloud.ZkStateReader.PULL_REPLICAS;
  import static org.apache.solr.common.cloud.ZkStateReader.REPLICATION_FACTOR;
diff --cc solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
index 5abb5e7,f443832..9b1cf78
--- a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
@@@ -125,9 -125,9 +125,8 @@@ import static org.apache.solr.common.So
  import static org.apache.solr.common.cloud.DocCollection.DOC_ROUTER;
  import static org.apache.solr.common.cloud.DocCollection.RULE;
  import static org.apache.solr.common.cloud.DocCollection.SNITCH;
- import static org.apache.solr.common.cloud.DocCollection.STATE_FORMAT;
  import static org.apache.solr.common.cloud.ZkStateReader.AUTO_ADD_REPLICAS;
  import static org.apache.solr.common.cloud.ZkStateReader.COLLECTION_PROP;
 -import static org.apache.solr.common.cloud.ZkStateReader.MAX_SHARDS_PER_NODE;
  import static org.apache.solr.common.cloud.ZkStateReader.NRT_REPLICAS;
  import static org.apache.solr.common.cloud.ZkStateReader.PROPERTY_PROP;
  import static org.apache.solr.common.cloud.ZkStateReader.PROPERTY_VALUE_PROP;
@@@ -1171,7 -1170,7 +1169,7 @@@ public class CollectionsHandler extend
        }
        // from CREATE_OP:
        copy(req.getParams(), params, COLL_CONF, REPLICATION_FACTOR, NRT_REPLICAS, TLOG_REPLICAS,
-           PULL_REPLICAS, STATE_FORMAT, AUTO_ADD_REPLICAS, CREATE_NODE_SET, CREATE_NODE_SET_SHUFFLE);
 -          PULL_REPLICAS, MAX_SHARDS_PER_NODE, AUTO_ADD_REPLICAS, CREATE_NODE_SET, CREATE_NODE_SET_SHUFFLE);
++          PULL_REPLICAS, AUTO_ADD_REPLICAS, CREATE_NODE_SET, CREATE_NODE_SET_SHUFFLE);
        copyPropertiesWithPrefix(req.getParams(), params, COLL_PROP_PREFIX);
        return params;
      }),
diff --cc solr/core/src/test/org/apache/solr/cloud/CreateRoutedAliasTest.java
index 58757de,afb13b2..cd6edd9
--- a/solr/core/src/test/org/apache/solr/cloud/CreateRoutedAliasTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/CreateRoutedAliasTest.java
@@@ -151,7 -152,7 +151,6 @@@ public class CreateRoutedAliasTest exte
      //assertEquals(1, coll.getNumNrtReplicas().intValue()); // TODO seems to be erroneous; I figured 'null'
      assertEquals(1, coll.getNumTlogReplicas().intValue()); // per-shard
      assertEquals(1, coll.getNumPullReplicas().intValue()); // per-shard
-     //TODO SOLR-11877 assertEquals(2, coll.getStateFormat());
 -    assertEquals(4, coll.getMaxShardsPerNode());
      assertTrue("nodeSet didn't work?",
          coll.getSlices().stream().flatMap(s -> s.getReplicas().stream())
              .map(Replica::getNodeName).allMatch(createNode::equals));
diff --cc solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
index 601dc97,8be7a2c..ebb6c75
--- a/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
@@@ -1099,8 -1109,8 +1109,7 @@@ public class OverseerTest extends SolrT
          ZkNodeProps m = new ZkNodeProps(Overseer.QUEUE_OPERATION, CollectionParams.CollectionAction.CREATE.toLower(),
              "name", "perf" + i,
              ZkStateReader.NUM_SHARDS_PROP, "1",
-             "stateFormat", String.valueOf(STATE_FORMAT),
 -            ZkStateReader.REPLICATION_FACTOR, "1",
 -            ZkStateReader.MAX_SHARDS_PER_NODE, "1"
 +            ZkStateReader.REPLICATION_FACTOR, "1"
              );
          ZkDistributedQueue q = overseers.get(0).getStateUpdateQueue();
          q.offer(Utils.toJSON(m));
@@@ -1476,6 -1471,8 +1470,7 @@@
  
        // create collection
        {
 -        final Integer maxShardsPerNode = numReplicas * numShards;
+         zkClient.makePath(ZkStateReader.COLLECTIONS_ZKNODE + "/" + COLLECTION, true);
          ZkNodeProps m = new ZkNodeProps(Overseer.QUEUE_OPERATION, CollectionParams.CollectionAction.CREATE.toLower(),
              "name", COLLECTION,
              ZkStateReader.NUM_SHARDS_PROP, numShards.toString(),
diff --cc solr/core/src/test/org/apache/solr/cloud/TestPullReplica.java
index 7005ab5,65a03e8..955c4b5
--- a/solr/core/src/test/org/apache/solr/cloud/TestPullReplica.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestPullReplica.java
@@@ -388,8 -391,10 +386,9 @@@ public class TestPullReplica extends So
    /*
     * validate that replication still happens on a new leader
     */
+   @SuppressWarnings({"try"})
    private void doTestNoLeader(boolean removeReplica) throws Exception {
      CollectionAdminRequest.createCollection(collectionName, "conf", 1, 1, 0, 1)
 -      .setMaxShardsPerNode(100)
        .process(cluster.getSolrClient());
      waitForState("Expected collection to be created with 1 shard and 2 replicas", collectionName, clusterShape(1, 2));
      DocCollection docCollection = assertNumberOfReplicas(1, 0, 1, false, true);
diff --cc solr/core/src/test/org/apache/solr/cloud/api/collections/AbstractCloudBackupRestoreTestCase.java
index fc32aa9,21a362b..1203924
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/AbstractCloudBackupRestoreTestCase.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/AbstractCloudBackupRestoreTestCase.java
@@@ -332,9 -346,18 +332,11 @@@ public abstract class AbstractCloudBack
      int computeRestoreMaxShardsPerNode = (int) Math.ceil((restoreReplFactor * numShards/(double) cluster.getJettySolrRunners().size()));
  
      if (restoreReplFactor > backupReplFactor) { //else the backup maxShardsPerNode should be enough
-       log.info("numShards={} restoreReplFactor={} maxShardsPerNode={} totalNodes={}",
-           numShards, restoreReplFactor, computeRestoreMaxShardsPerNode, cluster.getJettySolrRunners().size());
+       if (log.isInfoEnabled()) {
+         log.info("numShards={} restoreReplFactor={} maxShardsPerNode={} totalNodes={}",
+             numShards, restoreReplFactor, computeRestoreMaxShardsPerNode, cluster.getJettySolrRunners().size());
+       }
  
 -      if (random().nextBoolean()) { //set it to -1
 -        isMaxShardsUnlimited = true;
 -        restore.setMaxShardsPerNode(-1);
 -      } else {
 -        isMaxShardsPerNodeExternal = true;
 -        restore.setMaxShardsPerNode(computeRestoreMaxShardsPerNode);
 -      }
      }
  
      if (rarely()) { // Try with createNodeSet configuration
@@@ -389,9 -413,14 +391,7 @@@
      assertEquals(restoreCollection.toString(), restoreReplcationFactor, restoreCollection.getNumNrtReplicas().intValue());
      assertEquals(restoreCollection.toString(), restorePullReplicas, restoreCollection.getNumPullReplicas().intValue());
      assertEquals(restoreCollection.toString(), restoreTlogReplicas, restoreCollection.getNumTlogReplicas().intValue());
 -    if (isMaxShardsPerNodeExternal) {
 -      assertEquals(restoreCollectionName, restoreMaxShardsPerNode, restoreCollection.getMaxShardsPerNode());
 -    } else if (isMaxShardsUnlimited){
 -      assertEquals(restoreCollectionName, -1, restoreCollection.getMaxShardsPerNode());
 -    } else {
 -      assertEquals(restoreCollectionName, backupCollection.getMaxShardsPerNode(), restoreCollection.getMaxShardsPerNode());
 -    }
  
-     assertEquals("Restore collection should use stateFormat=2", 2, restoreCollection.getStateFormat());
- 
      //SOLR-12605: Add more docs after restore is complete to see if they are getting added fine
      //explicitly querying the leaders. If we use CloudSolrClient there is no guarantee that we'll hit a nrtReplica
      {
diff --cc solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java
index 96e32f9,b0a9691..ef718e0
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java
@@@ -93,8 -92,8 +91,7 @@@ public class TestCollectionAPI extends 
      clusterStatusBadCollectionTest();
      replicaPropTest();
      clusterStatusZNodeVersion();
-     testClusterStateMigration();
      testCollectionCreationCollectionNameValidation();
 -    testCollectionCreationTooManyShards();
      testReplicationFactorValidaton();
      testCollectionCreationShardNameValidation();
      testAliasCreationNameValidation();
diff --cc solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoAddReplicasIntegrationTest.java
index 0bc956a,7a595d5..c1a0d64
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoAddReplicasIntegrationTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoAddReplicasIntegrationTest.java
@@@ -275,12 -298,15 +295,14 @@@ public class AutoAddReplicasIntegration
      CollectionAdminRequest.createCollection(COLLECTION, "conf", 2, 2)
        .setCreateNodeSet(jetty1.getNodeName()+","+jetty2.getNodeName())
        .setAutoAddReplicas(false) // NOTE: false
 -      .setMaxShardsPerNode(2)
        .process(cluster.getSolrClient());
-     
-     log.info("Creating {} using jetty1:{}/{} and jetty2:{}/{}", ALT_COLLECTION,
-              jetty1.getNodeName(), jetty1.getLocalPort(),
-              jetty2.getNodeName(), jetty2.getLocalPort());
-              
+ 
+     if (log.isInfoEnabled()) {
+       log.info("Creating {} using jetty1:{}/{} and jetty2:{}/{}", ALT_COLLECTION,
+           jetty1.getNodeName(), jetty1.getLocalPort(),
+           jetty2.getNodeName(), jetty2.getLocalPort());
+     }
+ 
      CollectionAdminRequest.createCollection(ALT_COLLECTION, "conf", 2, 2)
        .setCreateNodeSet(jetty1.getNodeName()+","+jetty2.getNodeName())
        .setAutoAddReplicas(true) // NOTE: true
diff --cc solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoAddReplicasPlanActionTest.java
index a8fd3fd,8fca98d..081b89e
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoAddReplicasPlanActionTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoAddReplicasPlanActionTest.java
@@@ -91,11 -93,13 +92,11 @@@ public class AutoAddReplicasPlanActionT
      CollectionAdminRequest.createCollection(collection2, "conf", 1, 2)
          .setCreateNodeSet(jetty2.getNodeName()+","+jetty3.getNodeName())
          .setAutoAddReplicas(false)
 -        .setMaxShardsPerNode(1)
          .process(cluster.getSolrClient());
-     // the number of cores in jetty1 (5) will be larger than jetty3 (1)
-     CollectionAdminRequest.createCollection("testSimple3", "conf", 3, 1)
+     // the number of cores in jetty1 (6) will be larger than jetty3 (1)
+     CollectionAdminRequest.createCollection(collection3, "conf", 3, 1)
          .setCreateNodeSet(jetty1.getNodeName())
          .setAutoAddReplicas(false)
 -        .setMaxShardsPerNode(3)
          .process(cluster.getSolrClient());
      
      cluster.waitForActiveCollection(collection1, 2, 4);
diff --cc solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimExecutePlanAction.java
index c143978,5919c1c..138ce8d
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimExecutePlanAction.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/sim/TestSimExecutePlanAction.java
@@@ -92,10 -94,13 +94,12 @@@ public class TestSimExecutePlanAction e
      String collectionName = "testExecute";
      CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,
          "conf", 1, 2);
 -    create.setMaxShardsPerNode(1);
      create.process(solrClient);
  
-     log.info("Collection ready after " + CloudUtil.waitForState(cluster, collectionName, 120, TimeUnit.SECONDS,
-         CloudUtil.clusterShape(1, 2, false, true)) + "ms");
+     if (log.isInfoEnabled()) {
+       log.info("Collection ready after {} ms", CloudUtil.waitForState(cluster, collectionName, 120, TimeUnit.SECONDS,
+           CloudUtil.clusterShape(1, 2, false, true)));
+     }
  
      String sourceNodeName = cluster.getSimClusterStateProvider().simGetRandomNode();
      ClusterState clusterState = cluster.getClusterStateProvider().getClusterState();
diff --cc solr/core/src/test/org/apache/solr/cloud/overseer/TestClusterStateMutator.java
index 7dafa1c,0be579c..988ac25
--- a/solr/core/src/test/org/apache/solr/cloud/overseer/TestClusterStateMutator.java
+++ b/solr/core/src/test/org/apache/solr/cloud/overseer/TestClusterStateMutator.java
@@@ -53,8 -53,9 +53,8 @@@ public class TestClusterStateMutator ex
      DocCollection collection = cmd.collection;
      assertEquals("xyz", collection.getName());
      assertEquals(1, collection.getSlicesMap().size());
 -    assertEquals(1, collection.getMaxShardsPerNode());
  
-     ClusterState state = new ClusterState(-1, Collections.<String>emptySet(), Collections.singletonMap("xyz", collection));
+     ClusterState state = new ClusterState(Collections.<String>emptySet(), Collections.singletonMap("xyz", collection));
      message = new ZkNodeProps(Utils.makeMap(
          "name", "abc",
          "numShards", "2",
diff --cc solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java
index 3e64982,9dafe6f..6cd896f
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java
@@@ -258,11 -258,14 +254,6 @@@ public class DocCollection extends ZkNo
      return autoAddReplicas;
    }
    
-   public String getZNode(){
-     return znode;
 -  public int getMaxShardsPerNode() {
 -    if (maxShardsPerNode == null) {
 -      throw new SolrException(ErrorCode.BAD_REQUEST, MAX_SHARDS_PER_NODE + " is not in the cluster state.");
 -    }
 -    //maxShardsPerNode=0 when policy is used. This variable is not important then
 -    return maxShardsPerNode == 0 ? Integer.MAX_VALUE : maxShardsPerNode;
--  }
- 
--
    public DocRouter getRouter() {
      return router;
    }


[lucene-solr] 07/11: Merge branch 'master' into jira/solr-12847-2

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ab pushed a commit to branch jira/solr-12847-2
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 2fbff5d86ec508ed8df16528faa7cf63d482ce35
Merge: 09ee721 aba7a61
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Thu Jun 25 18:28:47 2020 +0200

    Merge branch 'master' into jira/solr-12847-2

 .../compound/hyphenation/HyphenationTree.java      |   2 +-
 .../lucene/index/DocumentsWriterFlushControl.java  |   2 +-
 .../java/org/apache/lucene/index/IndexWriter.java  |  44 +-
 .../java/org/apache/lucene/index/MergePolicy.java  |  10 +-
 .../org/apache/lucene/index/TestMergePolicy.java   |   1 -
 .../lucene/facet/taxonomy/TaxonomyReader.java      |   2 +-
 .../queryparser/docs/xml/LuceneCoreQuery.dtd.html  |   2 +-
 .../docs/xml/LuceneCoreQuery.dtd.org.html          |   2 +-
 .../flexible/core/nodes/QueryNodeImpl.java         |   2 +-
 .../lucene/queryparser/xml/LuceneCoreQuery.dtd     |   2 +-
 lucene/site/changes/changes2html.pl                |   2 +-
 .../suggest/analyzing/FreeTextSuggester.java       |   4 +-
 solr/CHANGES.txt                                   |   9 +
 .../solr/collection1/conf/solrconfig.xml           |  11 +
 .../solr/collection1/conf/solrconfig.xml           |   4 +
 .../src/java/org/apache/solr/api/AnnotatedApi.java | 113 +++--
 solr/core/src/java/org/apache/solr/api/ApiBag.java |   9 +
 .../apache/solr/api/CustomContainerPlugins.java    | 313 ++++++++++++
 .../src/java/org/apache/solr/api/PayloadObj.java   |  35 +-
 .../src/java/org/apache/solr/api/V2HttpCall.java   |  29 +-
 .../java/org/apache/solr/core/CoreContainer.java   |  41 +-
 .../src/java/org/apache/solr/core/PluginInfo.java  |   4 +-
 .../src/java/org/apache/solr/core/SolrConfig.java  |  21 +-
 .../src/java/org/apache/solr/core/SolrCore.java    |  16 +-
 .../src/java/org/apache/solr/core/SolrPaths.java   |  27 --
 .../org/apache/solr/filestore/PackageStoreAPI.java |  19 +-
 .../java/org/apache/solr/handler/CatStream.java    |  70 ++-
 .../apache/solr/handler/ReplicationHandler.java    |   2 +-
 .../solr/handler/admin/ContainerPluginsApi.java    | 179 +++++++
 .../solr/handler/component/HttpShardHandler.java   |   2 +-
 .../component/PivotFacetFieldValueCollection.java  |   2 +-
 .../solr/handler/component/SearchHandler.java      |  31 +-
 .../src/java/org/apache/solr/pkg/PackageAPI.java   |  23 +-
 .../java/org/apache/solr/pkg/PackageLoader.java    |   8 +
 .../org/apache/solr/search/JoinQParserPlugin.java  | 531 ++-------------------
 .../{JoinQParserPlugin.java => JoinQuery.java}     | 149 +-----
 .../java/org/apache/solr/search/QParserPlugin.java |   2 -
 ...Parser.java => CrossCollectionJoinQParser.java} |  26 +-
 ...CJFQuery.java => CrossCollectionJoinQuery.java} |  17 +-
 .../solr/search/join/ScoreJoinQParserPlugin.java   |   5 +-
 .../apache/solr/search/join/XCJFQParserPlugin.java |  66 ---
 .../apache/solr/servlet/DirectSolrConnection.java  |   2 +-
 .../java/org/apache/solr/servlet/HttpSolrCall.java |   2 +-
 .../apache/solr/servlet/SolrDispatchFilter.java    |   1 -
 .../CountFieldValuesUpdateProcessorFactory.java    |   2 +-
 .../DocExpirationUpdateProcessorFactory.java       |   4 +-
 .../MaxFieldValueUpdateProcessorFactory.java       |   2 +-
 .../MinFieldValueUpdateProcessorFactory.java       |   2 +-
 .../solr/util/circuitbreaker/CircuitBreaker.java   |  51 ++
 .../util/circuitbreaker/CircuitBreakerManager.java | 105 ++++
 .../circuitbreaker/CircuitBreakerType.java}        |  23 +-
 .../util/circuitbreaker/MemoryCircuitBreaker.java  |  87 ++++
 .../resources/EditableSolrConfigAttributes.json    |   2 +
 .../runtimecode/MyPlugin.java}                     |  28 +-
 .../runtimecode/containerplugin.v.1.jar.bin        | Bin 0 -> 867 bytes
 .../runtimecode/containerplugin.v.2.jar.bin        | Bin 0 -> 867 bytes
 solr/core/src/test-files/runtimecode/sig.txt       |   8 +
 .../conf/solrconfig-cache-enable-disable.xml       |   4 +
 .../solr/collection1/conf/solrconfig-elevate.xml   |   4 +
 .../conf/solrconfig-implicitproperties.xml         |   2 +
 ...le.xml => solrconfig-memory-circuitbreaker.xml} |  15 +-
 .../conf/solrconfig-sortingresponse.xml            |   4 +
 .../solr/collection1/conf/solrconfig.xml           |  10 +
 .../solr/collection1/conf/solrconfig_perf.xml      |   2 +
 .../configsets/{xcjf => ccjoin}/conf/schema.xml    |   0
 .../{xcjf => ccjoin}/conf/solrconfig.xml           |  22 +-
 .../test/org/apache/solr/core/SolrCoreTest.java    |   2 +
 .../org/apache/solr/core/TestConfigOverlay.java    |   2 +
 .../solr/filestore/TestDistribPackageStore.java    |  27 +-
 .../apache/solr/handler/TestContainerPlugin.java   | 304 ++++++++++++
 .../solr/handler/admin/TestApiFramework.java       |  34 +-
 .../src/test/org/apache/solr/pkg/TestPackages.java |   2 +-
 .../org/apache/solr/search/QueryEqualityTest.java  |   6 -
 ...Test.java => CrossCollectionJoinQueryTest.java} |  88 ++--
 .../org/apache/solr/util/TestCircuitBreaker.java   | 190 ++++++++
 .../example-DIH/solr/db/conf/solrconfig.xml        |  10 +
 .../example-DIH/solr/mail/conf/solrconfig.xml      |  10 +
 .../example-DIH/solr/solr/conf/solrconfig.xml      |  10 +
 solr/example/files/conf/solrconfig.xml             |  10 +
 .../solr/configsets/_default/conf/solrconfig.xml   |  10 +
 .../conf/solrconfig.xml                            |  10 +
 solr/solr-ref-guide/src/config-api.adoc            |   4 +
 solr/solr-ref-guide/src/other-parsers.adoc         | 184 ++++---
 .../src/query-settings-in-solrconfig.adoc          |  18 +
 .../solrj/cloud/autoscaling/PolicyHelper.java      | 310 ++++++++----
 .../client/solrj/cloud/autoscaling/Suggester.java  |   2 +-
 .../client/solrj/request/beans/PluginMeta.java     |  58 +++
 .../solrj/response/AnalysisResponseBase.java       |   2 +-
 .../org/apache/solr/common/params/FacetParams.java |   4 +-
 .../org/apache/solr/common/util/NamedList.java     |   2 +-
 .../java/org/apache/solr/common/util/PathTrie.java |  50 +-
 .../solr/autoscaling/testAddTooManyPerPolicy.json  | 129 +++++
 .../client/solrj/cloud/autoscaling/TestPolicy.java | 134 +++++-
 .../solrj/cloud/autoscaling/TestPolicy2.java       |  12 +
 .../solrj/io/stream/StreamExpressionTest.java      |  42 +-
 .../org/apache/solr/common/util/TestPathTrie.java  |   8 +
 96 files changed, 2577 insertions(+), 1318 deletions(-)



[lucene-solr] 02/11: Merge branch 'master' into jira/solr-12847-2

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ab pushed a commit to branch jira/solr-12847-2
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 93af8ce8ee4a7221ec88a149d81268566ce43d5d
Merge: 25f1351 18af632
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Tue Apr 14 20:17:57 2020 +0200

    Merge branch 'master' into jira/solr-12847-2

 .../org/apache/lucene/index/DocumentsWriter.java   |  17 ++-
 .../lucene/index/DocumentsWriterDeleteQueue.java   |  87 ++++++++++---
 .../lucene/index/DocumentsWriterFlushControl.java  |   8 +-
 .../java/org/apache/lucene/index/IndexWriter.java  |  18 +--
 .../search/ControlledRealTimeReopenThread.java     |  18 ++-
 .../org/apache/lucene/index/TestIndexWriter.java   | 136 +++++++++++++++++++++
 .../search/TestControlledRealTimeReopenThread.java |   8 +-
 .../solr/handler/admin/HealthCheckHandler.java     |   2 +-
 8 files changed, 250 insertions(+), 44 deletions(-)


[lucene-solr] 08/11: SOLR-12847: Fix test expectations.

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ab pushed a commit to branch jira/solr-12847-2
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 3a1bf10718f7ac26a60deb50020a16b526b24ac1
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Thu Jun 25 19:05:00 2020 +0200

    SOLR-12847: Fix test expectations.
---
 .../collections/CollectionTooManyReplicasTest.java | 34 ++++++++--------------
 1 file changed, 12 insertions(+), 22 deletions(-)

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 aaa4add..c4ffaad 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
@@ -67,44 +67,34 @@ public class CollectionTooManyReplicasTest extends SolrCloudTestCase {
     // this node should have 2 replicas on it
     CollectionAdminRequest.addReplicaToShard(collectionName, "shard1")
         .setNode(nodeName)
+        .withProperty("name", "bogus2")
         .process(cluster.getSolrClient());
 
     // equivalent to maxShardsPerNode=1
     String commands =  "{ set-cluster-policy: [ {replica: '<2', shard: '#ANY', node: '#ANY', strict: true} ] }";
     cluster.getSolrClient().request(CloudTestUtils.AutoScalingRequest.create(SolrRequest.METHOD.POST, commands));
 
-    for (int i = 0; i < 10; i++) {
-      // Three replicas so far, should be able to create another one "normally"
+    // this should fail because the policy prevents it
+    Exception e = expectThrows(Exception.class, () -> {
       CollectionAdminRequest.addReplicaToShard(collectionName, "shard1")
+          .setNode(nodeName)
           .process(cluster.getSolrClient());
-    }
-    CollectionAdminRequest.addReplicaToShard(collectionName, "shard1")
-        .process(cluster.getSolrClient());
-    // This one should fail though, no "node" parameter specified
-//    Exception e = expectThrows(Exception.class, () -> {
-//      CollectionAdminRequest.addReplicaToShard(collectionName, "shard1")
-//          .process(cluster.getSolrClient());
-//    });
-
-//    assertTrue("Should have gotten the right error message back",
-//          e.getMessage().contains("given the current number of eligible live nodes"));
-
+    });
+    assertTrue(e.toString(), e.toString().contains("No node can satisfy"));
 
-    // Oddly, we should succeed next just because setting property.name will not check for nodes being "full up"
-    // TODO: Isn't this a bug?
+    // this should succeed because it places the replica on a different node
     CollectionAdminRequest.addReplicaToShard(collectionName, "shard1")
-        .withProperty("name", "bogus2")
-        .setNode(nodeName)
         .process(cluster.getSolrClient());
 
+
     DocCollection collectionState = getCollectionState(collectionName);
     Slice slice = collectionState.getSlice("shard1");
     Replica replica = getRandomReplica(slice, r -> r.getCoreName().equals("bogus2"));
     assertNotNull("Should have found a replica named 'bogus2'", replica);
-    assertEquals("Replica should have been put on correct core", nodeName, replica.getNodeName());
+    assertEquals("Replica should have been put on correct node", nodeName, replica.getNodeName());
 
-    // Shard1 should have 4 replicas
-    assertEquals("There should be 4 replicas for shard 1", 4, slice.getReplicas().size());
+    // Shard1 should have 2 replicas
+    assertEquals("There should be 3 replicas for shard 1", 3, slice.getReplicas().size());
 
     // And let's fail one more time because to ensure that the math doesn't do weird stuff it we have more replicas
     // than simple calcs would indicate.
@@ -114,7 +104,7 @@ public class CollectionTooManyReplicasTest extends SolrCloudTestCase {
     });
 
     assertTrue("Should have gotten the right error message back",
-        e2.getMessage().contains("given the current number of eligible live nodes"));
+        e2.getMessage().contains("No node can satisfy"));
 
     // wait for recoveries to finish, for a clean shutdown - see SOLR-9645
     waitForState("Expected to see all replicas active", collectionName, (n, c) -> {


[lucene-solr] 11/11: Merge branch 'master' into jira/solr-12847-2

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ab pushed a commit to branch jira/solr-12847-2
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit d1d5aece9b41dac1810456720de0181deb67e57e
Merge: 8c1d076 1f6de31
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Wed Jul 1 17:20:23 2020 +0200

    Merge branch 'master' into jira/solr-12847-2

 lucene/CHANGES.txt                                 |  11 +
 .../java/org/apache/lucene/geo/Tessellator.java    |  11 +-
 .../org/apache/lucene/index/FilterMergePolicy.java |   5 +
 .../java/org/apache/lucene/index/IndexWriter.java  | 280 +++++++++++++------
 .../org/apache/lucene/index/IndexWriterConfig.java |  18 ++
 .../apache/lucene/index/LiveIndexWriterConfig.java |  13 +
 .../java/org/apache/lucene/index/MergePolicy.java  |  97 ++++++-
 .../java/org/apache/lucene/index/MergeTrigger.java |   7 +-
 .../org/apache/lucene/index/NoMergePolicy.java     |   3 +
 .../lucene/index/OneMergeWrappingMergePolicy.java  |   5 +
 .../org/apache/lucene/index/ReadersAndUpdates.java |  14 +-
 .../src/java/org/apache/lucene/util/IOUtils.java   |  10 +
 .../org/apache/lucene/geo/TestTessellator.java     |  14 +
 .../lucene/index/TestDemoParallelLeafReader.java   |   5 +-
 .../org/apache/lucene/index/TestIndexWriter.java   | 169 +++++++-----
 .../lucene/index/TestIndexWriterMergePolicy.java   | 242 ++++++++++++++++-
 .../org/apache/lucene/index/TestMergePolicy.java   |  10 +-
 .../org/apache/lucene/luke/app/IndexHandler.java   |   2 +-
 .../dialog/documents/AddDocumentDialogFactory.java |   4 +-
 .../dialog/menubar/CheckIndexDialogFactory.java    |   2 +-
 .../dialog/menubar/OpenIndexDialogFactory.java     |   2 +-
 .../luke/app/desktop/util/ExceptionHandler.java    |   4 +-
 .../apache/lucene/luke/models/util/IndexUtils.java |   8 +-
 .../queries/intervals/OrderedIntervalsSource.java  |   4 +-
 .../queries/intervals/TestIntervalQuery.java       |  10 +-
 .../lucene/queries/intervals/TestIntervals.java    |  15 +-
 .../lucene/search/TestPhraseWildcardQuery.java     |   7 +-
 .../apache/lucene/index/MockRandomMergePolicy.java |  32 +++
 .../org/apache/lucene/util/LuceneTestCase.java     |   1 +
 .../org/apache/lucene/geo/lucene-9417.geojson.gz   | Bin 0 -> 79049 bytes
 solr/CHANGES.txt                                   |  19 +-
 .../solr/collection1/conf/solrconfig.xml           |  11 -
 .../org/apache/solr/ltr/feature/SolrFeature.java   |   8 +-
 .../solr/collection1/conf/solrconfig.xml           |   4 -
 .../src/java/org/apache/solr/api/AnnotatedApi.java | 116 ++++----
 .../apache/solr/api/CustomContainerPlugins.java    |  23 +-
 .../src/java/org/apache/solr/cloud/rule/Rule.java  |   2 +-
 .../src/java/org/apache/solr/core/SolrConfig.java  |  19 --
 .../src/java/org/apache/solr/core/SolrCore.java    |  16 +-
 .../src/java/org/apache/solr/core/SolrPaths.java   |   1 +
 .../java/org/apache/solr/handler/CatStream.java    |   4 +-
 .../apache/solr/handler/ReplicationHandler.java    |  23 +-
 .../java/org/apache/solr/handler/SnapShooter.java  |   3 +
 .../apache/solr/handler/admin/MergeIndexesOp.java  |   8 +-
 .../solr/handler/component/SearchHandler.java      |  31 +--
 .../apache/solr/packagemanager/PackageManager.java | 301 ++++++++++++++++++---
 .../apache/solr/packagemanager/PackageUtils.java   |   3 +
 .../solr/packagemanager/RepositoryManager.java     |  12 +-
 .../apache/solr/packagemanager/SolrPackage.java    |   4 +
 .../solr/packagemanager/SolrPackageInstance.java   |  18 +-
 .../src/java/org/apache/solr/pkg/PackageAPI.java   |   2 +-
 .../java/org/apache/solr/pkg/PackageLoader.java    |  20 +-
 .../src/java/org/apache/solr/schema/RankField.java | 140 ++++++++++
 .../org/apache/solr/search/BoolQParserPlugin.java  |  53 ++--
 .../java/org/apache/solr/search/QParserPlugin.java |   1 +
 .../org/apache/solr/search/RankQParserPlugin.java  | 158 +++++++++++
 .../apache/solr/search/join/FiltersQParser.java    |  91 +++----
 .../java/org/apache/solr/servlet/HttpSolrCall.java |  17 +-
 .../src/java/org/apache/solr/util/PackageTool.java |  11 +-
 .../solr/util/circuitbreaker/CircuitBreaker.java   |  51 ----
 .../util/circuitbreaker/CircuitBreakerManager.java | 105 -------
 .../util/circuitbreaker/CircuitBreakerType.java    |  26 --
 .../util/circuitbreaker/MemoryCircuitBreaker.java  |  87 ------
 .../resources/EditableSolrConfigAttributes.json    |   2 -
 solr/core/src/test-files/runtimecode/MyPlugin.java |   2 +-
 .../solr/collection1/conf/schema-rank-fields.xml   |  27 ++
 .../test-files/solr/collection1/conf/schema15.xml  |   3 +
 .../conf/solrconfig-cache-enable-disable.xml       |   4 -
 .../solr/collection1/conf/solrconfig-elevate.xml   |   4 -
 .../conf/solrconfig-implicitproperties.xml         |   2 -
 .../conf/solrconfig-memory-circuitbreaker.xml      |  91 -------
 .../conf/solrconfig-sortingresponse.xml            |   4 -
 .../solr/collection1/conf/solrconfig.xml           |  10 -
 .../solr/collection1/conf/solrconfig_perf.xml      |   2 -
 .../apache/solr/cloud/BasicDistributedZk2Test.java |   5 +-
 .../AbstractCloudBackupRestoreTestCase.java        |   7 +
 .../AutoAddReplicasIntegrationTest.java            |   2 +-
 .../test/org/apache/solr/core/SolrCoreTest.java    |   2 -
 .../org/apache/solr/core/TestConfigOverlay.java    |   2 -
 .../core/snapshots/TestSolrCloudSnapshots.java     |   2 +
 .../solr/core/snapshots/TestSolrCoreSnapshots.java |   2 +
 .../apache/solr/handler/TestContainerPlugin.java   |  56 +++-
 .../org/apache/solr/handler/TestCoreBackup.java    |  22 +-
 .../solr/handler/TestReplicationHandler.java       |   4 +-
 .../org/apache/solr/handler/TestRestoreCore.java   |  11 +
 .../solr/handler/TestStressThreadBackup.java       |  13 +
 .../apache/solr/handler/V2ApiIntegrationTest.java  |  19 +-
 .../admin/CoreMergeIndexesAdminHandlerTest.java    |   8 +-
 .../solr/handler/admin/TestApiFramework.java       |  15 +-
 .../test/org/apache/solr/schema/RankFieldTest.java | 285 +++++++++++++++++++
 .../org/apache/solr/search/QueryEqualityTest.java  |  12 +
 .../apache/solr/search/RankQParserPluginTest.java  | 258 ++++++++++++++++++
 .../facet/TestJsonFacetsWithNestedObjects.java     |  58 ++++
 .../org/apache/solr/util/TestCircuitBreaker.java   | 190 -------------
 .../example-DIH/solr/db/conf/solrconfig.xml        |  10 -
 .../example-DIH/solr/mail/conf/solrconfig.xml      |  10 -
 .../example-DIH/solr/solr/conf/solrconfig.xml      |  10 -
 solr/example/files/conf/solrconfig.xml             |  10 -
 solr/server/resources/log4j2.xml                   |   5 +
 .../solr/configsets/_default/conf/managed-schema   |   7 +
 .../solr/configsets/_default/conf/solrconfig.xml   |  10 -
 .../conf/solrconfig.xml                            |  10 -
 .../adding-custom-plugins-in-solrcloud-mode.adoc   |   2 +-
 .../src/cluster-node-management.adoc               |   6 +-
 .../src/collapse-and-expand-results.adoc           |  15 +-
 .../src/common-query-parameters.adoc               |  17 +-
 solr/solr-ref-guide/src/config-api.adoc            |   4 -
 solr/solr-ref-guide/src/distributed-requests.adoc  |   4 +-
 solr/solr-ref-guide/src/format-of-solr-xml.adoc    |   2 +-
 .../overview-of-the-solr-admin-ui/dashboard.png    | Bin 92750 -> 172175 bytes
 .../src/implicit-requesthandlers.adoc              |  28 +-
 solr/solr-ref-guide/src/index-replication.adoc     |  25 +-
 solr/solr-ref-guide/src/json-query-dsl.adoc        |  34 ++-
 solr/solr-ref-guide/src/jvm-settings.adoc          |   2 +-
 .../src/major-changes-in-solr-9.adoc               |   2 +-
 solr/solr-ref-guide/src/meta-docs/publish.adoc     |   2 +-
 solr/solr-ref-guide/src/other-parsers.adoc         |  24 ++
 .../src/overview-of-the-solr-admin-ui.adoc         |  16 +-
 .../src/query-settings-in-solrconfig.adoc          |  20 +-
 .../src/rule-based-authorization-plugin.adoc       |  14 +-
 solr/solr-ref-guide/src/solr-upgrade-notes.adoc    |  49 +++-
 .../src/solrcloud-autoscaling-trigger-actions.adoc |   8 +-
 .../src/solrcloud-autoscaling-triggers.adoc        |   2 +-
 solr/solr-ref-guide/src/the-stats-component.adoc   |   2 +-
 solr/solr-ref-guide/src/the-tagger-handler.adoc    |   2 +-
 .../solrj/cloud/autoscaling/AutoScalingConfig.java |  42 ++-
 .../client/solrj/cloud/autoscaling/Policy.java     |   7 +-
 .../client/solrj/cloud/autoscaling/Preference.java |  10 +-
 .../solrj/cloud/autoscaling/ReplicaCount.java      |  10 +-
 .../solrj/cloud/autoscaling/ReplicaInfo.java       |   9 +-
 .../solrj/cloud/autoscaling/VersionedData.java     |  10 +-
 .../java/org/apache/solr/client/solrj/io/Lang.java | 100 ++++++-
 .../client/solrj/io/stream/CloudSolrStream.java    |   6 +-
 .../client/solrj/io/stream/DeepRandomStream.java   |   6 +-
 .../solr/client/solrj/io/stream/DrillStream.java   | 280 +++++++++++++++++++
 .../solrj/io/stream/expr/StreamExpression.java     |   7 +-
 .../expr/StreamExpressionNamedParameter.java       |   8 +-
 .../io/stream/expr/StreamExpressionValue.java      |  10 +-
 .../client/solrj/request/beans/PluginMeta.java     |   8 +-
 .../apache/solr/common/cloud/DocCollection.java    |   9 +-
 .../java/org/apache/solr/common/cloud/Replica.java |  11 +-
 .../org/apache/solr/common/cloud/ZkNodeProps.java  |  15 +-
 .../apache/solr/common/util/ValidatingJsonMap.java |  10 +-
 .../client/solrj/MergeIndexesExampleTestBase.java  |   3 +-
 .../org/apache/solr/client/solrj/io/TestLang.java  |   2 +-
 .../solrj/io/stream/StreamExpressionTest.java      |  73 ++++-
 .../apache/solr/cloud/MiniSolrCloudCluster.java    |   1 +
 solr/webapp/web/css/angular/index.css              |   4 +-
 148 files changed, 3179 insertions(+), 1331 deletions(-)



[lucene-solr] 04/11: Merge branch 'master' into jira/solr-12847-2

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ab pushed a commit to branch jira/solr-12847-2
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 17678f6cf16d728becdbce68860e3bad450bfcf9
Merge: 4b691ec 13bbe60
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Mon Apr 27 12:10:28 2020 +0200

    Merge branch 'master' into jira/solr-12847-2

 .asf.yaml                                          |   8 +-
 build.gradle                                       |   1 +
 dev-tools/doap/lucene.rdf                          |   7 +
 dev-tools/doap/solr.rdf                            |   7 +
 dev-tools/scripts/create_line_file_docs.py         | 247 +++++++++++
 gradle/help.gradle                                 |   3 +-
 gradle/validation/rat-sources.gradle               |   1 +
 gradle/validation/validate-log-calls.gradle        | 308 +++++++++++++
 help/validateLogCalls.txt                          |  57 +++
 lucene/{BUILD.txt => BUILD.md}                     |  40 +-
 lucene/CHANGES.txt                                 |  59 ++-
 ...SION_MIGRATION.txt => JRE_VERSION_MIGRATION.md} |   6 +-
 lucene/{MIGRATE.txt => MIGRATE.md}                 |  80 ++--
 lucene/{README.txt => README.md}                   |   4 +-
 ...TEM_REQUIREMENTS.txt => SYSTEM_REQUIREMENTS.md} |   2 +-
 .../lucene/index/TestBackwardsCompatibility.java   |  33 +-
 .../org/apache/lucene/index/index.8.5.1-cfs.zip    | Bin 0 -> 15880 bytes
 .../org/apache/lucene/index/index.8.5.1-nocfs.zip  | Bin 0 -> 15872 bytes
 .../test/org/apache/lucene/index/sorted.8.5.1.zip  | Bin 0 -> 394412 bytes
 lucene/build.xml                                   |  10 +-
 .../simpletext/SimpleTextCompoundFormat.java       |  31 +-
 .../simpletext/TestSimpleTextCompoundFormat.java   |   5 +
 .../apache/lucene/codecs/CompoundDirectory.java    |  83 ++++
 .../org/apache/lucene/codecs/CompoundFormat.java   |   4 +-
 .../lucene/codecs/MultiLevelSkipListReader.java    |   8 +-
 .../codecs/lucene50/Lucene50CompoundFormat.java    |   3 +-
 .../codecs/lucene50/Lucene50CompoundReader.java    |  49 +--
 .../document/LatLonShapeBoundingBoxQuery.java      | 477 +++++++++++----------
 .../apache/lucene/document/LatLonShapeQuery.java   |  99 ++++-
 .../org/apache/lucene/document/ShapeField.java     |  34 ++
 .../org/apache/lucene/document/ShapeQuery.java     |  15 +-
 .../org/apache/lucene/document/XYShapeQuery.java   | 109 +++--
 .../src/java/org/apache/lucene/geo/Circle2D.java   | 169 ++++----
 .../java/org/apache/lucene/geo/Component2D.java    |  89 +++-
 .../java/org/apache/lucene/geo/ComponentTree.java  | 101 ++++-
 .../src/java/org/apache/lucene/geo/Line2D.java     |  84 ++--
 .../src/java/org/apache/lucene/geo/Point2D.java    |  45 +-
 .../src/java/org/apache/lucene/geo/Polygon2D.java  | 180 +++-----
 .../java/org/apache/lucene/geo/Rectangle2D.java    | 127 +++---
 .../org/apache/lucene/index/BufferedUpdates.java   |  26 +-
 .../apache/lucene/index/BufferedUpdatesStream.java |   5 +-
 .../lucene/index/ConcurrentMergeScheduler.java     | 103 +++--
 .../lucene/index/DocumentsWriterPerThread.java     |  31 +-
 .../apache/lucene/index/FrozenBufferedUpdates.java | 297 +------------
 .../java/org/apache/lucene/index/IndexWriter.java  | 391 +++++++++++++++--
 .../java/org/apache/lucene/index/MergePolicy.java  |  14 +-
 .../org/apache/lucene/index/MergeScheduler.java    |  42 +-
 .../org/apache/lucene/index/NoMergeScheduler.java  |   2 +-
 .../org/apache/lucene/index/SegmentCommitInfo.java |  40 +-
 .../apache/lucene/index/SegmentCoreReaders.java    |   3 +-
 .../java/org/apache/lucene/index/SegmentInfos.java |  38 +-
 .../org/apache/lucene/index/SegmentReader.java     |   8 +
 .../apache/lucene/index/SerialMergeScheduler.java  |   6 +-
 .../org/apache/lucene/search/IndexSearcher.java    |   8 +-
 .../apache/lucene/search/TopFieldCollector.java    |   4 +-
 .../apache/lucene/search/TopScoreDocCollector.java |   4 +-
 .../apache/lucene/store/BufferedIndexInput.java    |  23 -
 .../src/java/org/apache/lucene/util/Version.java   |  14 +
 .../apache/lucene/TestMergeSchedulerExternal.java  |  20 +-
 .../lucene/document/BaseShapeEncodingTestCase.java | 119 ++---
 .../apache/lucene/document/BaseShapeTestCase.java  |  95 ++++
 .../lucene/document/BaseXYShapeTestCase.java       |   4 +-
 .../document/TestLatLonLineShapeQueries.java       |  32 +-
 .../document/TestLatLonPointShapeQueries.java      |  14 +-
 .../document/TestLatLonPolygonShapeQueries.java    |  43 +-
 .../apache/lucene/document/TestLatLonShape.java    |  87 ++--
 .../lucene/document/TestXYLineShapeQueries.java    |  30 +-
 .../lucene/document/TestXYPointShapeQueries.java   |  16 +-
 .../lucene/document/TestXYPolygonShapeQueries.java |  42 +-
 .../test/org/apache/lucene/geo/TestCircle2D.java   |  35 +-
 .../src/test/org/apache/lucene/geo/TestLine2D.java |  22 +-
 .../test/org/apache/lucene/geo/TestPoint2D.java    |  23 +-
 .../test/org/apache/lucene/geo/TestPolygon2D.java  |  38 +-
 .../org/apache/lucene/geo/TestRectangle2D.java     |  64 ++-
 .../apache/lucene/index/TestBufferedUpdates.java   |  10 -
 .../lucene/index/TestConcurrentMergeScheduler.java | 112 ++++-
 .../src/test/org/apache/lucene/index/TestDoc.java  |   2 +-
 .../apache/lucene/index/TestForceMergeForever.java |   2 +-
 .../apache/lucene/index/TestIndexFileDeleter.java  |   4 +-
 .../org/apache/lucene/index/TestIndexWriter.java   |  86 +++-
 .../lucene/index/TestIndexWriterMerging.java       |   6 +-
 .../index/TestIndexWriterThreadsToSegments.java    |   2 +-
 .../apache/lucene/index/TestNoMergeScheduler.java  |   2 +-
 .../index/TestOneMergeWrappingMergePolicy.java     |   2 +-
 .../apache/lucene/index/TestPendingDeletes.java    |   6 +-
 .../lucene/index/TestPendingSoftDeletes.java       |   2 +-
 .../org/apache/lucene/index/TestSegmentInfos.java  |  39 +-
 .../org/apache/lucene/index/TestSegmentMerger.java |   2 +-
 .../index/TestTragicIndexWriterDeadlock.java       |   6 +-
 .../apache/lucene/search/TestSearcherManager.java  |   4 +-
 .../apache/lucene/search/TestTopDocsCollector.java |  59 ++-
 .../lucene/search/TestTopFieldCollector.java       |  58 ++-
 .../lucene/store/TestBufferedIndexInput.java       |  98 -----
 .../lucene/demo/facet/DistanceFacetsExample.java   |   5 +-
 .../facet/ExpressionAggregationFacetsExample.java  |   6 +-
 .../lucene/expressions/ExpressionValueSource.java  |   3 +-
 .../apache/lucene/expressions/SimpleBindings.java  |  97 ++---
 .../lucene/expressions/TestDemoExpressions.java    |  37 +-
 .../lucene/expressions/TestExpressionRescorer.java |   6 +-
 .../expressions/TestExpressionSortField.java       |  21 +-
 .../lucene/expressions/TestExpressionSorts.java    |  20 +-
 .../expressions/TestExpressionValidation.java      |  14 +-
 .../expressions/TestExpressionValueSource.java     |  17 +-
 .../apache/lucene/luke/models/util/IndexUtils.java |   6 +-
 .../luke/models/overview/OverviewImplTest.java     |   2 +-
 .../org/apache/lucene/index/IndexSplitter.java     |   2 +-
 .../org/apache/lucene/monitor/MatchingQueries.java |   2 +-
 .../lucene/monitor/MultiMatchingQueries.java       |   2 +-
 .../apache/lucene/replicator/nrt/PrimaryNode.java  |   2 +-
 .../idversion/TestIDVersionPostingsFormat.java     |   2 +-
 .../lucene/codecs/cranky/CrankyCompoundFormat.java |   3 +-
 .../lucene/index/BaseCompoundFormatTestCase.java   |  42 ++
 .../lucene/index/BaseIndexFileFormatTestCase.java  |  18 +-
 .../lucene/index/BaseLiveDocsFormatTestCase.java   |   4 +-
 .../lucene/index/BaseMergePolicyTestCase.java      |  12 +-
 .../index/SuppressingConcurrentMergeScheduler.java |   6 +-
 .../ThreadedIndexingAndSearchingTestCase.java      |  41 +-
 .../java/org/apache/lucene/util/LineFileDocs.java  | 103 +++--
 .../org/apache/lucene/util/LuceneTestCase.java     |   2 +-
 .../org/apache/lucene/util/europarl.lines.txt.gz   | Bin 5730708 -> 9695474 bytes
 .../org/apache/lucene/util/europarl.lines.txt.seek |  19 +
 .../tools/src/groovy/check-source-patterns.groovy  |   4 +-
 solr/CHANGES.txt                                   |  36 +-
 solr/{README.txt => README.md}                     |  88 ++--
 solr/bin/solr.in.cmd                               |  10 +-
 solr/build.xml                                     |  10 +-
 solr/contrib/analysis-extras/README.md             |  26 ++
 solr/contrib/analysis-extras/README.txt            |  23 -
 .../apache/solr/analytics/facet/QueryFacet.java    |   8 +-
 .../apache/solr/analytics/facet/RangeFacet.java    |   8 +-
 .../solr/analytics/util/OldAnalyticsParams.java    |  34 +-
 .../util/OldAnalyticsRequestConverter.java         |   4 +-
 .../analytics/legacy/facetWithDottedFields.txt     |  16 +
 .../solr/collection1/conf/schema-analytics.xml     |   2 +
 .../util/OldAnalyticsRequestConverterUnitTest.java |  64 +++
 solr/contrib/clustering/{README.txt => README.md}  |   0
 .../dataimporthandler/{README.txt => README.md}    |   3 +-
 solr/contrib/extraction/{README.txt => README.md}  |   1 +
 .../{README.txt => README.md}                      |   1 +
 solr/contrib/langid/{README.txt => README.md}      |   2 +-
 solr/contrib/ltr/README.md                         |   2 +-
 solr/contrib/ltr/README.txt                        |   1 -
 .../prometheus-exporter/{README.txt => README.md}  |   2 +-
 .../src/java/org/apache/solr/api/AnnotatedApi.java |   2 +-
 solr/core/src/java/org/apache/solr/api/ApiBag.java |   2 +-
 .../src/java/org/apache/solr/api/V2HttpCall.java   |   2 +-
 .../client/solrj/embedded/JettySolrRunner.java     |  11 +-
 .../solr/cloud/api/collections/AddReplicaCmd.java  |   4 +-
 .../apache/solr/cloud/api/collections/Assign.java  |  15 +-
 .../solr/cloud/api/collections/BackupCmd.java      |   4 +-
 .../cloud/api/collections/CategoryRoutedAlias.java |   4 +-
 .../cloud/api/collections/CreateCollectionCmd.java |  59 +--
 .../solr/cloud/api/collections/CreateShardCmd.java |   2 +-
 .../cloud/api/collections/CreateSnapshotCmd.java   |  20 +-
 .../cloud/api/collections/DeleteReplicaCmd.java    |   4 +-
 .../solr/cloud/api/collections/DeleteShardCmd.java |  10 +-
 .../cloud/api/collections/DeleteSnapshotCmd.java   |   6 +-
 .../api/collections/MaintainRoutedAliasCmd.java    |   6 +-
 .../solr/cloud/api/collections/MigrateCmd.java     |  43 +-
 .../solr/cloud/api/collections/MoveReplicaCmd.java |  16 +-
 .../OverseerCollectionMessageHandler.java          |  14 +-
 .../api/collections/ReindexCollectionCmd.java      |  44 +-
 .../solr/cloud/api/collections/ReplaceNodeCmd.java |  20 +-
 .../solr/cloud/api/collections/RestoreCmd.java     |  18 +-
 .../solr/cloud/api/collections/RoutedAlias.java    |   2 +-
 .../solr/cloud/api/collections/SplitShardCmd.java  |  48 ++-
 .../cloud/api/collections/TimeRoutedAlias.java     |  12 +-
 .../solr/cloud/api/collections/UtilizeNodeCmd.java |  10 +-
 .../solr/cloud/autoscaling/ComputePlanAction.java  |  12 +-
 .../solr/cloud/autoscaling/ExecutePlanAction.java  |  14 +-
 .../cloud/autoscaling/HttpTriggerListener.java     |   2 +-
 .../autoscaling/InactiveMarkersPlanAction.java     |   6 +-
 .../cloud/autoscaling/InactiveShardPlanAction.java |  22 +-
 .../solr/cloud/autoscaling/IndexSizeTrigger.java   |   8 +-
 .../solr/cloud/autoscaling/NodeAddedTrigger.java   |  12 +-
 .../solr/cloud/autoscaling/NodeLostTrigger.java    |   6 +-
 .../cloud/autoscaling/OverseerTriggerThread.java   |  25 +-
 .../solr/cloud/autoscaling/ScheduledTriggers.java  |  48 ++-
 .../solr/cloud/autoscaling/SearchRateTrigger.java  |  16 +-
 .../apache/solr/cloud/autoscaling/TriggerBase.java |   6 +-
 .../solr/cloud/autoscaling/TriggerEventQueue.java  |  10 +-
 .../autoscaling/sim/GenericDistributedQueue.java   |   6 +-
 .../cloud/autoscaling/sim/SimCloudManager.java     |  20 +-
 .../autoscaling/sim/SimClusterStateProvider.java   |  78 ++--
 .../autoscaling/sim/SimDistribStateManager.java    |   4 +-
 .../sim/SimDistributedQueueFactory.java            |   4 +-
 .../autoscaling/sim/SimNodeStateProvider.java      |  21 +-
 .../solr/cloud/autoscaling/sim/SimScenario.java    |  42 +-
 .../solr/cloud/autoscaling/sim/SimUtils.java       |   4 +-
 .../autoscaling/sim/SnapshotCloudManager.java      |   2 +-
 .../sim/SnapshotDistribStateManager.java           |   8 +-
 .../solr/cloud/overseer/ClusterStateMutator.java   |   2 +-
 .../solr/cloud/overseer/CollectionMutator.java     |   6 +-
 .../apache/solr/cloud/overseer/NodeMutator.java    |   4 +-
 .../apache/solr/cloud/overseer/ReplicaMutator.java |  38 +-
 .../apache/solr/cloud/overseer/SliceMutator.java   |  14 +-
 .../apache/solr/cloud/overseer/ZkStateWriter.java  |   4 +-
 .../apache/solr/cloud/rule/ReplicaAssigner.java    |   2 +-
 .../java/org/apache/solr/core/BlobRepository.java  |   4 +-
 .../apache/solr/core/CachingDirectoryFactory.java  |  32 +-
 .../org/apache/solr/core/ConfigSetProperties.java  |   4 +-
 .../org/apache/solr/core/ConfigSetService.java     |   2 +-
 .../java/org/apache/solr/core/CoreContainer.java   |  61 +--
 .../apache/solr/core/CorePropertiesLocator.java    |  14 +-
 .../src/java/org/apache/solr/core/Diagnostics.java |   2 +-
 .../org/apache/solr/core/DirectoryFactory.java     |   2 +-
 .../org/apache/solr/core/HdfsDirectoryFactory.java |  21 +-
 .../src/java/org/apache/solr/core/PluginBag.java   |  30 +-
 .../org/apache/solr/core/QuerySenderListener.java  |   2 +-
 .../java/org/apache/solr/core/RequestHandlers.java |   6 +-
 .../java/org/apache/solr/core/RequestParams.java   |   8 +-
 .../org/apache/solr/core/SchemaCodecFactory.java   |   4 +-
 .../src/java/org/apache/solr/core/SolrConfig.java  |  27 +-
 .../src/java/org/apache/solr/core/SolrCore.java    |  55 ++-
 .../src/java/org/apache/solr/core/SolrCores.java   |   4 +-
 .../org/apache/solr/core/SolrDeletionPolicy.java   |  12 +-
 .../src/java/org/apache/solr/core/SolrPaths.java   |   5 +-
 .../org/apache/solr/core/SolrResourceLoader.java   |  31 +-
 .../java/org/apache/solr/core/SolrXmlConfig.java   |   4 +-
 .../apache/solr/core/StandardDirectoryFactory.java |   2 +-
 .../solr/core/TransientSolrCoreCacheDefault.java   |   4 +-
 .../java/org/apache/solr/core/XmlConfigFile.java   |  12 +-
 .../src/java/org/apache/solr/core/ZkContainer.java |  27 +-
 .../solr/core/snapshots/SolrSnapshotManager.java   |   8 +-
 .../snapshots/SolrSnapshotMetaDataManager.java     |  10 +-
 .../solr/core/snapshots/SolrSnapshotsTool.java     |  15 +-
 .../apache/solr/filestore/DistribPackageStore.java |  13 +-
 .../org/apache/solr/filestore/PackageStoreAPI.java |   2 +-
 .../solr/handler/admin/AdminHandlersProxy.java     |   8 +-
 .../org/apache/solr/handler/admin/ColStatus.java   |   2 +-
 .../solr/handler/admin/CollectionHandlerApi.java   |   2 +-
 .../solr/handler/admin/CollectionsHandler.java     |  23 +-
 .../solr/handler/admin/ConfigSetsHandler.java      |  10 +-
 .../solr/handler/admin/HealthCheckHandler.java     |   4 +-
 .../solr/handler/admin/IndexSizeEstimator.java     |   4 +-
 .../apache/solr/handler/admin/LoggingHandler.java  |   7 +-
 .../solr/handler/admin/LukeRequestHandler.java     |   8 +-
 .../handler/admin/MetricsCollectorHandler.java     |   8 +-
 .../solr/handler/admin/MetricsHistoryHandler.java  |  18 +-
 .../apache/solr/handler/admin/PrepRecoveryOp.java  |  22 +-
 .../solr/handler/admin/RebalanceLeaders.java       |  16 +-
 .../solr/handler/admin/RequestSyncShardOp.java     |   8 +-
 .../handler/admin/SegmentsInfoRequestHandler.java  |   4 +-
 .../solr/handler/admin/ShowFileRequestHandler.java |  14 +-
 .../org/apache/solr/handler/admin/SplitOp.java     |  12 +-
 .../solr/handler/admin/SystemInfoHandler.java      |  13 +-
 .../solr/handler/admin/ZookeeperInfoHandler.java   |   6 +-
 .../solr/handler/admin/ZookeeperStatusHandler.java |  72 +++-
 .../solr/handler/component/ExpandComponent.java    |   5 +-
 .../solr/handler/component/FacetComponent.java     |  16 +-
 .../handler/component/HttpShardHandlerFactory.java |   3 +-
 .../handler/component/MoreLikeThisComponent.java   |  36 +-
 .../solr/handler/component/QueryComponent.java     |   4 +-
 .../handler/component/QueryElevationComponent.java |   6 +-
 .../solr/handler/component/RangeFacetRequest.java  |  13 +-
 .../handler/component/RealTimeGetComponent.java    |  13 +-
 .../solr/handler/component/SearchHandler.java      |   2 +-
 .../handler/component/SpellCheckComponent.java     |  31 +-
 .../solr/handler/component/SuggestComponent.java   |  32 +-
 .../org/apache/solr/handler/loader/JsonLoader.java |   8 +-
 .../org/apache/solr/handler/loader/XMLLoader.java  |  20 +-
 .../org/apache/solr/handler/tagger/Tagger.java     |   9 +-
 .../solr/highlight/DefaultSolrHighlighter.java     |   4 +-
 .../java/org/apache/solr/logging/LogWatcher.java   |   8 +-
 .../org/apache/solr/metrics/MetricSuppliers.java   |  10 +-
 .../java/org/apache/solr/metrics/MetricsMap.java   |   2 +-
 .../org/apache/solr/metrics/SolrMetricManager.java |  30 +-
 .../apache/solr/metrics/SolrMetricReporter.java    |   4 +-
 .../metrics/reporters/ReporterClientCache.java     |   4 +-
 .../solr/metrics/reporters/SolrJmxReporter.java    |   6 +-
 .../metrics/reporters/jmx/JmxMetricsReporter.java  |  18 +-
 .../reporters/solr/SolrClusterReporter.java        |   6 +-
 .../solr/metrics/reporters/solr/SolrReporter.java  |  10 +-
 .../metrics/reporters/solr/SolrShardReporter.java  |  14 +-
 .../apache/solr/metrics/rrd/SolrRrdBackend.java    |   2 +-
 .../solr/metrics/rrd/SolrRrdBackendFactory.java    |  20 +-
 .../packagemanager/DefaultPackageRepository.java   |   4 +-
 .../apache/solr/packagemanager/PackageManager.java |   2 +-
 .../java/org/apache/solr/pkg/PackageLoader.java    |  10 +-
 .../org/apache/solr/pkg/PackagePluginHolder.java   |  10 +-
 .../java/org/apache/solr/request/SimpleFacets.java |  11 +-
 .../org/apache/solr/request/SolrRequestInfo.java   |   2 +-
 .../apache/solr/response/BinaryResponseWriter.java |   2 +-
 .../org/apache/solr/response/SchemaXmlWriter.java  |   2 +-
 .../java/org/apache/solr/response/XMLWriter.java   |   4 +-
 .../apache/solr/response/XSLTResponseWriter.java   |   2 +-
 .../java/org/apache/solr/rest/ManagedResource.java |  12 +-
 .../apache/solr/rest/ManagedResourceStorage.java   |  31 +-
 .../src/java/org/apache/solr/rest/RestManager.java |  21 +-
 .../analysis/ManagedSynonymFilterFactory.java      |   4 +-
 .../analysis/ManagedSynonymGraphFilterFactory.java |   4 +-
 .../schema/analysis/ManagedWordSetResource.java    |   7 +-
 .../org/apache/solr/schema/AbstractEnumField.java  |   5 +-
 .../solr/schema/AbstractSpatialFieldType.java      |   2 +-
 .../schema/AbstractSpatialPrefixTreeFieldType.java |   4 +-
 .../java/org/apache/solr/schema/BinaryField.java   |   2 +-
 .../src/java/org/apache/solr/schema/EnumField.java |   2 +-
 .../solr/schema/ExternalFileFieldReloader.java     |   4 +-
 .../src/java/org/apache/solr/schema/FieldType.java |   2 +-
 .../apache/solr/schema/FieldTypePluginLoader.java  |  24 +-
 .../java/org/apache/solr/schema/IndexSchema.java   |  45 +-
 .../apache/solr/schema/JsonPreAnalyzedParser.java  |  10 +-
 .../org/apache/solr/schema/ManagedIndexSchema.java |  67 +--
 .../solr/schema/ManagedIndexSchemaFactory.java     |  49 +--
 .../solr/schema/OpenExchangeRatesOrgProvider.java  |  12 +-
 .../java/org/apache/solr/schema/PointField.java    |   4 +-
 .../org/apache/solr/schema/PreAnalyzedField.java   |   9 +-
 .../java/org/apache/solr/schema/SchemaManager.java |   6 +-
 .../src/java/org/apache/solr/schema/TrieField.java |   2 +-
 .../apache/solr/schema/ZkIndexSchemaReader.java    |  16 +-
 .../solr/search/CollapsingQParserPlugin.java       |   2 +-
 .../java/org/apache/solr/search/DocSetUtil.java    |   8 +-
 .../src/java/org/apache/solr/search/Grouping.java  |   5 +-
 .../java/org/apache/solr/search/QueryUtils.java    |   5 +-
 .../java/org/apache/solr/search/ScoreFilter.java   |  21 -
 .../org/apache/solr/search/SolrIndexSearcher.java  |  84 +---
 .../apache/solr/search/SurroundQParserPlugin.java  |   2 +-
 .../org/apache/solr/search/facet/FacetHeatmap.java |   4 +-
 .../apache/solr/search/facet/UnInvertedField.java  |   4 +-
 .../solr/search/function/FileFloatSource.java      |  26 +-
 .../solr/search/grouping/CommandHandler.java       |   2 +-
 .../search/join/ChildFieldValueSourceParser.java   |   2 +-
 .../solr/search/stats/ExactSharedStatsCache.java   |   4 +-
 .../apache/solr/search/stats/ExactStatsCache.java  |  12 +-
 .../apache/solr/search/stats/LRUStatsCache.java    |   6 +-
 .../org/apache/solr/search/stats/StatsUtil.java    |  17 +-
 .../apache/solr/security/AuditLoggerPlugin.java    |  10 +-
 .../apache/solr/security/AuthenticationPlugin.java |  20 +-
 .../org/apache/solr/security/BasicAuthPlugin.java  |  19 +-
 .../org/apache/solr/security/HadoopAuthPlugin.java |  48 ++-
 .../org/apache/solr/security/JWTAuthPlugin.java    |  21 +-
 .../solr/security/JWTVerificationkeyResolver.java  |   6 +-
 .../org/apache/solr/security/KerberosFilter.java   |   4 +-
 .../org/apache/solr/security/KerberosPlugin.java   |  22 +-
 .../solr/security/MultiDestinationAuditLogger.java |   6 +-
 .../solr/security/PKIAuthenticationPlugin.java     |  41 +-
 .../security/RuleBasedAuthorizationPlugin.java     |  34 +-
 .../security/Sha256AuthenticationProvider.java     |   2 +-
 .../solr/security/SolrLogAuditLoggerPlugin.java    |   4 +-
 .../java/org/apache/solr/servlet/HttpSolrCall.java |  12 +-
 .../org/apache/solr/servlet/ResponseUtils.java     |   2 +-
 .../apache/solr/servlet/SolrDispatchFilter.java    |  29 +-
 .../solr/spelling/DirectSolrSpellChecker.java      |   4 +-
 .../apache/solr/spelling/SpellCheckCollator.java   |   2 +-
 .../DocumentExpressionDictionaryFactory.java       |  20 +-
 .../solr/spelling/suggest/SolrSuggester.java       |  26 +-
 .../apache/solr/spelling/suggest/Suggester.java    |  12 +-
 .../suggest/jaspell/JaspellLookupFactory.java      |   2 +-
 .../org/apache/solr/store/hdfs/HdfsDirectory.java  |   4 +-
 .../solr/store/hdfs/HdfsLocalityReporter.java      |   6 +-
 .../org/apache/solr/update/CdcrTransactionLog.java |   6 +-
 .../java/org/apache/solr/update/CdcrUpdateLog.java |   2 +-
 .../java/org/apache/solr/update/CommitTracker.java |   4 +-
 .../apache/solr/update/DefaultSolrCoreState.java   |   4 +-
 .../apache/solr/update/DirectUpdateHandler2.java   |  25 +-
 .../org/apache/solr/update/HdfsTransactionLog.java |   6 +-
 .../java/org/apache/solr/update/HdfsUpdateLog.java |  18 +-
 .../org/apache/solr/update/LoggingInfoStream.java  |   4 +-
 .../src/java/org/apache/solr/update/PeerSync.java  |  60 ++-
 .../org/apache/solr/update/PeerSyncWithLeader.java |  24 +-
 .../org/apache/solr/update/SolrCmdDistributor.java |  11 +-
 .../org/apache/solr/update/SolrIndexSplitter.java  |  28 +-
 .../org/apache/solr/update/SolrIndexWriter.java    |  12 +-
 .../apache/solr/update/StreamingSolrClients.java   |   2 +-
 .../org/apache/solr/update/TransactionLog.java     |  11 +-
 .../java/org/apache/solr/update/UpdateHandler.java |   8 +-
 .../src/java/org/apache/solr/update/UpdateLog.java |  79 ++--
 .../org/apache/solr/update/UpdateShardHandler.java |   4 +-
 .../AddSchemaFieldsUpdateProcessorFactory.java     |   2 +-
 ...llValuesOrNoneFieldMutatingUpdateProcessor.java |   6 +-
 .../processor/AtomicUpdateProcessorFactory.java    |   4 +-
 .../CloneFieldUpdateProcessorFactory.java          |   6 +-
 .../processor/DistributedUpdateProcessor.java      |  83 ++--
 .../processor/DistributedZkUpdateProcessor.java    |  52 +--
 .../DocBasedVersionConstraintsProcessor.java       |   4 +-
 ...DocBasedVersionConstraintsProcessorFactory.java |   5 +-
 .../DocExpirationUpdateProcessorFactory.java       |  10 +-
 .../FieldValueMutatingUpdateProcessor.java         |  12 +-
 .../processor/LogUpdateProcessorFactory.java       |  26 +-
 .../ParseDateFieldUpdateProcessorFactory.java      |   6 +-
 .../ParseDoubleFieldUpdateProcessorFactory.java    |   6 +-
 .../ParseFloatFieldUpdateProcessorFactory.java     |   6 +-
 .../ParseIntFieldUpdateProcessorFactory.java       |   6 +-
 .../ParseLongFieldUpdateProcessorFactory.java      |   6 +-
 .../update/processor/RegexpBoostProcessor.java     |  12 +-
 .../update/processor/TolerantUpdateProcessor.java  |   2 +-
 .../update/processor/URLClassifyProcessor.java     |   4 +-
 .../processor/UpdateRequestProcessorChain.java     |   8 +-
 .../src/java/org/apache/solr/util/FSHDFSUtils.java |  14 +-
 .../src/java/org/apache/solr/util/PackageTool.java |   6 +-
 .../src/java/org/apache/solr/util/SolrCLI.java     |  46 +-
 .../org/apache/solr/util/StartupLoggingUtils.java  |   3 +-
 .../java/org/apache/solr/util/TestInjection.java   |   2 +-
 .../SSLCredentialProviderFactory.java              |   4 +-
 .../providers/HadoopSSLCredentialProvider.java     |   2 +-
 .../solr/util/plugin/AbstractPluginLoader.java     |   8 +-
 .../org/apache/solr/util/stats/MetricUtils.java    |   4 +-
 .../apache/solr/util/xslt/TransformerProvider.java |  13 +-
 .../test/org/apache/solr/cloud/SyncSliceTest.java  |   1 +
 .../solr/cloud/TestAuthenticationFramework.java    |   4 +-
 .../org/apache/solr/cloud/TestUtilizeNode.java     |   8 +-
 .../solr/cloud/autoscaling/TestPolicyCloud.java    |   8 +
 .../cloud/autoscaling/sim/TestSimLargeCluster.java |   4 +
 .../cloud/autoscaling/sim/TestSimPolicyCloud.java  |   3 +
 .../cloud/autoscaling/sim/TestSimScenario.java     |   3 +
 .../apache/solr/cloud/hdfs/HdfsSyncSliceTest.java  |   2 -
 .../solr/common/cloud/ZkDynamicConfigTest.java     |  62 +++
 .../handler/admin/ZookeeperStatusHandlerTest.java  |  20 +-
 .../apache/solr/schema/WrappedIntPointField.java   |  20 +-
 .../solr/security/MockAuthenticationPlugin.java    |  25 +-
 solr/example/{README.txt => README.md}             |  63 ++-
 solr/example/build.gradle                          |   2 +-
 solr/example/example-DIH/{README.txt => README.md} |  32 +-
 solr/example/files/{README.txt => README.md}       |  85 ++--
 solr/example/films/{README.txt => README.md}       |  75 ++--
 solr/packaging/build.gradle                        |   2 +-
 solr/server/{README.txt => README.md}              |  41 +-
 solr/server/build.gradle                           |   2 +-
 solr/server/solr/{README.txt => README.md}         |  42 +-
 .../clustering/carrot2/{README.txt => README.md}   |   0
 .../conf/velocity/{README.txt => README.md}        |  21 +-
 ..._REQUIREMENTS.mdtext => SYSTEM_REQUIREMENTS.md} |   0
 .../authentication-and-authorization-plugins.adoc  |   2 +-
 .../solr-ref-guide/src/command-line-utilities.adoc |   2 +-
 solr/solr-ref-guide/src/filter-descriptions.adoc   |   6 +-
 .../src/indexing-nested-documents.adoc             |   2 +-
 solr/solr-ref-guide/src/json-facet-api.adoc        |   2 +-
 solr/solr-ref-guide/src/json-query-dsl.adoc        |   2 +-
 solr/solr-ref-guide/src/language-analysis.adoc     |  18 +-
 solr/solr-ref-guide/src/securing-solr.adoc         |   4 +-
 .../setting-up-an-external-zookeeper-ensemble.adoc |   2 +
 solr/solr-ref-guide/src/solr-tutorial.adoc         |   2 +-
 .../src/solrcloud-autoscaling-overview.adoc        |  21 +
 solr/solr-ref-guide/src/tokenizers.adoc            |   2 +-
 .../org/apache/solr/client/solrj/SolrClient.java   |   4 +-
 .../client/solrj/cloud/autoscaling/Clause.java     |   5 +-
 .../client/solrj/cloud/autoscaling/Policy.java     |  46 +-
 .../client/solrj/cloud/autoscaling/Suggestion.java |   1 -
 .../solrj/impl/SolrClientNodeStateProvider.java    | 104 ++---
 .../org/apache/solr/common/cloud/SolrZkClient.java |  25 ++
 .../apache/solr/common/cloud/ZkDynamicConfig.java  | 144 +++++++
 .../autoscaling/testSuggestionsRebalance2.json     |   3 +-
 .../org/apache/solr/client/solrj/GetByIdTest.java  |  27 +-
 .../client/solrj/cloud/autoscaling/TestPolicy.java |  29 +-
 .../apache/solr/common/cloud/SolrZkClientTest.java |   8 +-
 solr/test-framework/{README.txt => README.md}      |   0
 solr/test-framework/build.xml                      |   2 +-
 .../solr/core/MockConcurrentMergeScheduler.java    |   3 +-
 solr/webapp/web/js/angular/controllers/cloud.js    |   5 +-
 solr/webapp/web/partials/cloud.html                |   3 +-
 450 files changed, 6374 insertions(+), 3767 deletions(-)

diff --cc solr/core/src/java/org/apache/solr/cloud/api/collections/Assign.java
index 3915f80,8a3df78..997558b
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/Assign.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/Assign.java
@@@ -326,8 -326,9 +326,8 @@@ public class Assign 
    public static List<ReplicaPosition> getNodesForNewReplicas(ClusterState clusterState, String collectionName,
                                                            String shard, int nrtReplicas, int tlogReplicas, int pullReplicas,
                                                            Object createNodeSet, SolrCloudManager cloudManager) throws IOException, InterruptedException, AssignmentException {
-     log.debug("getNodesForNewReplicas() shard: {} , nrtReplicas : {} , tlogReplicas: {} , pullReplicas: {} , createNodeSet {}", shard, nrtReplicas, tlogReplicas, pullReplicas, createNodeSet );
+     log.debug("getNodesForNewReplicas() shard: {} , nrtReplicas : {} , tlogReplicas: {} , pullReplicas: {} , createNodeSet {}", shard, nrtReplicas, tlogReplicas, pullReplicas, createNodeSet);
      DocCollection coll = clusterState.getCollection(collectionName);
 -    Integer maxShardsPerNode = coll.getMaxShardsPerNode() == -1 ? Integer.MAX_VALUE : coll.getMaxShardsPerNode();
      List<String> createNodeList = null;
  
      if (createNodeSet instanceof List) {
diff --cc solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
index 8cc9734,182b66e..e28f264
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
@@@ -371,15 -377,30 +374,14 @@@ public class CreateCollectionCmd implem
      } else {
        int totalNumReplicas = numNrtReplicas + numTlogReplicas + numPullReplicas;
        if (totalNumReplicas > nodeList.size()) {
-         log.warn("Specified number of replicas of "
-             + totalNumReplicas
-             + " on collection "
-             + collectionName
-             + " is higher than the number of Solr instances currently live or live and part of your " + OverseerCollectionMessageHandler.CREATE_NODE_SET + "("
-             + nodeList.size()
-             + "). It's unusual to run two replica of the same slice on the same Solr-instance.");
+         log.warn("Specified number of replicas of {} on collection {} is higher than the number of Solr instances currently live or live and part of your {}({}). {}"
+             , totalNumReplicas
+             , collectionName
+             , OverseerCollectionMessageHandler.CREATE_NODE_SET
+             , nodeList.size()
+             , "It's unusual to run two replica of the same slice on the same Solr-instance.");
        }
  
 -      int maxShardsAllowedToCreate = maxShardsPerNode == Integer.MAX_VALUE ?
 -          Integer.MAX_VALUE :
 -          maxShardsPerNode * nodeList.size();
 -      int requestedShardsToCreate = numSlices * totalNumReplicas;
 -      if (maxShardsAllowedToCreate < requestedShardsToCreate) {
 -        throw new Assign.AssignmentException("Cannot create collection " + collectionName + ". Value of "
 -            + MAX_SHARDS_PER_NODE + " is " + maxShardsPerNode
 -            + ", and the number of nodes currently live or live and part of your "+OverseerCollectionMessageHandler.CREATE_NODE_SET+" is " + nodeList.size()
 -            + ". This allows a maximum of " + maxShardsAllowedToCreate
 -            + " to be created. Value of " + OverseerCollectionMessageHandler.NUM_SLICES + " is " + numSlices
 -            + ", value of " + NRT_REPLICAS + " is " + numNrtReplicas
 -            + ", value of " + TLOG_REPLICAS + " is " + numTlogReplicas
 -            + " and value of " + PULL_REPLICAS + " is " + numPullReplicas
 -            + ". This requires " + requestedShardsToCreate
 -            + " shards to be created (higher than the allowed number)");
 -      }
        Assign.AssignRequest assignRequest = new Assign.AssignRequestBuilder()
            .forCollection(collectionName)
            .forShard(shardNames)
diff --cc solr/core/src/test/org/apache/solr/cloud/TestUtilizeNode.java
index 7d7d049,96d7704..5e0188c
--- a/solr/core/src/test/org/apache/solr/cloud/TestUtilizeNode.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestUtilizeNode.java
@@@ -77,7 -77,8 +77,7 @@@ public class TestUtilizeNode extends So
      CloudSolrClient cloudClient = cluster.getSolrClient();
      
      log.info("Creating Collection...");
-     CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(coll, "conf1", 2, REPLICATION);
 -    CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(coll, "conf1", 2, 2)
 -        .setMaxShardsPerNode(2);
++    CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(coll, "conf1", 2, 2);
      cloudClient.request(create);
  
      log.info("Spinning up additional jettyX...");