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