You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2015/06/15 14:39:15 UTC
svn commit: r1685572 - in /lucene/dev/branches/branch_5x: ./ solr/
solr/CHANGES.txt solr/core/
solr/core/src/java/org/apache/solr/cloud/rule/ImplicitSnitch.java
solr/core/src/test/org/apache/solr/cloud/rule/RulesTest.java
Author: noble
Date: Mon Jun 15 12:39:15 2015
New Revision: 1685572
URL: http://svn.apache.org/r1685572
Log:
SOLR-7668: Add 'port' tag support in replica placement rules
Modified:
lucene/dev/branches/branch_5x/ (props changed)
lucene/dev/branches/branch_5x/solr/ (props changed)
lucene/dev/branches/branch_5x/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_5x/solr/core/ (props changed)
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/rule/ImplicitSnitch.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/rule/RulesTest.java
Modified: lucene/dev/branches/branch_5x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/CHANGES.txt?rev=1685572&r1=1685571&r2=1685572&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/solr/CHANGES.txt Mon Jun 15 12:39:15 2015
@@ -62,6 +62,8 @@ New Features
authors:{ type:terms, field:author, domain:{toParent:"type:book"} }
(yonik)
+* SOLR-7668: Add 'port' tag support in replica placement rules (Adam McElwee, Noble Paul)
+
Bug Fixes
----------------------
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/rule/ImplicitSnitch.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/rule/ImplicitSnitch.java?rev=1685572&r1=1685571&r2=1685572&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/rule/ImplicitSnitch.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/rule/ImplicitSnitch.java Mon Jun 15 12:39:15 2015
@@ -24,6 +24,8 @@ import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import com.google.common.collect.ImmutableSet;
import org.apache.solr.common.params.ModifiableSolrParams;
@@ -36,6 +38,8 @@ import org.slf4j.LoggerFactory;
public class ImplicitSnitch extends Snitch implements CoreAdminHandler.Invocable {
static final Logger log = LoggerFactory.getLogger(ImplicitSnitch.class);
+ public static final Pattern hostAndPortPattern = Pattern.compile("(?:https?://)?([^:]+):(\\d+)");
+
//well known tags
public static final String NODE = "node";
public static final String PORT = "port";
@@ -50,7 +54,14 @@ public class ImplicitSnitch extends Snit
@Override
public void getTags(String solrNode, Set<String> requestedTags, SnitchContext ctx) {
if (requestedTags.contains(NODE)) ctx.getTags().put(NODE, solrNode);
- if (requestedTags.contains(HOST)) ctx.getTags().put(HOST, solrNode.substring(0, solrNode.indexOf(':')));
+ if (requestedTags.contains(HOST)) {
+ Matcher hostAndPortMatcher = hostAndPortPattern.matcher(solrNode);
+ if (hostAndPortMatcher.find()) ctx.getTags().put(HOST, hostAndPortMatcher.group(1));
+ }
+ if (requestedTags.contains(PORT)) {
+ Matcher hostAndPortMatcher = hostAndPortPattern.matcher(solrNode);
+ if (hostAndPortMatcher.find()) ctx.getTags().put(PORT, hostAndPortMatcher.group(2));
+ }
ModifiableSolrParams params = new ModifiableSolrParams();
if (requestedTags.contains(CORES)) params.add(CORES, "1");
if (requestedTags.contains(DISK)) params.add(DISK, "1");
Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/rule/RulesTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/rule/RulesTest.java?rev=1685572&r1=1685571&r2=1685572&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/rule/RulesTest.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/rule/RulesTest.java Mon Jun 15 12:39:15 2015
@@ -19,20 +19,19 @@ package org.apache.solr.cloud.rule;
import java.util.List;
import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.apache.solr.client.solrj.SolrClient;
-import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.request.GenericSolrRequest;
import org.apache.solr.client.solrj.response.CollectionAdminResponse;
import org.apache.solr.cloud.AbstractFullDistribZkTestBase;
-import org.apache.solr.cloud.OverseerCollectionProcessor;
import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.common.cloud.ImplicitDocRouter;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.ModifiableSolrParams;
-import org.apache.solr.core.CoreContainer;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -84,7 +83,7 @@ public class RulesTest extends AbstractF
CollectionAdminRequest.AddReplica addReplica = new CollectionAdminRequest.AddReplica()
.setCollectionName(rulesColl)
.setShardName("shard2");
- rsp = createShard.process(client);
+ rsp = addReplica.process(client);
assertEquals(0, rsp.getStatus());
assertTrue(rsp.isSuccess());
}
@@ -93,6 +92,39 @@ public class RulesTest extends AbstractF
}
@Test
+ public void testPortRule() throws Exception {
+ String rulesColl = "portRuleColl";
+ String baseUrl = getBaseUrl((HttpSolrClient) clients.get(0));
+ String port = "-1";
+ Matcher hostAndPortMatcher = Pattern.compile("(?:https?://)?([^:]+):(\\d+)").matcher(baseUrl);
+ if (hostAndPortMatcher.find()) {
+ port = hostAndPortMatcher.group(2);
+ }
+ try (SolrClient client = createNewSolrClient("", baseUrl)) {
+ CollectionAdminResponse rsp;
+ CollectionAdminRequest.Create create = new CollectionAdminRequest.Create();
+ create.setCollectionName(rulesColl);
+ create.setShards("shard1");
+ create.setRouterName(ImplicitDocRouter.NAME);
+ create.setReplicationFactor(2);
+ create.setRule("port:" + port);
+ create.setSnitch("class:ImplicitSnitch");
+ rsp = create.process(client);
+ assertEquals(0, rsp.getStatus());
+ assertTrue(rsp.isSuccess());
+
+ }
+
+ DocCollection rulesCollection = cloudClient.getZkStateReader().getClusterState().getCollection(rulesColl);
+ List list = (List) rulesCollection.get("rule");
+ assertEquals(1, list.size());
+ assertEquals(port, ((Map) list.get(0)).get("port"));
+ list = (List) rulesCollection.get("snitch");
+ assertEquals(1, list.size());
+ assertEquals ( "ImplicitSnitch", ((Map)list.get(0)).get("class"));
+ }
+
+ @Test
public void testModifyColl() throws Exception {
String rulesColl = "modifyColl";
try (SolrClient client = createNewSolrClient("", getBaseUrl((HttpSolrClient) clients.get(0)))) {
@@ -138,7 +170,4 @@ public class RulesTest extends AbstractF
assertEquals("ImplicitSnitch", ((Map) list.get(0)).get("class"));
}
}
-
-
-
}