You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ho...@apache.org on 2017/05/31 17:00:11 UTC

[1/3] lucene-solr:master: SOLR-10757: delete/refactor/cleanup CollectionAdminRequest deprecations

Repository: lucene-solr
Updated Branches:
  refs/heads/master 55e37cdd3 -> 7a5261a22


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
----------------------------------------------------------------------
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 6c00b5c..b3d8a3f 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
@@ -33,7 +33,6 @@ import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.response.CollectionAdminResponse;
 import org.apache.solr.client.solrj.response.RequestStatusState;
 import org.apache.solr.client.solrj.util.SolrIdentifierValidator;
-import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.ImplicitDocRouter;
 import org.apache.solr.common.cloud.Replica;
@@ -68,14 +67,11 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
 
   public CollectionAdminRequest(String path, CollectionAction action) {
     super(METHOD.GET, path);
-    this.action = action;
+    this.action = checkNotNull("action", action);
   }
 
   @Override
   public SolrParams getParams() {
-    if (action == null) {
-      throw new RuntimeException( "no action specified!" );
-    }
     ModifiableSolrParams params = new ModifiableSolrParams();
     params.set(CoreAdminParams.ACTION, action.toString());
     return params;
@@ -117,12 +113,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     }
 
     /**
-     * @deprecated Use {@link #processAsync(String, SolrClient)} or {@link #processAsync(SolrClient)}
-     */
-    @Deprecated
-    public  AsyncCollectionAdminRequest setAsyncId(String id){return this;};
-
-    /**
      * Process this request asynchronously, generating and returning a request id
      * @param client a Solr client
      * @return the request id
@@ -189,12 +179,9 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
 
     public AsyncCollectionSpecificAdminRequest(CollectionAction action, String collection) {
       super(action);
-      this.collection = collection;
+      this.collection = checkNotNull("collection", collection);
     }
 
-    @Deprecated
-    public abstract AsyncCollectionSpecificAdminRequest setCollectionName(String collection);
-
     public String getCollectionName() {
       return collection;
     }
@@ -202,8 +189,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = new ModifiableSolrParams(super.getParams());
-      if (collection == null)
-        throw new IllegalArgumentException("You must call setCollectionName() on this request");
       params.set(CoreAdminParams.NAME, collection);
       return params;
     }
@@ -216,23 +201,13 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
 
     public AsyncShardSpecificAdminRequest(CollectionAction action, String collection, String shard) {
       super(action);
-      this.collection = collection;
-      this.shard = shard;
+      this.collection = checkNotNull("collection",collection);
+      this.shard = checkNotNull("shard",shard);
     }
 
-    @Deprecated
-    public abstract AsyncShardSpecificAdminRequest setCollectionName(String collection);
-
-    @Deprecated
-    public abstract AsyncShardSpecificAdminRequest setShardName(String shard);
-
     @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = new ModifiableSolrParams(super.getParams());
-      if (collection == null)
-        throw new IllegalArgumentException("You must call setCollectionName() on this request");
-      if (shard == null)
-        throw new IllegalArgumentException("You must call setShardName() on this request");
       params.set(CoreAdminParams.COLLECTION, collection);
       params.set(CoreAdminParams.SHARD, shard);
       return params;
@@ -246,21 +221,14 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
 
     public ShardSpecificAdminRequest(CollectionAction action, String collection, String shard) {
       super(action);
+      this.collection = checkNotNull("collection",collection);
+      this.shard = checkNotNull("shard",shard);
     }
 
-    @Deprecated
-    public abstract ShardSpecificAdminRequest setCollectionName(String collection);
-
-    @Deprecated
-    public abstract ShardSpecificAdminRequest setShardName(String shard);
 
     @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = new ModifiableSolrParams(super.getParams());
-      if (collection == null)
-        throw new IllegalArgumentException("You must call setCollectionName() on this request");
-      if (shard == null)
-        throw new IllegalArgumentException("You must call setShardName() on this request");
       params.set(CoreAdminParams.COLLECTION, collection);
       params.set(CoreAdminParams.SHARD, shard);
       return params;
@@ -284,26 +252,14 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
 
     public CollectionAdminRoleRequest(CollectionAction action, String node, String role) {
       super(action);
-      this.node = node;
-      this.role = role;
-    }
-
-    @Override
-    public CollectionAdminRoleRequest setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
+      this.role = checkNotNull("role",role);
+      this.node = checkNotNull("node",node);
     }
 
-    @Deprecated
-    public abstract CollectionAdminRoleRequest setNode(String node);
-
     public String getNode() {
       return this.node;
     }
 
-    @Deprecated
-    public abstract CollectionAdminRoleRequest setRole(String role);
-
     public String getRole() {
       return this.role;
     }
@@ -341,7 +297,7 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
    * @param numReplicas the replication factor of the collection (same as numNrtReplicas)
    */
   public static Create createCollection(String collection, String config, int numShards, int numReplicas) {
-    return new Create(collection, config, numShards, numReplicas, 0, 0);
+    return new Create(collection, config, numShards, numReplicas, null, null);
   }
 
   /**
@@ -379,10 +335,7 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
    * @param numPullReplicas the number of replicas of type {@link org.apache.solr.common.cloud.Replica.Type#PULL}
    */
   public static Create createCollectionWithImplicitRouter(String collection, String config, String shards, int numNrtReplicas, int numTlogReplicas, int numPullReplicas) {
-    Create createRequest = new Create(collection, config, shards, numNrtReplicas);
-    createRequest.tlogReplicas = numTlogReplicas;
-    createRequest.pullReplicas = numPullReplicas;
-    return createRequest;
+    return new Create(collection, config, ImplicitDocRouter.NAME, null, checkNotNull("shards",shards), numNrtReplicas, numTlogReplicas, numPullReplicas);
   }
 
   // CREATE request
@@ -404,38 +357,34 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     protected Integer stateFormat;
     private String[] rule , snitch;
 
-    /**
-     * @deprecated Use {@link #createCollection(String, String, int, int, int, int)}
-     */
-    @Deprecated
-    public Create() {
-      super(CollectionAction.CREATE, null);
+    /** Constructor intended for typical use cases */
+    protected Create(String collection, String config, Integer numShards, Integer numNrtReplicas, Integer numTlogReplicas, Integer numPullReplicas) { // TODO: maybe add other constructors
+      this(collection, config, null, numShards, null, numNrtReplicas, numTlogReplicas, numPullReplicas);
+    }
+
+    /** Constructor that assumes {@link ImplicitDocRouter#NAME} and an explicit list of <code>shards</code> */
+    protected Create(String collection, String config, String shards, int numNrtReplicas) {
+      this(collection, config, ImplicitDocRouter.NAME, null, checkNotNull("shards",shards), numNrtReplicas, null, null);
     }
     
-    private Create(String collection, String config, int numShards, int numNrtReplicas, int numTlogReplicas, int numPullReplicas) { // TODO: maybe add other constructors
+    private Create(String collection, String config, String routerName, Integer numShards, String shards, Integer numNrtReplicas, Integer  numTlogReplicas, Integer numPullReplicas) {
       super(CollectionAction.CREATE, SolrIdentifierValidator.validateCollectionName(collection));
+      // NOTE: there's very little we can assert about the args because nothing but "collection" is required by the server
+      if ((null != shards) && (null != numShards)) {
+        throw new IllegalArgumentException("Can not specify both a numShards and a list of shards");
+      }
       this.configName = config;
+      this.routerName = routerName;
       this.numShards = numShards;
+      this.setShards(shards);
       this.nrtReplicas = numNrtReplicas;
-      this.pullReplicas = numPullReplicas;
       this.tlogReplicas = numTlogReplicas;
+      this.pullReplicas = numPullReplicas;
     }
 
-    private Create(String collection, String config, String shards, int numNrtReplicas) {
-      super(CollectionAction.CREATE, SolrIdentifierValidator.validateCollectionName(collection));
-      this.configName = config;
-      this.nrtReplicas = numNrtReplicas;
-      this.shards = shards;
-      this.routerName = ImplicitDocRouter.NAME;
-    }
-
-    @Deprecated
-    public Create setConfigName(String config) { this.configName = config; return this; }
     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; }
-    @Deprecated
-    public Create setNumShards(Integer numShards) {this.numShards = numShards; 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;}
@@ -470,33 +419,15 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
      * @throws IllegalArgumentException if any of the shard names contain invalid characters.
      */
     public Create setShards(String shards) {
-      for (String shard : shards.split(",")) {
-        SolrIdentifierValidator.validateShardName(shard);
+      if (null != shards) {
+        for (String shard : shards.split(",")) {
+          SolrIdentifierValidator.validateShardName(shard);
+        }
       }
       this.shards = shards;
       return this;
     }
     
-    /**
-     * Provide the name of the collection to be created.
-     * 
-     * Collection names must consist entirely of periods, underscores and alphanumerics.  Other characters are not allowed.
-     * 
-     * @throws IllegalArgumentException if the collection name contains invalid characters.
-     */
-    @Deprecated
-    public Create setCollectionName(String collectionName) throws SolrException {
-      this.collection = SolrIdentifierValidator.validateCollectionName(collectionName);
-      return this;
-    }
-
-    @Override
-    @Deprecated
-    public Create setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
-    }
-
     public Properties getProperties() {
       return properties;
     }
@@ -576,31 +507,9 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
   // RELOAD request
   public static class Reload extends AsyncCollectionSpecificAdminRequest {
 
-    /**
-     * @deprecated use {@link #reloadCollection(String)}
-     */
-    @Deprecated
-    public Reload() {
-      super(CollectionAction.RELOAD, null);
-    }
-
     private Reload(String collection) {
       super(CollectionAction.RELOAD, collection);
     }
-
-    @Override
-    @Deprecated
-    public Reload setCollectionName(String collection) {
-      this.collection = collection;
-      return this;
-    }
-
-    @Override
-    @Deprecated
-    public Reload setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
-    }
   }
 
   public static class DeleteNode extends AsyncCollectionAdminRequest {
@@ -611,7 +520,7 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
      */
     public DeleteNode(String node) {
       super(CollectionAction.DELETENODE);
-      this.node = node;
+      this.node = checkNotNull("node",node);
     }
     @Override
     public SolrParams getParams() {
@@ -633,8 +542,8 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
      */
     public ReplaceNode(String source, String target) {
       super(CollectionAction.REPLACENODE);
-      this.source = source;
-      this.target = target;
+      this.source = checkNotNull("source",source);
+      this.target = checkNotNull("target",target);
     }
 
     public ReplaceNode setParallel(Boolean flag) {
@@ -660,18 +569,18 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
 
     public MoveReplica(String collection, String replica, String targetNode) {
       super(CollectionAction.MOVEREPLICA);
-      this.collection = collection;
-      this.replica = replica;
-      this.targetNode = targetNode;
+      this.collection = checkNotNull("collection",collection);
+      this.replica = checkNotNull("replica",replica);
+      this.targetNode = checkNotNull("targetNode",targetNode);
       this.randomlyMoveReplica = false;
     }
 
     public MoveReplica(String collection, String shard, String fromNode, String targetNode) {
       super(CollectionAction.MOVEREPLICA);
-      this.collection = collection;
-      this.shard = shard;
-      this.fromNode = fromNode;
-      this.targetNode = targetNode;
+      this.collection = checkNotNull("collection",collection);
+      this.shard = checkNotNull("shard",shard);
+      this.fromNode = checkNotNull("fromNode",fromNode);
+      this.targetNode = checkNotNull("targetNode",targetNode);
       this.randomlyMoveReplica = true;
     }
 
@@ -724,13 +633,7 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
 
     public RebalanceLeaders(String collection) {
       super(CollectionAction.REBALANCELEADERS);
-      this.collection = collection;
-    }
-
-    @Override
-    public RebalanceLeaders setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
+      this.collection = checkNotNull("collection",collection);
     }
 
     @Override
@@ -762,31 +665,10 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
   // DELETE request
   public static class Delete extends AsyncCollectionSpecificAdminRequest {
 
-    /**
-     * @deprecated Use {@link #deleteCollection(String)}
-     */
-    @Deprecated
-    public Delete() {
-      super(CollectionAction.DELETE, null);
-    }
-
     private Delete(String collection) {
       super(CollectionAction.DELETE, collection);
     }
 
-    @Override
-    @Deprecated
-    public Delete setCollectionName(String collection) {
-      this.collection = collection;
-      return this;
-    }
-
-    @Override
-    @Deprecated
-    public Delete setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
-    }
   }
 
   public static Backup backupCollection(String collection, String backupName) {
@@ -807,20 +689,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
       this.repositoryName = Optional.empty();
     }
 
-    @Override
-    @Deprecated
-    public Backup setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
-    }
-
-    @Override
-    @Deprecated
-    public Backup setCollectionName(String collection) {
-      this.collection = collection;
-      return this;
-    }
-
     public String getLocation() {
       return location;
     }
@@ -901,18 +769,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
       this.backupName = backupName;
     }
 
-    @Override
-    public Restore setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
-    }
-
-    @Override
-    public Restore setCollectionName(String collection) {
-      this.collection = collection;
-      return this;
-    }
-
     public String getLocation() {
       return location;
     }
@@ -1007,7 +863,7 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
   // This is because the setCollectionName method is deprecated.
   static <T> T checkNotNull(String param, T value) {
     if (value == null) {
-      throw new NullPointerException("Please specify a value for parameter " + param);
+      throw new NullPointerException("Please specify a non-null value for parameter " + param);
     }
     return value;
   }
@@ -1030,12 +886,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     }
 
     @Override
-    public AsyncCollectionSpecificAdminRequest setCollectionName (String collection) {
-      this.collection = checkNotNull(CoreAdminParams.COLLECTION ,collection);
-      return this;
-    }
-
-    @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = (ModifiableSolrParams) super.getParams();
       params.set(CoreAdminParams.COLLECTION, collection);
@@ -1062,12 +912,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     }
 
     @Override
-    public AsyncCollectionSpecificAdminRequest setCollectionName (String collection) {
-      this.collection = checkNotNull(CoreAdminParams.COLLECTION ,collection);
-      return this;
-    }
-
-    @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = (ModifiableSolrParams) super.getParams();
       params.set(CoreAdminParams.COLLECTION, collection);
@@ -1087,12 +931,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     }
 
     @Override
-    public AsyncCollectionSpecificAdminRequest setCollectionName (String collection) {
-      this.collection = checkNotNull(CoreAdminParams.COLLECTION ,collection);
-      return this;
-    }
-
-    @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = (ModifiableSolrParams) super.getParams();
       params.set(CoreAdminParams.COLLECTION, collection);
@@ -1131,47 +969,11 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
       return this;
     }
 
-    /**
-     * @deprecated use {@link #createShard(String, String)}
-     */
-    @Deprecated
-    public CreateShard() {
-      super(CollectionAction.CREATESHARD, null, null);
-    }
-
     private CreateShard(String collection, String shard) {
       super(CollectionAction.CREATESHARD, collection, SolrIdentifierValidator.validateShardName(shard));
     }
 
     @Override
-    @Deprecated
-    public CreateShard setCollectionName(String collection) {
-      this.collection = collection;
-      return this;
-    }
-
-    /**
-     * Provide the name of the shard to be created.
-     * 
-     * Shard names must consist entirely of periods, underscores, hyphens, and alphanumerics.  Other characters are not allowed.
-     * 
-     * @throws IllegalArgumentException if the shard name contains invalid characters.
-     */
-    @Override
-    @Deprecated
-    public CreateShard setShardName(String shardName) {
-      this.shard = SolrIdentifierValidator.validateShardName(shardName);
-      return this;
-    }
-
-    @Override
-    @Deprecated
-    public CreateShard setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
-    }
-
-    @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = (ModifiableSolrParams) super.getParams();
       if (nodeSet != null) {
@@ -1204,15 +1006,7 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
 
     private SplitShard(String collection) {
       super(CollectionAction.SPLITSHARD);
-      this.collection = collection;
-    }
-
-    /**
-     * @deprecated Use {@link #splitShard(String)}
-     */
-    @Deprecated
-    public SplitShard() {
-      super(CollectionAction.SPLITSHARD);
+      this.collection = checkNotNull("collection",collection);
     }
 
     public SplitShard setRanges(String ranges) { this.ranges = ranges; return this; }
@@ -1236,32 +1030,15 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
       return this;
     }
 
-    @Deprecated
-    public SplitShard setCollectionName(String collection) {
-      this.collection = collection;
-      return this;
-    }
-
     public SplitShard setShardName(String shard) {
       this.shard = shard;
       return this;
     }
 
     @Override
-    @Deprecated
-    public SplitShard setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
-    }
-
-    @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = (ModifiableSolrParams) super.getParams();
 
-      if(this.collection == null) {
-        throw new IllegalArgumentException("You must set collection name for this request.");
-      }
-
       params.set(CollectionAdminParams.COLLECTION, collection);
 
       if (this.shard == null && this.splitKey == null) {
@@ -1293,14 +1070,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     private Boolean deleteInstanceDir;
     private Boolean deleteDataDir;
 
-    /**
-     * @deprecated Use {@link #deleteShard(String, String)}
-     */
-    @Deprecated
-    public DeleteShard() {
-      super(CollectionAction.DELETESHARD, null, null);
-    }
-
     private DeleteShard(String collection, String shard) {
       super(CollectionAction.DELETESHARD, collection, shard);
     }
@@ -1324,27 +1093,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     }
 
     @Override
-    @Deprecated
-    public DeleteShard setCollectionName(String collection) {
-      this.collection = collection;
-      return this;
-    }
-
-    @Override
-    @Deprecated
-    public DeleteShard setShardName(String shard) {
-      this.shard = shard;
-      return this;
-    }
-
-    @Override
-    @Deprecated
-    public DeleteShard setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
-    }
-
-    @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = new ModifiableSolrParams(super.getParams());
       if (deleteInstanceDir != null) {
@@ -1370,33 +1118,9 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
 
   // FORCELEADER request
   public static class ForceLeader extends ShardSpecificAdminRequest {
-
-    /**
-     * @deprecated Use {@link #forceLeaderElection(String, String)}
-     */
-    @Deprecated
-    public ForceLeader() {
-      super(CollectionAction.FORCELEADER, null, null);
-    }
-
     private ForceLeader(String collection, String shard) {
       super(CollectionAction.FORCELEADER, collection, shard);
     }
-
-    @Override
-    @Deprecated
-    public ForceLeader setCollectionName(String collection) {
-      this.collection = collection;
-      return this;
-    }
-
-    @Override
-    @Deprecated
-    public ForceLeader setShardName(String shard) {
-      this.shard = shard;
-      return this;
-    }
-
   }
 
   /**
@@ -1431,21 +1155,7 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
 
     private RequestStatus(String requestId) {
       super(CollectionAction.REQUESTSTATUS);
-      this.requestId = requestId;
-    }
-
-    /**
-     * @deprecated Use {@link #requestStatus(String)}
-     */
-    @Deprecated
-    public RequestStatus() {
-      super(CollectionAction.REQUESTSTATUS);
-    }
-
-    @Deprecated
-    public RequestStatus setRequestId(String requestId) {
-      this.requestId = requestId;
-      return this;
+      this.requestId = checkNotNull("requestId",requestId);
     }
 
     public String getRequestId() {
@@ -1455,8 +1165,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = (ModifiableSolrParams) super.getParams();
-      if (requestId == null)
-        throw new IllegalArgumentException("You must call setRequestId() on this request");
       params.set(CoreAdminParams.REQUESTID, requestId);
       return params;
     }
@@ -1492,11 +1200,14 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
    * Returns a SolrRequest to delete an asynchronous request status
    */
   public static DeleteStatus deleteAsyncId(String requestId) {
-    return new DeleteStatus(requestId);
+    return new DeleteStatus(checkNotNull("requestId",requestId), null);
   }
 
+  /**
+   * Returns a SolrRequest to delete a all asynchronous request statuses
+   */
   public static DeleteStatus deleteAllAsyncIds() {
-    return new DeleteStatus().setFlush(true);
+    return new DeleteStatus(null, true);
   }
 
   // DELETESTATUS request
@@ -1505,29 +1216,15 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     protected String requestId = null;
     protected Boolean flush = null;
 
-    private DeleteStatus(String requestId) {
+    private DeleteStatus(String requestId, Boolean flush) {
       super(CollectionAction.DELETESTATUS);
+      if (requestId == null && flush == null)
+        throw new IllegalArgumentException("Either requestid or flush parameter must be specified.");
+      if (requestId != null && flush != null)
+        throw new IllegalArgumentException("Both requestid and flush parameters can not be specified together.");
+      
       this.requestId = requestId;
-    }
-
-    /**
-     * @deprecated Use {@link #deleteAsyncId(String)} or {@link #deleteAllAsyncIds()}
-     */
-    @Deprecated
-    public DeleteStatus() {
-      super(CollectionAction.DELETESTATUS);
-    }
-
-    @Deprecated
-    public DeleteStatus setRequestId(String requestId) {
-      this.requestId = requestId;
-      return this;
-    }
-
-    @Deprecated
-    public DeleteStatus setFlush(Boolean flush) {
       this.flush = flush;
-      return this;
     }
 
     public String getRequestId() {
@@ -1541,10 +1238,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = (ModifiableSolrParams) super.getParams();
-      if (requestId == null && flush == null)
-        throw new IllegalArgumentException("Either requestid or flush parameter must be specified.");
-      if (requestId != null && flush != null)
-        throw new IllegalArgumentException("Both requestid and flush parameters can not be specified together.");
       if (requestId != null)
         params.set(CoreAdminParams.REQUESTID, requestId);
       if (flush != null)
@@ -1577,52 +1270,18 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     private CreateAlias(String aliasName, String aliasedCollections) {
       super(CollectionAction.CREATEALIAS);
       this.aliasName = SolrIdentifierValidator.validateAliasName(aliasName);
-      this.aliasedCollections = aliasedCollections;
-    }
-
-    /**
-     * @deprecated Use {@link #createAlias(String, String)}
-     */
-    @Deprecated
-    public CreateAlias() {
-      super(CollectionAction.CREATEALIAS);
-    }
-
-    /**
-     * Provide the name of the alias to be created.
-     * 
-     * Alias names must consist entirely of periods, underscores and alphanumerics.  Other characters are not allowed.
-     * 
-     * @throws IllegalArgumentException if the alias name contains invalid characters.
-     */
-    @Deprecated
-    public CreateAlias setAliasName(String aliasName) {
-      this.aliasName = SolrIdentifierValidator.validateAliasName(aliasName);
-      return this;
+      this.aliasedCollections = checkNotNull("aliasedCollections",aliasedCollections);
     }
 
     public String getAliasName() {
       return aliasName;
     }
 
-    @Deprecated
-    public CreateAlias setAliasedCollections(String alias) {
-      this.aliasedCollections = alias;
-      return this;
-    }
-
     public String getAliasedCollections() {
       return this.aliasedCollections;
     }
 
     @Override
-    @Deprecated
-    public CreateAlias setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
-    }
-
-    @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = (ModifiableSolrParams) super.getParams();
       params.set(CoreAdminParams.NAME, aliasName);
@@ -1646,28 +1305,7 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
 
     private DeleteAlias(String aliasName) {
       super(CollectionAction.DELETEALIAS);
-      this.aliasName = aliasName;
-    }
-
-    /**
-     * @deprecated Use {@link #deleteAlias(String)}
-     */
-    @Deprecated
-    public DeleteAlias() {
-      super(CollectionAction.DELETEALIAS);
-    }
-
-    @Deprecated
-    public DeleteAlias setAliasName(String aliasName) {
-      this.aliasName = aliasName;
-      return this;
-    }
-
-    @Override
-    @Deprecated
-    public DeleteAlias setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
+      this.aliasName = checkNotNull("aliasName",aliasName);
     }
 
     @Override
@@ -1676,29 +1314,30 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
       params.set(CoreAdminParams.NAME, aliasName);
       return params;
     }
-
-
   }
   
   /**
    * Returns a SolrRequest to add a replica of type {@link org.apache.solr.common.cloud.Replica.Type#NRT} to a shard in a collection
+   *
    */
   public static AddReplica addReplicaToShard(String collection, String shard) {
     return addReplicaToShard(collection, shard, Replica.Type.NRT);
   }
 
   /**
-   * Returns a SolrRequest to add a replica of the specified type to a shard in a collection
+   * Returns a SolrRequest to add a replica of the specified type to a shard in a collection.  
+   * If the replica type is null, the server default will be used.
+   *
    */
   public static AddReplica addReplicaToShard(String collection, String shard, Replica.Type replicaType) {
-    return new AddReplica(collection, shard, null, replicaType);
+    return new AddReplica(collection, checkNotNull("shard",shard), null, replicaType);
   }
 
   /**
    * Returns a SolrRequest to add a replica to a collection using a route key
    */
   public static AddReplica addReplicaByRouteKey(String collection, String routeKey) {
-    return new AddReplica(collection, null, routeKey, Replica.Type.NRT);
+    return new AddReplica(collection, null, checkNotNull("routeKey",routeKey), null);
   }
 
   // ADDREPLICA request
@@ -1713,17 +1352,9 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     protected Properties properties;
     protected Replica.Type type;
 
-    /**
-     * @deprecated Use {@link #addReplicaByRouteKey(String, String)} or {@link #addReplicaToShard(String, String)}
-     */
-    @Deprecated
-    public AddReplica() {
-      super(CollectionAction.ADDREPLICA);
-    }
-
     private AddReplica(String collection, String shard, String routeKey, Replica.Type type) {
       super(CollectionAction.ADDREPLICA);
-      this.collection = collection;
+      this.collection = checkNotNull("collection",collection);
       this.shard = shard;
       this.routeKey = routeKey;
       this.type = type;
@@ -1758,12 +1389,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
       return routeKey;
     }
 
-    @Deprecated
-    public AddReplica setRouteKey(String routeKey) {
-      this.routeKey = routeKey;
-      return this;
-    }
-
     public String getInstanceDir() {
       return instanceDir;
     }
@@ -1782,25 +1407,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
       return this;
     }
 
-    @Deprecated
-    public AddReplica setCollectionName(String collection) {
-      this.collection = collection;
-      return this;
-    }
-
-    @Deprecated
-    public AddReplica setShardName(String shard) {
-      this.shard = shard;
-      return this;
-    }
-
-    @Override
-    @Deprecated
-    public AddReplica setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
-    }
-    
     public AddReplica setType(Replica.Type type) {
       this.type = type;
       return this;
@@ -1809,18 +1415,14 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = new ModifiableSolrParams(super.getParams());
-      if (collection == null)
-        throw new IllegalArgumentException("You must call setCollection() on this request");
       params.add(CoreAdminParams.COLLECTION, collection);
-      if (shard == null || shard.isEmpty()) {
-        if (routeKey == null) {
-          throw new IllegalArgumentException("Either shard or routeKey must be provided");
-        }
-        params.add(ShardParams._ROUTE_, routeKey);
-      }
-      else {
+      assert ((null == routeKey) ^ (null == shard));
+      if (null != shard) {
         params.add(CoreAdminParams.SHARD, shard);
       }
+      if (null != routeKey) {
+        params.add(ShardParams._ROUTE_, routeKey);
+      }
       if (node != null) {
         params.add("node", node);
       }
@@ -1845,14 +1447,14 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
    * Returns a SolrRequest to delete a replica from a shard in a collection
    */
   public static DeleteReplica deleteReplica(String collection, String shard, String replica) {
-    return new DeleteReplica(collection, shard, replica);
+    return new DeleteReplica(collection, checkNotNull("shard",shard), checkNotNull("replica",replica));
   }
 
   /**
    * Returns a SolrRequest to remove a number of replicas from a specific shard
    */
   public static DeleteReplica deleteReplicasFromShard(String collection, String shard, int count) {
-    return new DeleteReplica(collection, shard, count);
+    return new DeleteReplica(collection, checkNotNull("shard",shard), count);
   }
 
   public static DeleteReplica deleteReplicasFromAllShards(String collection, int count) {
@@ -1870,14 +1472,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     private Boolean deleteIndexDir;
     private Integer count;
 
-    /**
-     * @deprecated Use {@link #deleteReplica(String, String, String)}
-     */
-    @Deprecated
-    public DeleteReplica() {
-      super(CollectionAction.DELETEREPLICA, null);
-    }
-
     private DeleteReplica(String collection, String shard, String replica) {
       super(CollectionAction.DELETEREPLICA, collection);
       this.shard = shard;
@@ -1895,12 +1489,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
       this.count = count;
     }
 
-    @Deprecated
-    public DeleteReplica setReplica(String replica) {
-      this.replica = replica;
-      return this;
-    }
-
     public String getReplica() {
       return this.replica;
     }
@@ -1915,33 +1503,12 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     }
 
     @Override
-    @Deprecated
-    public DeleteReplica setCollectionName(String collection) {
-      this.collection = collection;
-      return this;
-    }
-
-    @Deprecated
-    public DeleteReplica setShardName(String shard) {
-      this.shard = shard;
-      return this;
-    }
-
-    @Deprecated
-    public DeleteReplica setCount(Integer count) {
-      this.count = count;
-      return this;
-    }
-
-    @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = new ModifiableSolrParams(super.getParams());
 
       // AsyncCollectionSpecificAdminRequest uses 'name' rather than 'collection'
       // TODO - deal with this inconsistency
       params.remove(CoreAdminParams.NAME);
-      if (this.collection == null)
-        throw new IllegalArgumentException("You must set a collection name for this request");
       params.set(ZkStateReader.COLLECTION_PROP, this.collection);
 
       if (this.replica != null)
@@ -1996,7 +1563,7 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
   }
 
   /**
-   * Returns a SolrRequest to set a cluster property
+   * Returns a SolrRequest to set (or unset) a cluster property
    */
   public static ClusterProp setClusterProperty(String propertyName, String propertyValue) {
     return new ClusterProp(propertyName, propertyValue);
@@ -2008,36 +1575,16 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     private String propertyName;
     private String propertyValue;
 
-    /**
-     * @deprecated Use {@link #setClusterProperty(String, String)}
-     */
-    @Deprecated
-    public ClusterProp() {
-      super(CollectionAction.CLUSTERPROP);
-    }
-
     private ClusterProp(String propertyName, String propertyValue) {
       super(CollectionAction.CLUSTERPROP);
-      this.propertyName = propertyName;
+      this.propertyName = checkNotNull("propertyName",propertyName);
       this.propertyValue = propertyValue;
     }
 
-    @Deprecated
-    public ClusterProp setPropertyName(String propertyName) {
-      this.propertyName = propertyName;
-      return this;
-    }
-
     public String getPropertyName() {
       return this.propertyName;
     }
 
-    @Deprecated
-    public ClusterProp setPropertyValue(String propertyValue) {
-      this.propertyValue = propertyValue;
-      return this;
-    }
-
     public String getPropertyValue() {
       return this.propertyValue;
     }
@@ -2075,47 +1622,21 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     private Integer forwardTimeout;
     private Properties properties;
 
-    /**
-     * @deprecated Use {@link #migrateData(String, String, String)}
-     */
-    @Deprecated
-    public Migrate() {
-      super(CollectionAction.MIGRATE);
-    }
-
     private Migrate(String collection, String targetCollection, String splitKey) {
       super(CollectionAction.MIGRATE);
-      this.collection = collection;
-      this.targetCollection = targetCollection;
-      this.splitKey = splitKey;
-    }
-
-    @Deprecated
-    public Migrate setCollectionName(String collection) {
-      this.collection = collection;
-      return this;
+      this.collection = checkNotNull("collection",collection);
+      this.targetCollection = checkNotNull("targetCollection",targetCollection);
+      this.splitKey = checkNotNull("splitKey",splitKey);
     }
 
     public String getCollectionName() {
       return collection;
     }
 
-    @Deprecated
-    public Migrate setTargetCollection(String targetCollection) {
-      this.targetCollection = targetCollection;
-      return this;
-    }
-
     public String getTargetCollection() {
       return this.targetCollection;
     }
 
-    @Deprecated
-    public Migrate setSplitKey(String splitKey) {
-      this.splitKey = splitKey;
-      return this;
-    }
-
     public String getSplitKey() {
       return this.splitKey;
     }
@@ -2139,13 +1660,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     }
 
     @Override
-    @Deprecated
-    public Migrate setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
-    }
-
-    @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = new ModifiableSolrParams(super.getParams());
       params.set(CoreAdminParams.COLLECTION, collection);
@@ -2173,32 +1687,9 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
 
   // ADDROLE request
   public static class AddRole extends CollectionAdminRoleRequest {
-
-    /**
-     * @deprecated Use {@link #addRole(String, String)}
-     */
-    @Deprecated
-    public AddRole() {
-      super(CollectionAction.ADDROLE, null, null);
-    }
-
     private AddRole(String node, String role) {
       super(CollectionAction.ADDROLE, node, role);
     }
-
-    @Override
-    @Deprecated
-    public AddRole setNode(String node) {
-      this.node = node;
-      return this;
-    }
-
-    @Override
-    @Deprecated
-    public AddRole setRole(String role) {
-      this.role = role;
-      return this;
-    }
   }
 
   /**
@@ -2210,32 +1701,9 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
 
   // REMOVEROLE request
   public static class RemoveRole extends CollectionAdminRoleRequest {
-
-    /**
-     * @deprecated Use {@link #removeRole(String, String)}
-     */
-    @Deprecated
-    public RemoveRole() {
-      super(CollectionAction.REMOVEROLE, null, null);
-    }
-
     private RemoveRole(String node, String role) {
       super(CollectionAction.REMOVEROLE, node, role);
     }
-
-    @Override
-    @Deprecated
-    public RemoveRole setNode(String node) {
-      this.node = node;
-      return this;
-    }
-
-    @Override
-    @Deprecated
-    public RemoveRole setRole(String role) {
-      this.role = role;
-      return this;
-    }
   }
 
   /**
@@ -2252,12 +1720,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
       super(CollectionAction.OVERSEERSTATUS);
     }
 
-    @Override
-    @Deprecated
-    public OverseerStatus setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
-    }
   }
 
   /**
@@ -2377,51 +1839,25 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     private String propertyValue;
     private Boolean shardUnique;
 
-    /**
-     * @deprecated Use {@link #addReplicaProperty(String, String, String, String, String)}
-     */
-    @Deprecated
-    public AddReplicaProp() {
-      super(CollectionAction.ADDREPLICAPROP, null, null);
-    }
-
     private AddReplicaProp(String collection, String shard, String replica, String propertyName, String propertyValue) {
       super(CollectionAction.ADDREPLICAPROP, collection, shard);
-      this.replica = replica;
-      this.propertyName = propertyName;
-      this.propertyValue = propertyValue;
+      this.replica = checkNotNull("replica",replica);
+      this.propertyName = checkNotNull("propertyName",propertyName);
+      this.propertyValue = checkNotNull("propertyValue",propertyValue);
     }
 
     public String getReplica() {
       return replica;
     }
 
-    @Deprecated
-    public AddReplicaProp setReplica(String replica) {
-      this.replica = replica;
-      return this;
-    }
-
     public String getPropertyName() {
       return propertyName;
     }
 
-    @Deprecated
-    public AddReplicaProp setPropertyName(String propertyName) {
-      this.propertyName = propertyName;
-      return this;
-    }
-
     public String getPropertyValue() {
       return propertyValue;
     }
 
-    @Deprecated
-    public AddReplicaProp setPropertyValue(String propertyValue) {
-      this.propertyValue = propertyValue;
-      return this;
-    }
-
     public Boolean getShardUnique() {
       return shardUnique;
     }
@@ -2432,27 +1868,6 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     }
 
     @Override
-    @Deprecated
-    public AddReplicaProp setCollectionName(String collection) {
-      this.collection = collection;
-      return this;
-    }
-
-    @Override
-    @Deprecated
-    public AddReplicaProp setShardName(String shard) {
-      this.shard = shard;
-      return this;
-    }
-
-    @Override
-    @Deprecated
-    public AddReplicaProp setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
-    }
-
-    @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = new ModifiableSolrParams(super.getParams());
       params.set(CoreAdminParams.REPLICA, replica);
@@ -2482,61 +1897,20 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
     private String replica;
     private String propertyName;
 
-    /**
-     * @deprecated Use {@link #deleteReplicaProperty(String, String, String, String)}
-     */
-    @Deprecated
-    public DeleteReplicaProp() {
-      super(CollectionAction.DELETEREPLICAPROP, null, null);
-    }
-
     private DeleteReplicaProp(String collection, String shard, String replica, String propertyName) {
       super(CollectionAction.DELETEREPLICAPROP, collection, shard);
-      this.replica = replica;
-      this.propertyName = propertyName;
+      this.replica = checkNotNull("replica",replica);
+      this.propertyName = checkNotNull("propertyName",propertyName);
     }
 
     public String getReplica() {
       return replica;
     }
 
-    @Deprecated
-    public DeleteReplicaProp setReplica(String replica) {
-      this.replica = replica;
-      return this;
-    }
-
     public String getPropertyName() {
       return propertyName;
     }
 
-    @Deprecated
-    public DeleteReplicaProp setPropertyName(String propertyName) {
-      this.propertyName = propertyName;
-      return this;
-    }
-
-    @Override
-    @Deprecated
-    public DeleteReplicaProp setCollectionName(String collection) {
-      this.collection = collection;
-      return this;
-    }
-
-    @Override
-    @Deprecated
-    public DeleteReplicaProp setShardName(String shard) {
-      this.shard = shard;
-      return this;
-    }
-
-    @Override
-    @Deprecated
-    public DeleteReplicaProp setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
-    }
-
     @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = new ModifiableSolrParams(super.getParams());
@@ -2564,35 +1938,12 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
 
     private MigrateClusterState(String collection) {
       super(CollectionAction.MIGRATESTATEFORMAT);
-      this.collection = collection;
-    }
-
-    /**
-     * @deprecated Use {@link #migrateCollectionFormat(String)}
-     */
-    @Deprecated
-    public MigrateClusterState() {
-      super(CollectionAction.MIGRATESTATEFORMAT);
-    }
-
-    @Deprecated
-    public MigrateClusterState setCollectionName(String collection) {
-      this.collection = collection;
-      return this;
-    }
-
-    @Override
-    @Deprecated
-    public MigrateClusterState setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
+      this.collection = checkNotNull("collection",collection);
     }
 
     @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = new ModifiableSolrParams(super.getParams());
-      if (collection == null)
-        throw new IllegalArgumentException("You must call setCollection() on this request");
       params.set(CoreAdminParams.COLLECTION, collection);
       return params;
     }
@@ -2615,28 +1966,14 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
 
     private BalanceShardUnique(String collection, String propertyName) {
       super(CollectionAction.BALANCESHARDUNIQUE);
-      this.collection = collection;
-      this.propertyName = propertyName;
-    }
-
-    /**
-     * @deprecated Use {@link #balanceReplicaProperty(String, String)}
-     */
-    @Deprecated
-    public BalanceShardUnique() {
-      super(CollectionAction.BALANCESHARDUNIQUE);
+      this.collection = checkNotNull("collection",collection);
+      this.propertyName = checkNotNull("propertyName",propertyName);
     }
 
     public String getPropertyName() {
       return propertyName;
     }
 
-    @Deprecated
-    public BalanceShardUnique setPropertyName(String propertyName) {
-      this.propertyName = propertyName;
-      return this;
-    }
-
     public Boolean getOnlyActiveNodes() {
       return onlyActiveNodes;
     }
@@ -2655,24 +1992,11 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
       return this;
     }
 
-    @Deprecated
-    public BalanceShardUnique setCollection(String collection) {
-      this.collection = collection;
-      return this;
-    }
-
     public String getCollection() {
       return collection;
     }
 
     @Override
-    @Deprecated
-    public BalanceShardUnique setAsyncId(String id) {
-      this.asyncId = id;
-      return this;
-    }
-
-    @Override
     public SolrParams getParams() {
       ModifiableSolrParams params = new ModifiableSolrParams(super.getParams());
       params.set(CoreAdminParams.COLLECTION, collection);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/solrj/src/test/org/apache/solr/client/solrj/CollectionAdminRequestRequiredParamsTest.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/CollectionAdminRequestRequiredParamsTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/CollectionAdminRequestRequiredParamsTest.java
index 0f9b147..870aa34 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/CollectionAdminRequestRequiredParamsTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/CollectionAdminRequestRequiredParamsTest.java
@@ -17,6 +17,7 @@
 package org.apache.solr.client.solrj;
 
 import static org.apache.solr.common.params.CoreAdminParams.*;
+import static org.apache.solr.common.params.CollectionAdminParams.FLUSH;
 
 import java.util.Iterator;
 import java.util.Set;
@@ -37,135 +38,131 @@ import com.google.common.collect.Sets;
 public class CollectionAdminRequestRequiredParamsTest extends LuceneTestCase {
 
   public void testBalanceShardUnique() {
-    final CollectionAdminRequest.BalanceShardUnique request = new CollectionAdminRequest.BalanceShardUnique()
-            .setCollection("foo")
-            .setPropertyName("prop");
+    CollectionAdminRequest.BalanceShardUnique request = CollectionAdminRequest.balanceReplicaProperty("foo","prop");
     assertContainsParams(request.getParams(), ACTION, COLLECTION, "property");
+
+    request.setShardUnique(true);
+    assertContainsParams(request.getParams(), ACTION, COLLECTION, "property","shardUnique");
+    
+    request.setOnlyActiveNodes(false);
+    assertContainsParams(request.getParams(), ACTION, COLLECTION, "property","shardUnique","onlyactivenodes");
+    
+    request.setShardUnique(null);
+    assertContainsParams(request.getParams(), ACTION, COLLECTION, "property","onlyactivenodes");
+    
   }
   
   public void testClusterProp() {
-    final CollectionAdminRequest.ClusterProp request = new CollectionAdminRequest.ClusterProp()
-            .setPropertyName("foo")
-            .setPropertyValue("bar");
+    CollectionAdminRequest.ClusterProp request = CollectionAdminRequest.setClusterProperty("foo","bar");
     assertContainsParams(request.getParams(), ACTION, NAME, "val");
   }
   
   public void testAddRole() {
-    final CollectionAdminRequest.AddRole request = new CollectionAdminRequest.AddRole()
-            .setNode("node")
-            .setRole("role");
+    CollectionAdminRequest.AddRole request = CollectionAdminRequest.addRole("node","role");
     assertContainsParams(request.getParams(), ACTION, "node", "role");
   }
   
   public void testRemoveRole() {
-    final CollectionAdminRequest.RemoveRole request = new CollectionAdminRequest.RemoveRole()
-            .setNode("node")
-            .setRole("role");
+    CollectionAdminRequest.RemoveRole request = CollectionAdminRequest.removeRole("node","role");
     assertContainsParams(request.getParams(), ACTION, "node", "role");
   }
   
   public void testAddReplica() {
-    // with shard parameter
-    CollectionAdminRequest.AddReplica request = new CollectionAdminRequest.AddReplica()
-            .setShardName("shard")
-            .setCollectionName("collection");
+    // with shard parameter and "client side" implicit type param
+    CollectionAdminRequest.AddReplica request = CollectionAdminRequest.addReplicaToShard("collection", "shard");
+    assertContainsParams(request.getParams(), ACTION, COLLECTION, SHARD, ZkStateReader.REPLICA_TYPE);
+    
+    // with only shard parameter and "server side" implicit type, so no param
+    request = CollectionAdminRequest.addReplicaToShard("collection", "shard", null);
     assertContainsParams(request.getParams(), ACTION, COLLECTION, SHARD);
     
     // with route parameter
-    request = new CollectionAdminRequest.AddReplica()
-            .setRouteKey("route")
-            .setCollectionName("collection");
+    request = CollectionAdminRequest.addReplicaByRouteKey("collection","route");
     assertContainsParams(request.getParams(), ACTION, COLLECTION, ShardParams._ROUTE_);
     
-    // with type parameter
-    request = new CollectionAdminRequest.AddReplica()
-            .setShardName("shard")
-            .setCollectionName("collection")
-            .setType(Replica.Type.NRT);
+    // with explicit type parameter
+    request = CollectionAdminRequest.addReplicaToShard("collection", "shard", Replica.Type.NRT);
     assertContainsParams(request.getParams(), ACTION, COLLECTION, SHARD, ZkStateReader.REPLICA_TYPE);
   }
   
   public void testAddReplicaProp() {
-    final CollectionAdminRequest.AddReplicaProp request = new CollectionAdminRequest.AddReplicaProp()
-            .setShardName("shard")
-            .setCollectionName("collection")
-            .setReplica("replica")
-            .setPropertyName("prop")
-            .setPropertyValue("value");
+    final CollectionAdminRequest.AddReplicaProp request = CollectionAdminRequest.addReplicaProperty
+      ("collection", "shard", "replica", "prop", "value");
     assertContainsParams(request.getParams(), ACTION, COLLECTION, SHARD, REPLICA, "property", "property.value");
   }
   
   public void testClusterStatus() {
-    final CollectionAdminRequest.ClusterStatus request = new CollectionAdminRequest.ClusterStatus();
+    final CollectionAdminRequest.ClusterStatus request = CollectionAdminRequest.getClusterStatus();
     assertContainsParams(request.getParams(), ACTION);
+
+    request.setCollectionName("foo");
+    assertContainsParams(request.getParams(), ACTION, COLLECTION);
+    
+    request.setShardName("foo");
+    assertContainsParams(request.getParams(), ACTION, COLLECTION, SHARD);
+
+    request.setRouteKey("foo");
+    request.setShardName(null);
+    assertContainsParams(request.getParams(), ACTION, COLLECTION, ShardParams._ROUTE_);
+    
   }
   
   public void testCreateShard() {
-    final CollectionAdminRequest.CreateShard request = new CollectionAdminRequest.CreateShard()
-            .setCollectionName("collection")
-            .setShardName("shard");
+    final CollectionAdminRequest.CreateShard request = CollectionAdminRequest.createShard("collection","shard");
     assertContainsParams(request.getParams(), ACTION, COLLECTION, SHARD);
   }
   
   public void testDeleteReplica() {
-    final CollectionAdminRequest.DeleteReplica request = new CollectionAdminRequest.DeleteReplica()
-            .setCollectionName("collection")
-            .setShardName("shard")
-            .setReplica("replica");
+    final CollectionAdminRequest.DeleteReplica request = CollectionAdminRequest.deleteReplica("collection","shard","replica");
     assertContainsParams(request.getParams(), ACTION, COLLECTION, SHARD, REPLICA);
+
   }
   
   public void testDeleteReplicaProp() {
-    final CollectionAdminRequest.DeleteReplicaProp request = new CollectionAdminRequest.DeleteReplicaProp()
-            .setCollectionName("collection")
-            .setShardName("shard")
-            .setReplica("replica")
-            .setPropertyName("foo");
+    final CollectionAdminRequest.DeleteReplicaProp request = CollectionAdminRequest.deleteReplicaProperty
+      ("collection", "shard", "replica", "foo");
     assertContainsParams(request.getParams(), ACTION, COLLECTION, SHARD, REPLICA, "property");
   }
   
   public void testDeleteShard() {
-    final CollectionAdminRequest.DeleteShard request = new CollectionAdminRequest.DeleteShard()
-            .setCollectionName("collection")
-            .setShardName("shard");
+    final CollectionAdminRequest.DeleteShard request = CollectionAdminRequest.deleteShard("collection","shard");
     assertContainsParams(request.getParams(), ACTION, COLLECTION, SHARD);
   }
   
   public void testSplitShard() {
-    final CollectionAdminRequest.SplitShard request = new CollectionAdminRequest.SplitShard()
-            .setCollectionName("collection")
+    final CollectionAdminRequest.SplitShard request = CollectionAdminRequest.splitShard("collection")
             .setShardName("shard");
     assertContainsParams(request.getParams(), ACTION, COLLECTION, SHARD);
   }
 
   public void testCreateCollection() {
-    final CollectionAdminRequest.Create request = new CollectionAdminRequest.Create()
-            .setCollectionName("collection");
-    assertContainsParams(request.getParams(), ACTION, NAME);
+    // shortest form
+    assertContainsParams(CollectionAdminRequest.createCollection("foo", null, 1, 1).getParams(),
+                         ACTION, NAME, ZkStateReader.NUM_SHARDS_PROP,
+                         "replicationFactor", ZkStateReader.NRT_REPLICAS);
+    // shortest form w/ "explicitly" choosing "implicit" router
+    assertContainsParams(CollectionAdminRequest.createCollectionWithImplicitRouter("foo", null, "bar", 1).getParams(),
+                         ACTION, NAME, "shards", "router.name",
+                         "replicationFactor", ZkStateReader.NRT_REPLICAS);
   }
   
   public void testReloadCollection() {
-    final CollectionAdminRequest.Reload request = new CollectionAdminRequest.Reload()
-            .setCollectionName("collection");
+    final CollectionAdminRequest.Reload request = CollectionAdminRequest.reloadCollection("collection");
     assertContainsParams(request.getParams(), ACTION, NAME);
   }
   
   public void testDeleteCollection() {
-    final CollectionAdminRequest.Delete request = new CollectionAdminRequest.Delete()
-            .setCollectionName("collection");
+    final CollectionAdminRequest.Delete request = CollectionAdminRequest.deleteCollection("collection");
     assertContainsParams(request.getParams(), ACTION, NAME);
   }
   
   public void testCreateAlias() {
-    final CollectionAdminRequest.CreateAlias request = new CollectionAdminRequest.CreateAlias()
-            .setAliasName("name")
-            .setAliasedCollections("collections");
+    final CollectionAdminRequest.CreateAlias request = CollectionAdminRequest.createAlias("name","collections");
     assertContainsParams(request.getParams(), ACTION, NAME, "collections");
   }
   
   public void testDeleteAlias() {
-    final CollectionAdminRequest.DeleteAlias request = new CollectionAdminRequest.DeleteAlias()
-            .setAliasName("name");
+    final CollectionAdminRequest.DeleteAlias request = CollectionAdminRequest.deleteAlias("name");
     assertContainsParams(request.getParams(), ACTION, NAME);
   }
   
@@ -175,10 +172,7 @@ public class CollectionAdminRequestRequiredParamsTest extends LuceneTestCase {
   }
 
   public void testMigrate() {
-    final CollectionAdminRequest.Migrate request = new CollectionAdminRequest.Migrate()
-            .setCollectionName("collection")
-            .setTargetCollection("target")
-            .setSplitKey("splitKey");
+    final CollectionAdminRequest.Migrate request = CollectionAdminRequest.migrateData("collection","targer","splitKey");
     assertContainsParams(request.getParams(), ACTION, COLLECTION, "target.collection", "split.key");
   }
   
@@ -188,10 +182,21 @@ public class CollectionAdminRequestRequiredParamsTest extends LuceneTestCase {
   }
   
   public void testRequestStatus() {
-    final CollectionAdminRequest.RequestStatus request = new CollectionAdminRequest.RequestStatus()
-            .setRequestId("request");
+    final CollectionAdminRequest.RequestStatus request = CollectionAdminRequest.requestStatus("request");
     assertContainsParams(request.getParams(), ACTION, REQUESTID);
   }
+  
+  public void testDeleteStatus() {
+    assertContainsParams(CollectionAdminRequest.deleteAsyncId("foo").getParams(),
+                         ACTION, REQUESTID);
+    assertContainsParams(CollectionAdminRequest.deleteAllAsyncIds().getParams(),
+                         ACTION, FLUSH);
+  }
+  
+  public void testForceLeader() {
+    assertContainsParams(CollectionAdminRequest.forceLeaderElection("foo","bar").getParams(),
+                         ACTION, COLLECTION, SHARD);
+  }
 
   private void assertContainsParams(SolrParams solrParams, String... requiredParams) {
     final Set<String> requiredParamsSet = Sets.newHashSet(requiredParams);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCollectionAdminRequest.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCollectionAdminRequest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCollectionAdminRequest.java
index c21e523..29b273e 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCollectionAdminRequest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCollectionAdminRequest.java
@@ -17,7 +17,7 @@
 package org.apache.solr.client.solrj.request;
 
 import org.apache.lucene.util.LuceneTestCase;
-import org.apache.solr.client.solrj.request.CollectionAdminRequest.Create;
+import org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest.CreateAlias;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest.CreateShard;
 import org.apache.solr.common.SolrException;
@@ -30,57 +30,57 @@ public class TestCollectionAdminRequest extends LuceneTestCase {
   
   @Test
   public void testInvalidCollectionNameRejectedWhenCreatingCollection() {
-    final Create createRequest = new Create();
-    try {
-      createRequest.setCollectionName("invalid$collection@name");
-      fail();
-    } catch (SolrException e) {
-      final String exceptionMessage = e.getMessage();
-      assertTrue(exceptionMessage.contains("Invalid collection"));
-      assertTrue(exceptionMessage.contains("invalid$collection@name"));
-      assertTrue(exceptionMessage.contains("must consist entirely of periods, underscores, hyphens, and alphanumerics"));
-    }
+    final SolrException e = expectThrows(SolrException.class, () -> {
+        CollectionAdminRequest.createCollection("invalid$collection@name", null, 1, 1);
+      });
+    final String exceptionMessage = e.getMessage();
+    assertTrue(exceptionMessage.contains("Invalid collection"));
+    assertTrue(exceptionMessage.contains("invalid$collection@name"));
+    assertTrue(exceptionMessage.contains("must consist entirely of periods, underscores, hyphens, and alphanumerics"));
   }
   
   @Test
-  public void testInvalidShardNamesRejectedWhenCreatingCollection() {
-    final Create createRequest = new Create();
-    try {
-      createRequest.setShards("invalid$shard@name");
-      fail();
-    } catch (SolrException e) {
-      final String exceptionMessage = e.getMessage();
-      assertTrue(exceptionMessage.contains("Invalid shard"));
-      assertTrue(exceptionMessage.contains("invalid$shard@name"));
-      assertTrue(exceptionMessage.contains("must consist entirely of periods, underscores, hyphens, and alphanumerics"));
-    }
+  public void testInvalidShardNamesRejectedWhenCreatingImplicitCollection() {
+    final SolrException e = expectThrows(SolrException.class, () -> {
+        CollectionAdminRequest.createCollectionWithImplicitRouter("fine", "fine", "invalid$shard@name",1,0,0);
+      });
+    final String exceptionMessage = e.getMessage();
+    assertTrue(exceptionMessage.contains("Invalid shard"));
+    assertTrue(exceptionMessage.contains("invalid$shard@name"));
+    assertTrue(exceptionMessage.contains("must consist entirely of periods, underscores, hyphens, and alphanumerics"));
+  }
+  
+  @Test
+  public void testInvalidShardNamesRejectedWhenCallingSetShards() {
+    CollectionAdminRequest.Create request = CollectionAdminRequest.createCollectionWithImplicitRouter("fine",null,"fine",1);
+    final SolrException e = expectThrows(SolrException.class, () -> {
+        request.setShards("invalid$shard@name");
+      });
+    final String exceptionMessage = e.getMessage();
+    assertTrue(exceptionMessage.contains("Invalid shard"));
+    assertTrue(exceptionMessage.contains("invalid$shard@name"));
+    assertTrue(exceptionMessage.contains("must consist entirely of periods, underscores, hyphens, and alphanumerics"));
   }
   
   @Test
   public void testInvalidAliasNameRejectedWhenCreatingAlias() {
-    final CreateAlias createAliasRequest = new CreateAlias();
-    try {
-      createAliasRequest.setAliasName("invalid$alias@name");
-      fail();
-    } catch (SolrException e) {
-      final String exceptionMessage = e.getMessage();
-      assertTrue(exceptionMessage.contains("Invalid alias"));
-      assertTrue(exceptionMessage.contains("invalid$alias@name"));
-      assertTrue(exceptionMessage.contains("must consist entirely of periods, underscores, hyphens, and alphanumerics"));
-    }
+    final SolrException e = expectThrows(SolrException.class, () -> {
+        CreateAlias createAliasRequest = CollectionAdminRequest.createAlias("invalid$alias@name","ignored");
+      });
+    final String exceptionMessage = e.getMessage();
+    assertTrue(exceptionMessage.contains("Invalid alias"));
+    assertTrue(exceptionMessage.contains("invalid$alias@name"));
+    assertTrue(exceptionMessage.contains("must consist entirely of periods, underscores, hyphens, and alphanumerics"));
   }
   
   @Test
   public void testInvalidShardNameRejectedWhenCreatingShard() {
-    final CreateShard createShardRequest = new CreateShard();
-    try {
-      createShardRequest.setShardName("invalid$shard@name");
-      fail();
-    } catch (SolrException e) {
-      final String exceptionMessage = e.getMessage();
-      assertTrue(exceptionMessage.contains("Invalid shard"));
-      assertTrue(exceptionMessage.contains("invalid$shard@name"));
-      assertTrue(exceptionMessage.contains("must consist entirely of periods, underscores, hyphens, and alphanumerics"));
-    }
+    final SolrException e = expectThrows(SolrException.class, () -> {
+        CreateShard createShardRequest = CollectionAdminRequest.createShard("ignored","invalid$shard@name");
+      });
+    final String exceptionMessage = e.getMessage();
+    assertTrue(exceptionMessage.contains("Invalid shard"));
+    assertTrue(exceptionMessage.contains("invalid$shard@name"));
+    assertTrue(exceptionMessage.contains("must consist entirely of periods, underscores, hyphens, and alphanumerics"));
   }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
----------------------------------------------------------------------
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 9b8f707..2970a8b 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
@@ -1892,8 +1892,7 @@ public abstract class AbstractFullDistribZkTestBase extends AbstractDistribZkTes
       throws SolrServerException, IOException {
     CollectionAdminResponse resp = createCollection(testCollectionName, numShards, replicationFactor, maxShardsPerNode);
     if (resp.getResponse().get("failure") != null) {
-      CollectionAdminRequest.Delete req = new CollectionAdminRequest.Delete();
-      req.setCollectionName(testCollectionName);
+      CollectionAdminRequest.Delete req = CollectionAdminRequest.deleteCollection(testCollectionName);
       req.process(cloudClient);
 
       resp = createCollection(testCollectionName, numShards, replicationFactor, maxShardsPerNode);
@@ -2158,6 +2157,22 @@ public abstract class AbstractFullDistribZkTestBase extends AbstractDistribZkTes
     }
   }
   
+  /** 
+   * Logs a WARN if collection can't be deleted, but does not fail or throw an exception
+   * @return true if success, else false
+   */
+  protected static boolean attemptCollectionDelete(CloudSolrClient client, String collectionName) {
+    // try to clean up
+    try {
+      CollectionAdminRequest.deleteCollection(collectionName).process(client);
+      return true;
+    } catch (Exception e) {
+      // don't fail the test
+      log.warn("Could not delete collection {} - ignoring", collectionName);
+    }
+    return false;
+  }
+
   protected void logReplicationDetails(Replica replica, StringBuilder builder) throws IOException {
     try (HttpSolrClient client = new HttpSolrClient.Builder(replica.getCoreUrl()).build()) {
       ModifiableSolrParams params = new ModifiableSolrParams();
@@ -2203,9 +2218,7 @@ public abstract class AbstractFullDistribZkTestBase extends AbstractDistribZkTes
   }
 
   static CollectionAdminResponse getStatusResponse(String requestId, SolrClient client) throws SolrServerException, IOException {
-    CollectionAdminRequest.RequestStatus requestStatusRequest = new CollectionAdminRequest.RequestStatus();
-    requestStatusRequest.setRequestId(requestId);
-    return requestStatusRequest.process(client);
+    return CollectionAdminRequest.requestStatus(requestId).process(client);
   }
 
 }


[3/3] lucene-solr:master: SOLR-10757: Merge remote-tracking branch 'refs/remotes/origin/master'

Posted by ho...@apache.org.
SOLR-10757: Merge remote-tracking branch 'refs/remotes/origin/master'

Conflicts:
	solr/CHANGES.txt


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/7a5261a2
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/7a5261a2
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/7a5261a2

Branch: refs/heads/master
Commit: 7a5261a2228b52d6b29d1d6c147ce08f43e917cb
Parents: ee33f38 55e37cd
Author: Chris Hostetter <ho...@apache.org>
Authored: Wed May 31 09:52:25 2017 -0700
Committer: Chris Hostetter <ho...@apache.org>
Committed: Wed May 31 09:52:25 2017 -0700

----------------------------------------------------------------------
 .../spatial3d/geom/GeoPolygonFactory.java       | 63 +++++++++++++++
 .../lucene/spatial3d/geom/GeoPolygonTest.java   | 63 +++++++++++++++
 solr/CHANGES.txt                                |  3 +
 .../apache/solr/cloud/CreateCollectionCmd.java  |  4 +-
 .../org/apache/solr/cloud/TestPullReplica.java  | 20 ++++-
 .../org/apache/solr/cloud/TestTlogReplica.java  | 20 ++++-
 solr/solr-ref-guide/src/codec-factory.adoc      | 24 +++++-
 .../src/near-real-time-searching.adoc           | 14 +++-
 .../src/solr-control-script-reference.adoc      | 11 ++-
 .../solrj/io/stream/TimeSeriesStream.java       | 38 ++++++++-
 .../solrj/io/stream/StreamExpressionTest.java   | 81 ++++++++++++++++++++
 11 files changed, 321 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/7a5261a2/solr/CHANGES.txt
----------------------------------------------------------------------
diff --cc solr/CHANGES.txt
index d78f991,f57cac5..1192d36
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@@ -198,8 -198,9 +198,11 @@@ Other Change
  
  * SOLR-10755: delete/refactor many solrj deprecations (hossman)
  
+ * SOLR-10752: replicationFactor (nrtReplicas) default is 0 if tlogReplicas is specified when creating a collection
+   (Tomás Fernández Löbbe)
+ 
 +* SOLR-10757: delete/refactor/cleanup CollectionAdminRequest deprecations (hossman)
 +
  ==================  6.7.0 ==================
  
  Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.


[2/3] lucene-solr:master: SOLR-10757: delete/refactor/cleanup CollectionAdminRequest deprecations

Posted by ho...@apache.org.
SOLR-10757: delete/refactor/cleanup CollectionAdminRequest deprecations


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/ee33f38b
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/ee33f38b
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/ee33f38b

Branch: refs/heads/master
Commit: ee33f38bd1b4c039dc0d054ccf0eb2904fc9ea92
Parents: c680de1
Author: Chris Hostetter <ho...@apache.org>
Authored: Wed May 31 09:49:56 2017 -0700
Committer: Chris Hostetter <ho...@apache.org>
Committed: Wed May 31 09:49:56 2017 -0700

----------------------------------------------------------------------
 solr/CHANGES.txt                                |   2 +
 .../solr/core/snapshots/SolrSnapshotsTool.java  |   7 +-
 .../AbstractCloudBackupRestoreTestCase.java     |  11 +-
 .../CollectionsAPIAsyncDistributedZkTest.java   |  62 +-
 .../solr/cloud/CollectionsAPISolrJTest.java     |  12 +-
 ...ConcurrentDeleteAndCreateCollectionTest.java |  12 +-
 .../org/apache/solr/cloud/DeleteStatusTest.java |  23 -
 .../org/apache/solr/cloud/ForceLeaderTest.java  |  25 +-
 .../cloud/FullSolrCloudDistribCmdsTest.java     |  16 +-
 .../apache/solr/cloud/HttpPartitionTest.java    |  36 +-
 .../cloud/LeaderFailoverAfterPartitionTest.java |  10 +-
 .../LeaderInitiatedRecoveryOnCommitTest.java    |  19 +-
 .../apache/solr/cloud/MultiThreadedOCPTest.java |  63 +-
 .../org/apache/solr/cloud/ReplaceNodeTest.java  |   4 +-
 .../solr/cloud/ReplicationFactorTest.java       |   4 +-
 .../apache/solr/cloud/RollingRestartTest.java   |   2 +-
 .../org/apache/solr/cloud/ShardSplitTest.java   |   8 +-
 .../cloud/SharedFSAutoReplicaFailoverTest.java  |  24 +-
 .../cloud/SimpleCollectionCreateDeleteTest.java |  13 +-
 .../apache/solr/cloud/TestCollectionAPI.java    |  24 +-
 .../cloud/TestRandomRequestDistribution.java    |  15 +-
 .../solr/cloud/TestRequestForwarding.java       |   6 +-
 .../cloud/TestSolrCloudWithKerberosAlt.java     |   9 +-
 .../TestSolrCloudWithSecureImpersonation.java   |   6 +-
 .../apache/solr/handler/TestBlobHandler.java    |  10 +-
 .../solr/search/stats/TestDistribIDF.java       |  13 +-
 .../solrj/request/CollectionAdminRequest.java   | 844 ++-----------------
 ...ollectionAdminRequestRequiredParamsTest.java | 137 +--
 .../request/TestCollectionAdminRequest.java     |  84 +-
 .../cloud/AbstractFullDistribZkTestBase.java    |  23 +-
 30 files changed, 316 insertions(+), 1208 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 3661037..d78f991 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -198,6 +198,8 @@ Other Changes
 
 * SOLR-10755: delete/refactor many solrj deprecations (hossman)
 
+* SOLR-10757: delete/refactor/cleanup CollectionAdminRequest deprecations (hossman)
+
 ==================  6.7.0 ==================
 
 Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/java/org/apache/solr/core/snapshots/SolrSnapshotsTool.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/snapshots/SolrSnapshotsTool.java b/solr/core/src/java/org/apache/solr/core/snapshots/SolrSnapshotsTool.java
index 935ef63..76e5beb 100644
--- a/solr/core/src/java/org/apache/solr/core/snapshots/SolrSnapshotsTool.java
+++ b/solr/core/src/java/org/apache/solr/core/snapshots/SolrSnapshotsTool.java
@@ -301,11 +301,8 @@ public class SolrSnapshotsTool implements Closeable {
       if (backupRepo.isPresent()) {
         backup.setRepositoryName(backupRepo.get());
       }
-      if (asyncReqId.isPresent()) {
-        backup.setAsyncId(asyncReqId.get());
-      }
-      CollectionAdminResponse resp = backup.process(solrClient);
-      Preconditions.checkState(resp.getStatus() == 0, "The request failed. The status code is " + resp.getStatus());
+      // if asyncId is null, processAsync will block and throw an Exception with any error
+      backup.processAsync(asyncReqId.orElse(null), solrClient);
     } catch (Exception e) {
       log.error("Failed to backup collection meta-data for collection " + collectionName, e);
       System.out.println("Failed to backup collection meta-data for collection " + collectionName

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/AbstractCloudBackupRestoreTestCase.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/AbstractCloudBackupRestoreTestCase.java b/solr/core/src/test/org/apache/solr/cloud/AbstractCloudBackupRestoreTestCase.java
index f86322d..526a8df 100644
--- a/solr/core/src/test/org/apache/solr/cloud/AbstractCloudBackupRestoreTestCase.java
+++ b/solr/core/src/test/org/apache/solr/cloud/AbstractCloudBackupRestoreTestCase.java
@@ -87,8 +87,12 @@ public abstract class AbstractCloudBackupRestoreTestCase extends SolrCloudTestCa
     int replFactor = TestUtil.nextInt(random(), 1, 2);
     int numTlogReplicas = TestUtil.nextInt(random(), 0, 1);
     int numPullReplicas = TestUtil.nextInt(random(), 0, 1);
-    CollectionAdminRequest.Create create =
-        CollectionAdminRequest.createCollection(getCollectionName(), "conf1", NUM_SHARDS, replFactor, numTlogReplicas, numPullReplicas);
+    
+    CollectionAdminRequest.Create create = isImplicit ?
+      // NOTE: use shard list with same # of shards as NUM_SHARDS; we assume this later
+      CollectionAdminRequest.createCollectionWithImplicitRouter(getCollectionName(), "conf1", "shard1,shard2", replFactor, numTlogReplicas, numPullReplicas) :
+      CollectionAdminRequest.createCollection(getCollectionName(), "conf1", NUM_SHARDS, replFactor, numTlogReplicas, numPullReplicas);
+    
     if (NUM_SHARDS * (replFactor + numTlogReplicas + numPullReplicas) > cluster.getJettySolrRunners().size() || random().nextBoolean()) {
       create.setMaxShardsPerNode((int)Math.ceil(NUM_SHARDS * (replFactor + numTlogReplicas + numPullReplicas) / cluster.getJettySolrRunners().size()));//just to assert it survives the restoration
       if (doSplitShardOperation) {
@@ -102,9 +106,6 @@ public abstract class AbstractCloudBackupRestoreTestCase extends SolrCloudTestCa
     coreProps.put("customKey", "customValue");//just to assert it survives the restoration
     create.setProperties(coreProps);
     if (isImplicit) { //implicit router
-      create.setRouterName(ImplicitDocRouter.NAME);
-      create.setNumShards(null);//erase it. TODO suggest a new createCollectionWithImplicitRouter method
-      create.setShards("shard1,shard2"); // however still same number as NUM_SHARDS; we assume this later
       create.setRouterField("shard_s");
     } else {//composite id router
       if (random().nextBoolean()) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIAsyncDistributedZkTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIAsyncDistributedZkTest.java b/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIAsyncDistributedZkTest.java
index 30c3c9e..1474b5c 100644
--- a/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIAsyncDistributedZkTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIAsyncDistributedZkTest.java
@@ -24,8 +24,6 @@ import org.apache.lucene.util.TestUtil;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
-import org.apache.solr.client.solrj.request.CollectionAdminRequest.Create;
-import org.apache.solr.client.solrj.request.CollectionAdminRequest.SplitShard;
 import org.apache.solr.client.solrj.response.RequestStatusState;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrInputDocument;
@@ -54,29 +52,19 @@ public class CollectionsAPIAsyncDistributedZkTest extends SolrCloudTestCase {
 
     final CloudSolrClient client = cluster.getSolrClient();
 
-    RequestStatusState state = new Create()
-        .setCollectionName("testasynccollectioncreation")
-        .setNumShards(1)
-        .setReplicationFactor(1)
-        .setConfigName("conf1")
+    RequestStatusState state = CollectionAdminRequest.createCollection("testasynccollectioncreation","conf1",1,1)
         .processAndWait(client, MAX_TIMEOUT_SECONDS);
     assertSame("CreateCollection task did not complete!", RequestStatusState.COMPLETED, state);
 
-    state = new Create()
-        .setCollectionName("testasynccollectioncreation")
-        .setNumShards(1)
-        .setConfigName("conf1")
+    state = CollectionAdminRequest.createCollection("testasynccollectioncreation","conf1",1,1)
         .processAndWait(client, MAX_TIMEOUT_SECONDS);
     assertSame("Recreating a collection with the same should have failed.", RequestStatusState.FAILED, state);
 
-    state = new CollectionAdminRequest.AddReplica()
-        .setCollectionName("testasynccollectioncreation")
-        .setShardName("shard1")
-        .processAndWait(client, MAX_TIMEOUT_SECONDS);
+    state = CollectionAdminRequest.addReplicaToShard("testasynccollectioncreation", "shard1")
+      .processAndWait(client, MAX_TIMEOUT_SECONDS);
     assertSame("Add replica did not complete", RequestStatusState.COMPLETED, state);
 
-    state = new SplitShard()
-        .setCollectionName("testasynccollectioncreation")
+    state = CollectionAdminRequest.splitShard("testasynccollectioncreation")
         .setShardName("shard1")
         .processAndWait(client, MAX_TIMEOUT_SECONDS * 2);
     assertEquals("Shard split did not complete. Last recorded state: " + state, RequestStatusState.COMPLETED, state);
@@ -89,12 +77,9 @@ public class CollectionsAPIAsyncDistributedZkTest extends SolrCloudTestCase {
     final String collection = "testAsyncOperations";
     final CloudSolrClient client = cluster.getSolrClient();
 
-    RequestStatusState state = new Create()
-        .setCollectionName(collection)
-        .setNumShards(1)
+    RequestStatusState state = CollectionAdminRequest.createCollection(collection,"conf1",1,1)
         .setRouterName("implicit")
         .setShards("shard1")
-        .setConfigName("conf1")
         .processAndWait(client, MAX_TIMEOUT_SECONDS);
     assertSame("CreateCollection task did not complete!", RequestStatusState.COMPLETED, state);
 
@@ -114,14 +99,11 @@ public class CollectionsAPIAsyncDistributedZkTest extends SolrCloudTestCase {
     query.set("shards", "shard1");
     assertEquals(numDocs, client.query(collection, query).getResults().getNumFound());
 
-    state = new CollectionAdminRequest.Reload()
-        .setCollectionName(collection)
+    state = CollectionAdminRequest.reloadCollection(collection)
         .processAndWait(client, MAX_TIMEOUT_SECONDS);
     assertSame("ReloadCollection did not complete", RequestStatusState.COMPLETED, state);
 
-    state = new CollectionAdminRequest.CreateShard()
-        .setCollectionName(collection)
-        .setShardName("shard2")
+    state = CollectionAdminRequest.createShard(collection,"shard2")
         .processAndWait(client, MAX_TIMEOUT_SECONDS);
     assertSame("CreateShard did not complete", RequestStatusState.COMPLETED, state);
 
@@ -135,16 +117,11 @@ public class CollectionsAPIAsyncDistributedZkTest extends SolrCloudTestCase {
     query.set("shards", "shard2");
     assertEquals(1, client.query(collection, query).getResults().getNumFound());
 
-    state = new CollectionAdminRequest.DeleteShard()
-        .setCollectionName(collection)
-        .setShardName("shard2")
-        .processAndWait(client, MAX_TIMEOUT_SECONDS);
+    state = CollectionAdminRequest.deleteShard(collection,"shard2").processAndWait(client, MAX_TIMEOUT_SECONDS);
     assertSame("DeleteShard did not complete", RequestStatusState.COMPLETED, state);
 
-    state = new CollectionAdminRequest.AddReplica()
-        .setCollectionName(collection)
-        .setShardName("shard1")
-        .processAndWait(client, MAX_TIMEOUT_SECONDS);
+    state = CollectionAdminRequest.addReplicaToShard(collection, "shard1")
+      .processAndWait(client, MAX_TIMEOUT_SECONDS);
     assertSame("AddReplica did not complete", RequestStatusState.COMPLETED, state);
 
     //cloudClient watch might take a couple of seconds to reflect it
@@ -157,9 +134,7 @@ public class CollectionsAPIAsyncDistributedZkTest extends SolrCloudTestCase {
       Thread.sleep(100);
     }
 
-    state = new CollectionAdminRequest.CreateAlias()
-        .setAliasName("myalias")
-        .setAliasedCollections(collection)
+    state = CollectionAdminRequest.createAlias("myalias",collection)
         .processAndWait(client, MAX_TIMEOUT_SECONDS);
     assertSame("CreateAlias did not complete", RequestStatusState.COMPLETED, state);
 
@@ -167,8 +142,7 @@ public class CollectionsAPIAsyncDistributedZkTest extends SolrCloudTestCase {
     query.set("shards", "shard1");
     assertEquals(numDocs, client.query("myalias", query).getResults().getNumFound());
 
-    state = new CollectionAdminRequest.DeleteAlias()
-        .setAliasName("myalias")
+    state = CollectionAdminRequest.deleteAlias("myalias")
         .processAndWait(client, MAX_TIMEOUT_SECONDS);
     assertSame("DeleteAlias did not complete", RequestStatusState.COMPLETED, state);
 
@@ -191,15 +165,11 @@ public class CollectionsAPIAsyncDistributedZkTest extends SolrCloudTestCase {
 
     shard1 = client.getZkStateReader().getClusterState().getSlice(collection, "shard1");
     String replicaName = shard1.getReplicas().iterator().next().getName();
-    state = new CollectionAdminRequest.DeleteReplica()
-        .setCollectionName(collection)
-        .setShardName("shard1")
-        .setReplica(replicaName)
-        .processAndWait(client, MAX_TIMEOUT_SECONDS);
+    state = CollectionAdminRequest.deleteReplica(collection, "shard1", replicaName)
+      .processAndWait(client, MAX_TIMEOUT_SECONDS);
     assertSame("DeleteReplica did not complete", RequestStatusState.COMPLETED, state);
 
-    state = new CollectionAdminRequest.Delete()
-        .setCollectionName(collection)
+    state = CollectionAdminRequest.deleteCollection(collection)
         .processAndWait(client, MAX_TIMEOUT_SECONDS);
     assertSame("DeleteCollection did not complete", RequestStatusState.COMPLETED, state);
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java
----------------------------------------------------------------------
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 643660b..861bdcc 100644
--- a/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java
@@ -267,17 +267,21 @@ public class CollectionsAPISolrJTest extends SolrCloudTestCase {
   @Test
   public void testClusterProp() throws InterruptedException, IOException, SolrServerException {
 
+    // sanity check our expected default
+    final ClusterProperties props = new ClusterProperties(zkClient());
+    assertEquals("Expecting prop to default to unset, test needs upated",
+                 props.getClusterProperty(ZkStateReader.LEGACY_CLOUD, null), null);
+    
     CollectionAdminResponse response = CollectionAdminRequest.setClusterProperty(ZkStateReader.LEGACY_CLOUD, "false")
-        .process(cluster.getSolrClient());
+      .process(cluster.getSolrClient());
 
     assertEquals(0, response.getStatus());
 
-    ClusterProperties props = new ClusterProperties(zkClient());
-    assertEquals("Cluster property was not set", props.getClusterProperty(ZkStateReader.LEGACY_CLOUD, "true"), "false");
+    assertEquals("Cluster property was not set", props.getClusterProperty(ZkStateReader.LEGACY_CLOUD, null), "false");
 
     // Unset ClusterProp that we set.
     CollectionAdminRequest.setClusterProperty(ZkStateReader.LEGACY_CLOUD, null).process(cluster.getSolrClient());
-    assertEquals("Cluster property was not unset", props.getClusterProperty(ZkStateReader.LEGACY_CLOUD, "true"), "true");
+    assertEquals("Cluster property was not unset", props.getClusterProperty(ZkStateReader.LEGACY_CLOUD, null), null);
 
   }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/ConcurrentDeleteAndCreateCollectionTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/ConcurrentDeleteAndCreateCollectionTest.java b/solr/core/src/test/org/apache/solr/cloud/ConcurrentDeleteAndCreateCollectionTest.java
index 151230d..bc3b9c5 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ConcurrentDeleteAndCreateCollectionTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ConcurrentDeleteAndCreateCollectionTest.java
@@ -164,11 +164,8 @@ public class ConcurrentDeleteAndCreateCollectionTest extends SolrTestCaseJ4 {
     
     private void createCollection() {
       try {
-        final CollectionAdminResponse response = new CollectionAdminRequest.Create()
-                .setCollectionName(collectionName)
-                .setNumShards(1)
-                .setReplicationFactor(1)
-                .setConfigName(configName).process(solrClient);
+        final CollectionAdminResponse response = CollectionAdminRequest.createCollection(collectionName,configName,1,1)
+                .process(solrClient);
         if (response.getStatus() != 0) {
           addFailure(new RuntimeException("failed to create collection " + collectionName));
         }
@@ -180,9 +177,8 @@ public class ConcurrentDeleteAndCreateCollectionTest extends SolrTestCaseJ4 {
     
     private void deleteCollection() {
       try {
-        final CollectionAdminRequest.Delete deleteCollectionRequest = new CollectionAdminRequest.Delete()
-                .setCollectionName(collectionName);
-        
+        final CollectionAdminRequest.Delete deleteCollectionRequest
+          = CollectionAdminRequest.deleteCollection(collectionName);
         final CollectionAdminResponse response = deleteCollectionRequest.process(solrClient);
         if (response.getStatus() != 0) {
           addFailure(new RuntimeException("failed to delete collection " + collectionName));

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/DeleteStatusTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/DeleteStatusTest.java b/solr/core/src/test/org/apache/solr/cloud/DeleteStatusTest.java
index 3b8e014..bd14ef7 100644
--- a/solr/core/src/test/org/apache/solr/cloud/DeleteStatusTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/DeleteStatusTest.java
@@ -120,27 +120,4 @@ public class DeleteStatusTest extends SolrCloudTestCase {
         CollectionAdminRequest.requestStatus(id2).process(client).getRequestStatus());
 
   }
-
-  @Test
-  @SuppressWarnings("deprecation")
-  public void testDeprecatedConstructorValidation() throws Exception {
-
-    final CloudSolrClient client = cluster.getSolrClient();
-
-    try {
-      new CollectionAdminRequest.DeleteStatus().process(client);
-      fail("delete status should have failed");
-    } catch (IllegalArgumentException e) {
-      assertTrue(e.getMessage().contains("Either requestid or flush parameter must be specified."));
-    }
-
-    try {
-      new CollectionAdminRequest.DeleteStatus().setFlush(true)
-          .setRequestId("foo")
-          .process(client);
-      fail("delete status should have failed");
-    } catch (IllegalArgumentException e) {
-      assertTrue(e.getMessage().contains("Both requestid and flush parameters can not be specified together."));
-    }
-  }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/ForceLeaderTest.java
----------------------------------------------------------------------
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 8f35c88..b57dcb7 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ForceLeaderTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ForceLeaderTest.java
@@ -152,14 +152,7 @@ public class ForceLeaderTest extends HttpPartitionTest {
     } finally {
       log.info("Cleaning up after the test.");
       // try to clean up
-      try {
-        CollectionAdminRequest.Delete req = new CollectionAdminRequest.Delete();
-        req.setCollectionName(testCollectionName);
-        req.process(cloudClient);
-      } catch (Exception e) {
-        // don't fail the test
-        log.warn("Could not delete collection {} after test completed", testCollectionName);
-      }
+      attemptCollectionDelete(cloudClient, testCollectionName);
     }
   }
 
@@ -206,15 +199,7 @@ public class ForceLeaderTest extends HttpPartitionTest {
       }
     } finally {
       log.info("Cleaning up after the test.");
-      // try to clean up
-      try {
-        CollectionAdminRequest.Delete req = new CollectionAdminRequest.Delete();
-        req.setCollectionName(testCollectionName);
-        req.process(cloudClient);
-      } catch (Exception e) {
-        // don't fail the test
-        log.warn("Could not delete collection {} after test completed", testCollectionName);
-      }
+      attemptCollectionDelete(cloudClient, testCollectionName);
     }
   }
 
@@ -431,10 +416,8 @@ public class ForceLeaderTest extends HttpPartitionTest {
   }
 
   private void doForceLeader(SolrClient client, String collectionName, String shard) throws IOException, SolrServerException {
-      CollectionAdminRequest.ForceLeader forceLeader = new CollectionAdminRequest.ForceLeader();
-      forceLeader.setCollectionName(collectionName);
-      forceLeader.setShardName(shard);
-      client.request(forceLeader);
+    CollectionAdminRequest.ForceLeader forceLeader = CollectionAdminRequest.forceLeaderElection(collectionName, shard);
+    client.request(forceLeader);
   }
 
   protected int getNumberOfActiveReplicas(ClusterState clusterState, String collection, String sliceId) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/FullSolrCloudDistribCmdsTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/FullSolrCloudDistribCmdsTest.java b/solr/core/src/test/org/apache/solr/cloud/FullSolrCloudDistribCmdsTest.java
index 7f3ab96..9355c43 100644
--- a/solr/core/src/test/org/apache/solr/cloud/FullSolrCloudDistribCmdsTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/FullSolrCloudDistribCmdsTest.java
@@ -157,13 +157,9 @@ public class FullSolrCloudDistribCmdsTest extends AbstractFullDistribZkTestBase
     CollectionAdminResponse response;
     Map<String, NamedList<Integer>> coresStatus;
 
-    CollectionAdminRequest.Create createCollectionRequest = new CollectionAdminRequest.Create()
-            .setCollectionName("implicit_collection_without_routerfield")
-            .setRouterName("implicit")
-            .setNumShards(2)
-            .setShards("shard1,shard2")
-            .setReplicationFactor(2)
-            .setConfigName("conf1");
+    CollectionAdminRequest.Create createCollectionRequest
+      = CollectionAdminRequest.createCollectionWithImplicitRouter("implicit_collection_without_routerfield",
+                                                                  "conf1","shard1,shard2",2);
     response = createCollectionRequest.process(server);
 
     assertEquals(0, response.getStatus());
@@ -285,14 +281,10 @@ public class FullSolrCloudDistribCmdsTest extends AbstractFullDistribZkTestBase
     CollectionAdminResponse response;
     Map<String, NamedList<Integer>> coresStatus;
 
-    response = new CollectionAdminRequest.Create()
-            .setCollectionName("compositeid_collection_with_routerfield")
+    response = CollectionAdminRequest.createCollection("compositeid_collection_with_routerfield","conf1",2,2)
             .setRouterName("compositeId")
             .setRouterField("routefield_s")
-            .setNumShards(2)
             .setShards("shard1,shard2")
-            .setReplicationFactor(2)
-            .setConfigName("conf1")
             .process(server);
 
     assertEquals(0, response.getStatus());

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/HttpPartitionTest.java
----------------------------------------------------------------------
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 2cc1c30..6c7de88 100644
--- a/solr/core/src/test/org/apache/solr/cloud/HttpPartitionTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/HttpPartitionTest.java
@@ -37,7 +37,6 @@ import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.embedded.JettySolrRunner;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
-import org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.client.solrj.request.UpdateRequest;
 import org.apache.solr.common.SolrException;
@@ -199,13 +198,7 @@ public class HttpPartitionTest extends AbstractFullDistribZkTestBase {
     zkClient.delete(znodePath, -1, false);
 
     // try to clean up
-    try {
-      new CollectionAdminRequest.Delete()
-              .setCollectionName(testCollectionName).process(cloudClient);
-    } catch (Exception e) {
-      // don't fail the test
-      log.warn("Could not delete collection {} after test completed", testCollectionName);
-    }
+    attemptCollectionDelete(cloudClient, testCollectionName);
   }
 
   protected void testMinRf() throws Exception {
@@ -387,13 +380,7 @@ public class HttpPartitionTest extends AbstractFullDistribZkTestBase {
     log.info("testRf2 succeeded ... deleting the "+testCollectionName+" collection");
 
     // try to clean up
-    try {
-      new CollectionAdminRequest.Delete()
-              .setCollectionName(testCollectionName).process(cloudClient);
-    } catch (Exception e) {
-      // don't fail the test
-      log.warn("Could not delete collection {} after test completed", testCollectionName);
-    }
+    attemptCollectionDelete(cloudClient, testCollectionName);
   }
   
   protected void testRf3() throws Exception {
@@ -443,14 +430,7 @@ public class HttpPartitionTest extends AbstractFullDistribZkTestBase {
     log.info("testRf3 succeeded ... deleting the "+testCollectionName+" collection");
 
     // try to clean up
-    try {
-      CollectionAdminRequest.Delete req = new CollectionAdminRequest.Delete();
-      req.setCollectionName(testCollectionName);
-      req.process(cloudClient);
-    } catch (Exception e) {
-      // don't fail the test
-      log.warn("Could not delete collection {} after test completed", testCollectionName);
-    }
+    attemptCollectionDelete(cloudClient, testCollectionName);
   }
 
   // test inspired by SOLR-6511
@@ -534,14 +514,7 @@ public class HttpPartitionTest extends AbstractFullDistribZkTestBase {
     log.info("testLeaderZkSessionLoss succeeded ... deleting the "+testCollectionName+" collection");
 
     // try to clean up
-    try {
-      CollectionAdminRequest.Delete req = new CollectionAdminRequest.Delete();
-      req.setCollectionName(testCollectionName);
-      req.process(cloudClient);
-    } catch (Exception e) {
-      // don't fail the test
-      log.warn("Could not delete collection {} after test completed", testCollectionName);
-    }
+    attemptCollectionDelete(cloudClient, testCollectionName);
   }
 
   protected List<Replica> getActiveOrRecoveringReplicas(String testCollectionName, String shardId) throws Exception {    
@@ -693,4 +666,5 @@ public class HttpPartitionTest extends AbstractFullDistribZkTestBase {
 
     log.info("Took {} ms to see replicas [{}] become active.", timer.getTime(), replicasToCheck);
   }
+
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/LeaderFailoverAfterPartitionTest.java
----------------------------------------------------------------------
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 f172267..975459d 100644
--- a/solr/core/src/test/org/apache/solr/cloud/LeaderFailoverAfterPartitionTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/LeaderFailoverAfterPartitionTest.java
@@ -20,7 +20,6 @@ import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.apache.solr.SolrTestCaseJ4.SuppressSSL;
 import org.apache.solr.client.solrj.embedded.JettySolrRunner;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
-import org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.cloud.Replica;
 import org.junit.Test;
@@ -184,13 +183,6 @@ public class LeaderFailoverAfterPartitionTest extends HttpPartitionTest {
     assertDocsExistInAllReplicas(participatingReplicas, testCollectionName, 1, 6);
 
     // try to clean up
-    try {
-      CollectionAdminRequest.Delete req = new CollectionAdminRequest.Delete();
-      req.setCollectionName(testCollectionName);
-      req.process(cloudClient);
-    } catch (Exception e) {
-      // don't fail the test
-      log.warn("Could not delete collection {} after test completed", testCollectionName);
-    }
+    attemptCollectionDelete(cloudClient, testCollectionName);
   }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/LeaderInitiatedRecoveryOnCommitTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/LeaderInitiatedRecoveryOnCommitTest.java b/solr/core/src/test/org/apache/solr/cloud/LeaderInitiatedRecoveryOnCommitTest.java
index f3965ac..f900d3a 100644
--- a/solr/core/src/test/org/apache/solr/cloud/LeaderInitiatedRecoveryOnCommitTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/LeaderInitiatedRecoveryOnCommitTest.java
@@ -19,7 +19,6 @@ package org.apache.solr.cloud;
 import org.apache.http.NoHttpResponseException;
 import org.apache.solr.client.solrj.embedded.JettySolrRunner;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
-import org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.util.RTimer;
@@ -96,14 +95,7 @@ public class LeaderInitiatedRecoveryOnCommitTest extends BasicDistributedZkTest
     Thread.sleep(sleepMsBeforeHealPartition);
 
     // try to clean up
-    try {
-      CollectionAdminRequest.Delete req = new CollectionAdminRequest.Delete();
-      req.setCollectionName(testCollectionName);
-      req.process(cloudClient);
-    } catch (Exception e) {
-      // don't fail the test
-      log.warn("Could not delete collection {} after test completed", testCollectionName);
-    }
+    attemptCollectionDelete(cloudClient, testCollectionName);
 
     log.info("multiShardTest completed OK");
   }
@@ -144,14 +136,7 @@ public class LeaderInitiatedRecoveryOnCommitTest extends BasicDistributedZkTest
     Thread.sleep(sleepMsBeforeHealPartition);
 
     // try to clean up
-    try {
-      CollectionAdminRequest.Delete req = new CollectionAdminRequest.Delete();
-      req.setCollectionName(testCollectionName);
-      req.process(cloudClient);
-    } catch (Exception e) {
-      // don't fail the test
-      log.warn("Could not delete collection {} after test completed", testCollectionName);
-    }
+    attemptCollectionDelete(cloudClient, testCollectionName);
 
     log.info("oneShardTest completed OK");
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/MultiThreadedOCPTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/MultiThreadedOCPTest.java b/solr/core/src/test/org/apache/solr/cloud/MultiThreadedOCPTest.java
index c0f29d2..537dbba 100644
--- a/solr/core/src/test/org/apache/solr/cloud/MultiThreadedOCPTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/MultiThreadedOCPTest.java
@@ -24,6 +24,7 @@ import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
+import org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest.Create;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest.SplitShard;
 import org.apache.solr.client.solrj.request.QueryRequest;
@@ -31,7 +32,6 @@ import org.apache.solr.client.solrj.response.CollectionAdminResponse;
 import org.apache.solr.client.solrj.response.RequestStatusState;
 import org.apache.solr.common.params.CollectionParams;
 import org.apache.solr.common.params.ModifiableSolrParams;
-import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.Utils;
 import org.junit.Test;
 import org.slf4j.Logger;
@@ -116,12 +116,7 @@ public class MultiThreadedOCPTest extends AbstractFullDistribZkTestBase {
   private void testParallelCollectionAPICalls() throws IOException, SolrServerException {
     try (SolrClient client = createNewSolrClient("", getBaseUrl((HttpSolrClient) clients.get(0)))) {
       for(int i = 1 ; i <= NUM_COLLECTIONS ; i++) {
-        new Create()
-                .setCollectionName("ocptest" + i)
-                .setNumShards(4)
-                .setConfigName("conf1")
-                .setAsyncId(String.valueOf(i))
-                .process(client);
+        CollectionAdminRequest.createCollection("ocptest" + i,"conf1",4,1).processAsync(String.valueOf(i), client);
       }
   
       boolean pass = false;
@@ -158,12 +153,8 @@ public class MultiThreadedOCPTest extends AbstractFullDistribZkTestBase {
         "/overseer/collection-queue-work", new Overseer.Stats());
     try (SolrClient client = createNewSolrClient("", getBaseUrl((HttpSolrClient) clients.get(0)))) {
 
-      Create createCollectionRequest = new Create()
-              .setCollectionName("ocptest_shardsplit")
-              .setNumShards(4)
-              .setConfigName("conf1")
-              .setAsyncId("1000");
-      createCollectionRequest.process(client);
+      Create createCollectionRequest = CollectionAdminRequest.createCollection("ocptest_shardsplit","conf1",4,1);
+      createCollectionRequest.processAsync("1000",client);
 
       distributedQueue.offer(Utils.toJSON(Utils.makeMap(
           "collection", "ocptest_shardsplit",
@@ -215,36 +206,21 @@ public class MultiThreadedOCPTest extends AbstractFullDistribZkTestBase {
 
   private void testDeduplicationOfSubmittedTasks() throws IOException, SolrServerException {
     try (SolrClient client = createNewSolrClient("", getBaseUrl((HttpSolrClient) clients.get(0)))) {
-      new Create()
-              .setCollectionName("ocptest_shardsplit2")
-              .setNumShards(4)
-              .setConfigName("conf1")
-              .setAsyncId("3000")
-              .process(client);
+      CollectionAdminRequest.createCollection("ocptest_shardsplit2","conf1",4,1).processAsync("3000",client);
   
-      SplitShard splitShardRequest = new SplitShard()
-              .setCollectionName("ocptest_shardsplit2")
-              .setShardName(SHARD1)
-              .setAsyncId("3001");
-      splitShardRequest.process(client);
-  
-      splitShardRequest = new SplitShard()
-              .setCollectionName("ocptest_shardsplit2")
-              .setShardName(SHARD2)
-              .setAsyncId("3002");
-      splitShardRequest.process(client);
+      SplitShard splitShardRequest = CollectionAdminRequest.splitShard("ocptest_shardsplit2").setShardName(SHARD1);
+      splitShardRequest.processAsync("3001",client);
+      
+      splitShardRequest = CollectionAdminRequest.splitShard("ocptest_shardsplit2").setShardName(SHARD2);
+      splitShardRequest.processAsync("3002",client);
   
       // Now submit another task with the same id. At this time, hopefully the previous 3002 should still be in the queue.
-      splitShardRequest = new SplitShard()
-              .setCollectionName("ocptest_shardsplit2")
-              .setShardName(SHARD1)
-              .setAsyncId("3002");
-      CollectionAdminResponse response = splitShardRequest.process(client);
-  
-      NamedList r = response.getResponse();
-      assertEquals("Duplicate request was supposed to exist but wasn't found. De-duplication of submitted task failed.",
-          "Task with the same requestid already exists.", r.get("error"));
-  
+      expectThrows(SolrServerException.class, () -> {
+          CollectionAdminRequest.splitShard("ocptest_shardsplit2").setShardName(SHARD1).processAsync("3002",client);
+          // more helpful assertion failure
+          fail("Duplicate request was supposed to exist but wasn't found. De-duplication of submitted task failed.");
+        });
+      
       for (int i = 3001; i <= 3002; i++) {
         final RequestStatusState state = getRequestStateAfterCompletion(i + "", REQUEST_STATUS_TIMEOUT, client);
         assertSame("Task " + i + " did not complete, final state: " + state, RequestStatusState.COMPLETED, state);
@@ -271,11 +247,8 @@ public class MultiThreadedOCPTest extends AbstractFullDistribZkTestBase {
     indexThread.start();
     try (SolrClient client = createNewSolrClient("", getBaseUrl((HttpSolrClient) clients.get(0)))) {
 
-      SplitShard splitShardRequest = new SplitShard()
-              .setCollectionName("collection1")
-              .setShardName(SHARD1)
-              .setAsyncId("2000");
-      splitShardRequest.process(client);
+      SplitShard splitShardRequest = CollectionAdminRequest.splitShard("collection1").setShardName(SHARD1);
+      splitShardRequest.processAsync("2000",client);
 
       RequestStatusState state = getRequestState("2000", client);
       while (state ==  RequestStatusState.SUBMITTED) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java
----------------------------------------------------------------------
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 e1af607..ecfd3ee 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java
@@ -65,7 +65,9 @@ public class ReplaceNodeTest extends SolrCloudTestCase {
     String emptyNode = l.remove(0);
     String node2bdecommissioned = l.get(0);
     CollectionAdminRequest.Create create;
-    create = pickRandom(CollectionAdminRequest.createCollection(coll, "conf1", 5, 2),
+    // NOTE: always using the createCollection that takes in 'int' for all types of replicas, so we never
+    // have to worry about null checking when comparing the Create command with the final Slices
+    create = pickRandom(CollectionAdminRequest.createCollection(coll, "conf1", 5, 2,0,0),
                         CollectionAdminRequest.createCollection(coll, "conf1", 5, 1,1,0),
                         CollectionAdminRequest.createCollection(coll, "conf1", 5, 0,1,1),
                         CollectionAdminRequest.createCollection(coll, "conf1", 5, 1,0,1),

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java
----------------------------------------------------------------------
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 abd394a..d0d4f78 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java
@@ -101,9 +101,7 @@ public class ReplicationFactorTest extends AbstractFullDistribZkTestBase {
     CollectionAdminResponse resp = createCollection(testCollectionName, numShards, replicationFactor, maxShardsPerNode);
     
     if (resp.getResponse().get("failure") != null) {
-      CollectionAdminRequest.Delete req = new CollectionAdminRequest.Delete();
-      req.setCollectionName(testCollectionName);
-      req.process(cloudClient);
+      CollectionAdminRequest.deleteCollection(testCollectionName).process(cloudClient);
       
       resp = createCollection(testCollectionName, numShards, replicationFactor, maxShardsPerNode);
       

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/RollingRestartTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/RollingRestartTest.java b/solr/core/src/test/org/apache/solr/cloud/RollingRestartTest.java
index 6a906bb..1458666 100644
--- a/solr/core/src/test/org/apache/solr/cloud/RollingRestartTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/RollingRestartTest.java
@@ -70,7 +70,7 @@ public class RollingRestartTest extends AbstractFullDistribZkTestBase {
       int n = random().nextInt(getShardCount());
       String nodeName = cloudJettys.get(n).nodeName;
       log.info("Chose {} as overseer designate", nodeName);
-      new CollectionAdminRequest.AddRole().setRole("overseer").setNode(nodeName).process(cloudClient);
+      CollectionAdminRequest.addRole(nodeName,"overseer").process(cloudClient);
       designates.add(nodeName);
       designateJettys.add(cloudJettys.get(n));
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/ShardSplitTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/ShardSplitTest.java b/solr/core/src/test/org/apache/solr/cloud/ShardSplitTest.java
index 72f0694..35ac5c0 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ShardSplitTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ShardSplitTest.java
@@ -523,16 +523,12 @@ public class ShardSplitTest extends BasicDistributedZkTest {
 
     log.info("Starting testSplitShardWithRule");
     String collectionName = "shardSplitWithRule";
-    CollectionAdminRequest.Create createRequest = new CollectionAdminRequest.Create()
-        .setCollectionName(collectionName)
-        .setNumShards(1)
-        .setReplicationFactor(2)
+    CollectionAdminRequest.Create createRequest = CollectionAdminRequest.createCollection(collectionName,1,2)
         .setRule("shard:*,replica:<2,node:*");
     CollectionAdminResponse response = createRequest.process(cloudClient);
     assertEquals(0, response.getStatus());
 
-    CollectionAdminRequest.SplitShard splitShardRequest = new CollectionAdminRequest.SplitShard()
-        .setCollectionName(collectionName)
+    CollectionAdminRequest.SplitShard splitShardRequest = CollectionAdminRequest.splitShard(collectionName)
         .setShardName("shard1");
     response = splitShardRequest.process(cloudClient);
     assertEquals(String.valueOf(response.getErrorMessages()), 0, response.getStatus());

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/SharedFSAutoReplicaFailoverTest.java
----------------------------------------------------------------------
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 9c345fd..9c839f6 100644
--- a/solr/core/src/test/org/apache/solr/cloud/SharedFSAutoReplicaFailoverTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/SharedFSAutoReplicaFailoverTest.java
@@ -146,12 +146,8 @@ public class SharedFSAutoReplicaFailoverTest extends AbstractFullDistribZkTestBa
   // serially
   private void testBasics() throws Exception {
     String collection1 = "solrj_collection";
-    Create createCollectionRequest = new Create()
-            .setCollectionName(collection1)
-            .setNumShards(2)
-            .setReplicationFactor(2)
+    Create createCollectionRequest = CollectionAdminRequest.createCollection(collection1,"conf1",2,2)
             .setMaxShardsPerNode(2)
-            .setConfigName("conf1")
             .setRouterField("myOwnField")
             .setAutoAddReplicas(true);
     CollectionAdminResponse response = createCollectionRequest.process(cloudClient);
@@ -161,12 +157,8 @@ public class SharedFSAutoReplicaFailoverTest extends AbstractFullDistribZkTestBa
     waitForRecoveriesToFinish(collection1, false);
     
     String collection2 = "solrj_collection2";
-    createCollectionRequest = new Create()
-            .setCollectionName(collection2)
-            .setNumShards(2)
-            .setReplicationFactor(2)
+    createCollectionRequest = CollectionAdminRequest.createCollection(collection2,"conf1",2,2)
             .setMaxShardsPerNode(2)
-            .setConfigName("conf1")
             .setRouterField("myOwnField")
             .setAutoAddReplicas(false);
     CollectionAdminResponse response2 = createCollectionRequest.process(getCommonCloudSolrClient());
@@ -177,12 +169,8 @@ public class SharedFSAutoReplicaFailoverTest extends AbstractFullDistribZkTestBa
     waitForRecoveriesToFinish(collection2, false);
     
     String collection3 = "solrj_collection3";
-    createCollectionRequest = new Create()
-            .setCollectionName(collection3)
-            .setNumShards(5)
-            .setReplicationFactor(1)
+    createCollectionRequest = CollectionAdminRequest.createCollection(collection3,"conf1",5,1)
             .setMaxShardsPerNode(1)
-            .setConfigName("conf1")
             .setRouterField("myOwnField")
             .setAutoAddReplicas(true);
     CollectionAdminResponse response3 = createCollectionRequest.process(getCommonCloudSolrClient());
@@ -194,12 +182,8 @@ public class SharedFSAutoReplicaFailoverTest extends AbstractFullDistribZkTestBa
 
     // a collection has only 1 replica per a shard
     String collection4 = "solrj_collection4";
-    createCollectionRequest = new Create()
-        .setCollectionName(collection4)
-        .setNumShards(5)
-        .setReplicationFactor(1)
+    createCollectionRequest = CollectionAdminRequest.createCollection(collection4,"conf1",5,1)
         .setMaxShardsPerNode(5)
-        .setConfigName("conf1")
         .setRouterField("text")
         .setAutoAddReplicas(true);
     CollectionAdminResponse response4 = createCollectionRequest.process(getCommonCloudSolrClient());

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/SimpleCollectionCreateDeleteTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/SimpleCollectionCreateDeleteTest.java b/solr/core/src/test/org/apache/solr/cloud/SimpleCollectionCreateDeleteTest.java
index abc0819..3e18ce0 100644
--- a/solr/core/src/test/org/apache/solr/cloud/SimpleCollectionCreateDeleteTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/SimpleCollectionCreateDeleteTest.java
@@ -39,10 +39,7 @@ public class SimpleCollectionCreateDeleteTest extends AbstractFullDistribZkTestB
       }
     }
     String collectionName = "SimpleCollectionCreateDeleteTest";
-    CollectionAdminRequest.Create create = new CollectionAdminRequest.Create()
-            .setCollectionName(collectionName)
-            .setNumShards(1)
-            .setReplicationFactor(1)
+    CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName,1,1)
             .setCreateNodeSet(overseerNode)
             .setStateFormat(2);
 
@@ -51,17 +48,13 @@ public class SimpleCollectionCreateDeleteTest extends AbstractFullDistribZkTestB
     if (request.get("success") != null) {
       assertTrue(cloudClient.getZkStateReader().getZkClient().exists(ZkStateReader.COLLECTIONS_ZKNODE + "/" + collectionName, false));
 
-      CollectionAdminRequest.Delete delete = new CollectionAdminRequest.Delete();
-      delete.setCollectionName(collectionName);
+      CollectionAdminRequest delete = CollectionAdminRequest.deleteCollection(collectionName);
       cloudClient.request(delete);
 
       assertFalse(cloudClient.getZkStateReader().getZkClient().exists(ZkStateReader.COLLECTIONS_ZKNODE + "/" + collectionName, false));
 
       // create collection again on a node other than the overseer leader
-      create = new CollectionAdminRequest.Create()
-              .setCollectionName(collectionName)
-              .setNumShards(1)
-              .setReplicationFactor(1)
+      create = CollectionAdminRequest.createCollection(collectionName,1,1)
               .setCreateNodeSet(notOverseerNode)
               .setStateFormat(2);
       request = create.process(cloudClient).getResponse();

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/TestCollectionAPI.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestCollectionAPI.java b/solr/core/src/test/org/apache/solr/cloud/TestCollectionAPI.java
index 74ad7bd..43b018e 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestCollectionAPI.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestCollectionAPI.java
@@ -185,13 +185,7 @@ public class TestCollectionAPI extends ReplicaPropertiesBase {
     String cname = "clusterStatusZNodeVersion";
     try (CloudSolrClient client = createCloudClient(null)) {
 
-      CollectionAdminRequest.Create create = new CollectionAdminRequest.Create()
-              .setCollectionName(cname)
-              .setMaxShardsPerNode(1)
-              .setNumShards(1)
-              .setReplicationFactor(1)
-              .setConfigName("conf1");
-      create.process(client);
+      CollectionAdminRequest.createCollection(cname,"conf1",1,1).setMaxShardsPerNode(1).process(client);
 
       waitForRecoveriesToFinish(cname, true);
 
@@ -213,9 +207,7 @@ public class TestCollectionAPI extends ReplicaPropertiesBase {
       Integer znodeVersion = (Integer) collection.get("znodeVersion");
       assertNotNull(znodeVersion);
 
-      CollectionAdminRequest.AddReplica addReplica = new CollectionAdminRequest.AddReplica()
-              .setCollectionName(cname)
-              .setShardName("shard1");
+      CollectionAdminRequest.AddReplica addReplica = CollectionAdminRequest.addReplicaToShard(cname, "shard1");
       addReplica.process(client);
 
       waitForRecoveriesToFinish(cname, true);
@@ -628,13 +620,7 @@ public class TestCollectionAPI extends ReplicaPropertiesBase {
     try (CloudSolrClient client = createCloudClient(null)) {
       client.connect();
 
-      new CollectionAdminRequest.Create()
-          .setCollectionName("testClusterStateMigration")
-          .setNumShards(1)
-          .setReplicationFactor(1)
-          .setConfigName("conf1")
-          .setStateFormat(1)
-          .process(client);
+      CollectionAdminRequest.createCollection("testClusterStateMigration","conf1",1,1).setStateFormat(1).process(client);
 
       waitForRecoveriesToFinish("testClusterStateMigration", true);
 
@@ -647,9 +633,7 @@ public class TestCollectionAPI extends ReplicaPropertiesBase {
       }
       client.commit("testClusterStateMigration");
 
-      new CollectionAdminRequest.MigrateClusterState()
-          .setCollectionName("testClusterStateMigration")
-          .process(client);
+      CollectionAdminRequest.migrateCollectionFormat("testClusterStateMigration").process(client);
 
       client.getZkStateReader().forceUpdateCollection("testClusterStateMigration");
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/TestRandomRequestDistribution.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestRandomRequestDistribution.java b/solr/core/src/test/org/apache/solr/cloud/TestRandomRequestDistribution.java
index d7b9d8a..b486256 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestRandomRequestDistribution.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestRandomRequestDistribution.java
@@ -73,17 +73,11 @@ public class TestRandomRequestDistribution extends AbstractFullDistribZkTestBase
    */
   private void testRequestTracking() throws Exception {
 
-    new CollectionAdminRequest.Create()
-        .setCollectionName("a1x2")
-        .setNumShards(1)
-        .setReplicationFactor(2)
+    CollectionAdminRequest.createCollection("a1x2",1,2)
         .setCreateNodeSet(nodeNames.get(0) + ',' + nodeNames.get(1))
         .process(cloudClient);
 
-    new CollectionAdminRequest.Create()
-        .setCollectionName("b1x1")
-        .setNumShards(1)
-        .setReplicationFactor(1)
+    CollectionAdminRequest.createCollection("b1x1",1,1)
         .setCreateNodeSet(nodeNames.get(2))
         .process(cloudClient);
 
@@ -134,10 +128,7 @@ public class TestRandomRequestDistribution extends AbstractFullDistribZkTestBase
   private void testQueryAgainstDownReplica() throws Exception {
 
     log.info("Creating collection 'football' with 1 shard and 2 replicas");
-    new CollectionAdminRequest.Create()
-        .setCollectionName("football")
-        .setNumShards(1)
-        .setReplicationFactor(2)
+    CollectionAdminRequest.createCollection("football",1,2)
         .setCreateNodeSet(nodeNames.get(0) + ',' + nodeNames.get(1))
         .process(cloudClient);
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/TestRequestForwarding.java
----------------------------------------------------------------------
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 8d85bf6..febbe33 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestRequestForwarding.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestRequestForwarding.java
@@ -72,11 +72,7 @@ public class TestRequestForwarding extends SolrTestCaseJ4 {
 
   private void createCollection(String name, String config) throws Exception {
     CollectionAdminResponse response;
-    CollectionAdminRequest.Create create = new CollectionAdminRequest.Create();
-    create.setConfigName(config);
-    create.setCollectionName(name);
-    create.setNumShards(2);
-    create.setReplicationFactor(1);
+    CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(name,config,2,1);
     create.setMaxShardsPerNode(1);
     response = create.process(solrCluster.getSolrClient());
     

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java
----------------------------------------------------------------------
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 d856011..042c111 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java
@@ -174,10 +174,7 @@ public class TestSolrCloudWithKerberosAlt extends LuceneTestCase {
       String configName = "solrCloudCollectionConfig";
       miniCluster.uploadConfigSet(SolrTestCaseJ4.TEST_PATH().resolve("collection1/conf"), configName);
 
-      CollectionAdminRequest.Create createRequest = new CollectionAdminRequest.Create();
-      createRequest.setCollectionName(collectionName);
-      createRequest.setNumShards(NUM_SHARDS);
-      createRequest.setReplicationFactor(REPLICATION_FACTOR);
+      CollectionAdminRequest.Create createRequest = CollectionAdminRequest.createCollection(collectionName,NUM_SHARDS,REPLICATION_FACTOR);
       Properties properties = new Properties();
       properties.put(CoreDescriptor.CORE_CONFIG, "solrconfig-tlog.xml");
       properties.put("solr.tests.maxBufferedDocs", "100000");
@@ -216,9 +213,7 @@ public class TestSolrCloudWithKerberosAlt extends LuceneTestCase {
         assertEquals(1, rsp.getResults().getNumFound());
         
         // delete the collection we created earlier
-        CollectionAdminRequest.Delete deleteRequest = new CollectionAdminRequest.Delete();
-        deleteRequest.setCollectionName(collectionName);
-        deleteRequest.process(cloudSolrClient);
+        CollectionAdminRequest.deleteCollection(collectionName).process(cloudSolrClient);
         
         AbstractDistribZkTestBase.waitForCollectionToDisappear(collectionName, zkStateReader, true, true, 330);
       }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithSecureImpersonation.java
----------------------------------------------------------------------
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 d2f7873..184cd90 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithSecureImpersonation.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithSecureImpersonation.java
@@ -173,7 +173,7 @@ public class TestSolrCloudWithSecureImpersonation extends SolrTestCaseJ4 {
 
   private void create1ShardCollection(String name, String config, MiniSolrCloudCluster solrCluster) throws Exception {
     CollectionAdminResponse response;
-    CollectionAdminRequest.Create create = new CollectionAdminRequest.Create() {
+    CollectionAdminRequest.Create create = new CollectionAdminRequest.Create(name,config,1,1,0,0) {
       @Override
       public SolrParams getParams() {
         ModifiableSolrParams msp = new ModifiableSolrParams(super.getParams());
@@ -181,10 +181,6 @@ public class TestSolrCloudWithSecureImpersonation extends SolrTestCaseJ4 {
         return msp;
       }
     };
-    create.setConfigName(config);
-    create.setCollectionName(name);
-    create.setNumShards(1);
-    create.setReplicationFactor(1);
     create.setMaxShardsPerNode(1);
     response = create.process(solrCluster.getSolrClient());
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java b/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java
index c395d20..737e16e 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java
@@ -62,10 +62,7 @@ public class TestBlobHandler extends AbstractFullDistribZkTestBase {
 
     try (SolrClient client = createNewSolrClient("", getBaseUrl((HttpSolrClient) clients.get(0)))) {
       CollectionAdminResponse response1;
-      CollectionAdminRequest.Create createCollectionRequest = new CollectionAdminRequest.Create()
-              .setCollectionName(".system")
-              .setNumShards(1)
-              .setReplicationFactor(2);
+      CollectionAdminRequest.Create createCollectionRequest = CollectionAdminRequest.createCollection(".system",1,2);
       response1 = createCollectionRequest.process(client);
       assertEquals(0, response1.getStatus());
       assertTrue(response1.isSuccess());
@@ -119,10 +116,7 @@ public class TestBlobHandler extends AbstractFullDistribZkTestBase {
 
   public static void createSystemCollection(SolrClient client) throws SolrServerException, IOException {
     CollectionAdminResponse response1;
-    CollectionAdminRequest.Create createCollectionRequest = new CollectionAdminRequest.Create()
-            .setCollectionName(".system")
-            .setNumShards(1)
-            .setReplicationFactor(2);
+    CollectionAdminRequest.Create createCollectionRequest = CollectionAdminRequest.createCollection(".system",1,2);
     response1 = createCollectionRequest.process(client);
     assertEquals(0, response1.getStatus());
     assertTrue(response1.isSuccess());

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ee33f38b/solr/core/src/test/org/apache/solr/search/stats/TestDistribIDF.java
----------------------------------------------------------------------
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 f3bcc16..c355932 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
@@ -196,20 +196,11 @@ public class TestDistribIDF extends SolrTestCaseJ4 {
   private void createCollection(String name, String config, String router) throws Exception {
     CollectionAdminResponse response;
     if (router.equals(ImplicitDocRouter.NAME)) {
-      CollectionAdminRequest.Create create = new CollectionAdminRequest.Create();
-      create.setConfigName(config);
-      create.setCollectionName(name);
-      create.setReplicationFactor(1);
+      CollectionAdminRequest.Create create = CollectionAdminRequest.createCollectionWithImplicitRouter(name,config,"a,b,c",1);
       create.setMaxShardsPerNode(1);
-      create.setRouterName(router);
-      create.setShards("a,b,c");
       response = create.process(solrCluster.getSolrClient());
     } else {
-      CollectionAdminRequest.Create create = new CollectionAdminRequest.Create();
-      create.setConfigName(config);
-      create.setCollectionName(name);
-      create.setNumShards(2);
-      create.setReplicationFactor(1);
+      CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(name,config,2,1);
       create.setMaxShardsPerNode(1);
       response = create.process(solrCluster.getSolrClient());
     }