You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by gu...@apache.org on 2019/02/19 14:53:42 UTC

[lucene-solr] 05/09: SOLR-13150: ensure required params are supplied only on createalias

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

gus pushed a commit to branch solr-13131
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 5b636f636425ae6f4e36ab250f28655b44732809
Author: internet <in...@localhost.localdomain>
AuthorDate: Mon Feb 18 16:27:48 2019 +0200

    SOLR-13150: ensure required params are supplied only on createalias
---
 .../cloud/api/collections/CategoryRoutedAlias.java |  3 ++-
 .../solr/cloud/api/collections/CreateAliasCmd.java |  6 ++++++
 .../solr/handler/admin/CollectionsHandler.java     |  4 ----
 .../CategoryRoutedAliasUpdateProcessorTest.java    | 24 +++++++++++++++++++++-
 4 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/CategoryRoutedAlias.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/CategoryRoutedAlias.java
index 88b68ea..0c98562 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/CategoryRoutedAlias.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/CategoryRoutedAlias.java
@@ -128,7 +128,8 @@ public class CategoryRoutedAlias implements RoutedAlias {
 
     if (cols.stream()
         .filter(x -> !x.contains(UNINITIALIZED)).count() >= Integer.valueOf(maxCardinality)) {
-      throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "max cardinality can not be exceeded for a Category Routed Alias: " + maxCardinality);
+      throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Max cardinality " + maxCardinality
+          + " reached for Category Routed Alias: " + getAliasName());
     }
   }
 
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateAliasCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateAliasCmd.java
index 0e41baf..641c4ad 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateAliasCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateAliasCmd.java
@@ -26,6 +26,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.google.common.collect.Sets;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.cloud.ZkNodeProps;
@@ -117,6 +118,11 @@ public class CreateAliasCmd extends AliasCmd {
       throw new SolrException(SERVER_ERROR,"Tried to create a routed alias with no type!");
     }
 
+    if (!props.keySet().containsAll(routedAlias.getRequiredParams())) {
+      throw new SolrException(BAD_REQUEST, "Not all required params were supplied. Missing params: " +
+          StrUtils.join(Sets.difference(routedAlias.getRequiredParams(), props.keySet()), ','));
+    }
+
     // Create the first collection.
     String initialColl = routedAlias.computeInitialCollectionName();
       ensureAliasCollection(aliasName, zkStateReader, state, routedAlias.getAliasMetadata(), initialColl);
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 293f731..f1f9a27 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
@@ -584,10 +584,6 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
 
       // Now filter out just the parameters we care about from the request
       Map<String, Object> result = copy(req.getParams(), null, routedAlias.getRequiredParams());
-      if (!result.keySet().containsAll(routedAlias.getRequiredParams())) {
-        throw new SolrException(BAD_REQUEST, "Not all required params were supplied. Missing params: " +
-            StrUtils.join(Sets.difference(routedAlias.getRequiredParams(), result.keySet()), ','));
-      }
       copy(req.getParams(), result, routedAlias.getOptionalParams());
 
       ModifiableSolrParams createCollParams = new ModifiableSolrParams(); // without prefix
diff --git a/solr/core/src/test/org/apache/solr/update/processor/CategoryRoutedAliasUpdateProcessorTest.java b/solr/core/src/test/org/apache/solr/update/processor/CategoryRoutedAliasUpdateProcessorTest.java
index ee7fbb5..8607a52 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/CategoryRoutedAliasUpdateProcessorTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/CategoryRoutedAliasUpdateProcessorTest.java
@@ -221,6 +221,28 @@ public class CategoryRoutedAliasUpdateProcessorTest extends RoutedAliasUpdatePro
   }
   @Slow
   @Test
+  public void testMissingRequiredParams() throws Exception {
+    String configName = getSaferTestName();
+    createConfigSet(configName);
+
+    List<String> retrievedConfigSetNames = new ConfigSetAdminRequest.List().process(solrClient).getConfigSets();
+    List<String> expectedConfigSetNames = Arrays.asList("_default", configName);
+
+    // config sets leak between tests so we can't be any more specific than this on the next 2 asserts
+    assertTrue("We expect at least 2 configSets",
+        retrievedConfigSetNames.size() >= expectedConfigSetNames.size());
+    assertTrue("ConfigNames should include :" + expectedConfigSetNames, retrievedConfigSetNames.containsAll(expectedConfigSetNames));
+
+    SolrException e = expectThrows(SolrException.class, () ->CollectionAdminRequest.createCategoryRoutedAlias(getAlias(), categoryField,
+        CollectionAdminRequest.createCollection("_unused_", configName, 1, 1)
+            .setMaxShardsPerNode(2))
+        .process(solrClient)
+    );
+    assertTrue("Create Alias should fail since not all required params were supplied", e.getMessage().contains("Not all required params were supplied"));
+  }
+
+  @Slow
+  @Test
   public void testMaxCardinality() throws Exception {
     String configName = getSaferTestName();
     createConfigSet(configName);
@@ -259,7 +281,7 @@ public class CategoryRoutedAliasUpdateProcessorTest extends RoutedAliasUpdatePro
     assertInvariants(colVogon, colHoG);
 
     // should fail since max cardinality is reached
-    testFailedDocument(newDoc(SHIPS[2]), "max cardinality can not be exceeded for a Category Routed Alias");
+    testFailedDocument(newDoc(SHIPS[2]), "Max cardinality");
     assertInvariants(colVogon, colHoG);
   }