You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ds...@apache.org on 2016/04/14 07:37:47 UTC

[6/7] lucene-solr:solr-5750: Pass some collection creation options through via restore as well.

Pass some collection creation options through via restore as well.


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

Branch: refs/heads/solr-5750
Commit: 7e80651a473f93f98e26b951e855d198188610e5
Parents: e8e0b0d
Author: David Smiley <ds...@apache.org>
Authored: Thu Apr 14 01:33:46 2016 -0400
Committer: David Smiley <ds...@apache.org>
Committed: Thu Apr 14 01:33:46 2016 -0400

----------------------------------------------------------------------
 .../solr/handler/admin/CollectionsHandler.java  |  5 ++-
 .../solrj/request/CollectionAdminRequest.java   | 35 +++++++++++++++++---
 2 files changed, 34 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/7e80651a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
index 4e9bf32..eaad48f 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
@@ -811,7 +811,7 @@ public class CollectionsHandler extends RequestHandlerBase {
       Map<String, Object> call(SolrQueryRequest req, SolrQueryResponse rsp, CollectionsHandler h) throws Exception {
         req.getParams().required().check(NAME, COLLECTION_PROP);
 
-        String collectionName = req.getParams().get(COLLECTION_PROP);
+        String collectionName = SolrIdentifierValidator.validateCollectionName(req.getParams().get(COLLECTION_PROP));
         ClusterState clusterState = h.coreContainer.getZkController().getClusterState();
         //We always want to restore into an collection name which doesn't  exist yet.
         if (clusterState.hasCollection(collectionName)) {
@@ -828,6 +828,9 @@ public class CollectionsHandler extends RequestHandlerBase {
 
         Map<String, Object> params = req.getParams().getAll(null, NAME, COLLECTION_PROP);
         params.put("location", location);
+        // from CREATE_OP:
+        req.getParams().getAll(params, COLL_CONF, REPLICATION_FACTOR, MAX_SHARDS_PER_NODE, STATE_FORMAT, AUTO_ADD_REPLICAS);
+        copyPropertiesWithPrefix(req.getParams(), params, COLL_PROP_PREFIX);
         return params;
       }
     };

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/7e80651a/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 c18900b..5fe2e1c 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
@@ -581,12 +581,13 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
 
   // RESTORE request
   public static class Restore extends AsyncCollectionSpecificAdminRequest {
-    protected final String name;
+    protected final String backupName;
     protected String location;
+    protected Create createOptions;//lazy created
 
-    public Restore(String collection, String name) {
+    public Restore(String collection, String backupName) {
       super(CollectionAction.RESTORE, collection);
-      this.name = name;
+      this.backupName = backupName;
     }
 
     @Override
@@ -610,11 +611,35 @@ public abstract class CollectionAdminRequest<T extends CollectionAdminResponse>
       return this;
     }
 
+    /** The returned create command is used as a POJO to pass additional parameters -- restoring a collection involves
+     * creating a collection.  However, note some options aren't supported like numShards and configuring the router.
+     */
+    // note: it was either this (hack?) or we extend Create which would be weird/hack, or we verbosely duplicate lots of
+    //   POJO methods, or we perhaps modify the base class to have an addParam() but we loose typed/documented options.
+    //   nocommit but unfortunately, setConfigName & setReplicationFactor are deprecated. Now what?
+    public Create getCreateOptions() {
+      if (createOptions == null) {
+        createOptions = new Create(collection, null, -1, -1);
+      }
+      return createOptions;
+    }
+
     @Override
     public SolrParams getParams() {
-      ModifiableSolrParams params = (ModifiableSolrParams) super.getParams();
+      ModifiableSolrParams params;
+      if (createOptions != null) {
+        params = (ModifiableSolrParams) createOptions.getParams();
+        // remove these two settings that create() made us set (unless customized)
+        if ("-1".equals(params.get("replicationFactor"))) {
+          params.remove("replicationFactor");
+        }
+        params.remove("numShards"); // not customizable
+        params.add(super.getParams());//override action, and we override some below too...
+      } else {
+        params = (ModifiableSolrParams) super.getParams();
+      }
       params.set(CoreAdminParams.COLLECTION, collection);
-      params.set(CoreAdminParams.NAME, name);
+      params.set(CoreAdminParams.NAME, backupName);
       params.set("location", location); //note: optional
       return params;
     }