diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java index 74fac04c482..44cbd6787e7 100644 --- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java @@ -22,23 +22,18 @@ import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.function.Consumer; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrRequest; import org.apache.solr.client.solrj.SolrResponse; 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.V2Request; import org.apache.solr.client.solrj.response.CollectionAdminResponse; import org.apache.solr.cloud.SolrCloudTestCase; -import org.apache.solr.common.cloud.DocCollection; -import org.apache.solr.common.cloud.Replica; import org.apache.solr.common.cloud.ZkNodeProps; -import org.apache.solr.common.cloud.ZkStateReader; import org.apache.solr.common.params.SolrParams; import org.apache.solr.common.util.ContentStream; import org.apache.solr.common.util.ContentStreamBase; @@ -302,31 +297,8 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase { } } - public void testCreateCollectionAddShardUsingPolicy() throws Exception { - JettySolrRunner jetty = cluster.getRandomJetty(random()); - int port = jetty.getLocalPort(); - String commands = "{set-policy :{c1 : [{replica:1 , shard:'#EACH', port: 'REPLACEPORT'}]}}".replace("REPLACEPORT",String.valueOf(port)); - Utils.fromJSONString(commands); - cluster.getSolrClient().request(createAutoScalingRequest(SolrRequest.METHOD.POST, commands)); - Map json = cluster.getZkClient().getJson(ZkStateReader.SOLR_AUTOSCALING_CONF_PATH, true); - assertEquals("full json:"+ Utils.toJSONString(json) , "#EACH", - Utils.getObjectByPath(json, true, "/policies/c1[0]/shard")); - CollectionAdminRequest.createCollectionWithImplicitRouter("policiesTest", null, "s1,s2", 1) - .setPolicy("c1") - .process(cluster.getSolrClient()); - - DocCollection coll = getCollectionState("policiesTest"); - assertEquals("c1", coll.getPolicyName()); - assertEquals(2,coll.getReplicas().size()); - coll.forEachReplica((s, replica) -> assertEquals(jetty.getNodeName(), replica.getNodeName())); - CollectionAdminRequest.createShard("policiesTest", "s3").process(cluster.getSolrClient()); - coll = getCollectionState("policiesTest"); - assertEquals(1, coll.getSlice("s3").getReplicas().size()); - coll.getSlice("s3").forEach(replica -> assertEquals(jetty.getNodeName(), replica.getNodeName())); - } - - static SolrRequest createAutoScalingRequest(SolrRequest.METHOD m, String message) { + public static SolrRequest createAutoScalingRequest(SolrRequest.METHOD m, String message) { return createAutoScalingRequest(m, null, message); } diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java index 731a83d9da6..27655e68b8c 100644 --- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java +++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java @@ -18,17 +18,21 @@ package org.apache.solr.cloud.autoscaling; import java.io.IOException; import java.lang.invoke.MethodHandles; +import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Map; import org.apache.lucene.util.LuceneTestCase; +import org.apache.solr.client.solrj.SolrRequest; import org.apache.solr.client.solrj.SolrServerException; +import org.apache.solr.client.solrj.embedded.JettySolrRunner; import org.apache.solr.client.solrj.impl.SolrClientDataProvider; import org.apache.solr.client.solrj.request.CollectionAdminRequest; import org.apache.solr.cloud.OverseerTaskProcessor; import org.apache.solr.cloud.SolrCloudTestCase; import org.apache.solr.common.cloud.DocCollection; import org.apache.solr.common.cloud.ZkStateReader; +import org.apache.solr.common.util.Utils; import org.apache.zookeeper.KeeperException; import org.junit.After; import org.junit.BeforeClass; @@ -54,7 +58,31 @@ public class TestPolicyCloud extends SolrCloudTestCase { public void removeCollections() throws Exception { cluster.deleteAllCollections(); } + public void testCreateCollectionAddShardUsingPolicy() throws Exception { + JettySolrRunner jetty = cluster.getRandomJetty(random()); + int port = jetty.getLocalPort(); + String commands = "{set-policy :{c1 : [{replica:1 , shard:'#EACH', port: 'REPLACEPORT'}]}}".replace("REPLACEPORT",String.valueOf(port)); + Utils.fromJSONString(commands); + cluster.getSolrClient().request(AutoScalingHandlerTest.createAutoScalingRequest(SolrRequest.METHOD.POST, commands)); + Map json = cluster.getZkClient().getJson(ZkStateReader.SOLR_AUTOSCALING_CONF_PATH, true); + assertEquals("full json:"+ Utils.toJSONString(json) , "#EACH", + Utils.getObjectByPath(json, true, "/policies/c1[0]/shard")); + CollectionAdminRequest.createCollectionWithImplicitRouter("policiesTest", null, "s1,s2", 1) + .setPolicy("c1") + .process(cluster.getSolrClient()); + + DocCollection coll = getCollectionState("policiesTest"); + assertEquals("c1", coll.getPolicyName()); + assertEquals(2,coll.getReplicas().size()); + coll.forEachReplica((s, replica) -> assertEquals(jetty.getNodeName(), replica.getNodeName())); + CollectionAdminRequest.createShard("policiesTest", "s3").process(cluster.getSolrClient()); + coll = getCollectionState("policiesTest"); + assertEquals(1, coll.getSlice("s3").getReplicas().size()); + coll.getSlice("s3").forEach(replica -> assertEquals(jetty.getNodeName(), replica.getNodeName())); + cluster.getSolrClient().getZkStateReader().getZkClient().setData(ZkStateReader.SOLR_AUTOSCALING_CONF_PATH, + "{}".getBytes(StandardCharsets.UTF_8), true); + } public void testDataProvider() throws IOException, SolrServerException, KeeperException, InterruptedException { CollectionAdminRequest.createCollectionWithImplicitRouter("policiesTest", "conf", "shard1", 2) diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Policy.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Policy.java index d753092e559..fce91470450 100644 --- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Policy.java +++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Policy.java @@ -101,27 +101,13 @@ public class Policy implements MapWriter { this.policies.put(s, l1.stream() .map(Clause::new) .filter(clause -> { + if (!clause.isPerCollectiontag()) + throw new RuntimeException(clause.globalTag.name + " is only allowed in 'cluster-policy'"); clause.addTags(params); return true; }) .sorted() .collect(toList()))); - - this.policies.forEach((s, c) -> { - for (Clause clause : c) { - if (!clause.isPerCollectiontag()) - throw new RuntimeException(clause.globalTag.name + " is only allowed in 'cluster-policy'"); - } - }); - - - - clusterPolicy.stream().forEach(new Consumer() { - @Override - public void accept(Clause clause) { - clause.addTags(params); - } - }); } public List getClusterPolicy() {