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);
}