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 2017/05/29 05:19:37 UTC

lucene-solr:feature/autoscaling: added testcase for nodeRole

Repository: lucene-solr
Updated Branches:
  refs/heads/feature/autoscaling b1ce4d3b8 -> 4638488ff


added testcase for nodeRole


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/4638488f
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/4638488f
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/4638488f

Branch: refs/heads/feature/autoscaling
Commit: 4638488ff9305636cb3e90b0be0b8a6b8e61a9ff
Parents: b1ce4d3
Author: Noble Paul <no...@apache.org>
Authored: Mon May 29 14:49:29 2017 +0930
Committer: Noble Paul <no...@apache.org>
Committed: Mon May 29 14:49:29 2017 +0930

----------------------------------------------------------------------
 .../solr/cloud/autoscaling/TestPolicyCloud.java | 24 ++++++++++++++++----
 .../solrj/impl/SolrClientDataProvider.java      |  4 +---
 .../apache/solr/common/cloud/SolrZkClient.java  |  7 +++++-
 .../solr/common/cloud/rule/ImplicitSnitch.java  |  7 +++---
 4 files changed, 30 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4638488f/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java
----------------------------------------------------------------------
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 b1abdec..7520d9a 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
@@ -25,9 +25,13 @@ import org.apache.lucene.util.LuceneTestCase;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.SolrClientDataProvider;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
+import org.apache.solr.cloud.OverseerNodePrioritizer;
+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;
 import org.junit.rules.ExpectedException;
@@ -55,20 +59,30 @@ public class TestPolicyCloud extends SolrCloudTestCase {
   }
 
 
-  public void testDataProvider() throws IOException, SolrServerException {
+  public void testDataProvider() throws IOException, SolrServerException, KeeperException, InterruptedException {
     CollectionAdminRequest.createCollectionWithImplicitRouter("policiesTest", "conf", "shard1", 2)
         .process(cluster.getSolrClient());
     DocCollection rulesCollection = getCollectionState("policiesTest");
     SolrClientDataProvider provider = new SolrClientDataProvider(cluster.getSolrClient());
-
     Map<String, Object> val = provider.getNodeValues(rulesCollection.getReplicas().get(0).getNodeName(), Arrays.asList(
         "freedisk",
         "cores",
         "heapUsage",
         "sysLoadAvg"));
     assertTrue(((Number) val.get("cores")).intValue() > 0);
-    assertTrue("freedisk value is "+((Number) val.get("freedisk")).longValue() , ((Number) val.get("freedisk")).longValue() > 0);
-    assertTrue("heapUsage value is "+((Number) val.get("heapUsage")).longValue() , ((Number) val.get("heapUsage")).longValue() > 0);
-    assertTrue("sysLoadAvg value is "+((Number) val.get("sysLoadAvg")).longValue() , ((Number) val.get("sysLoadAvg")).longValue() > 0);
+    assertTrue("freedisk value is " + ((Number) val.get("freedisk")).longValue(), ((Number) val.get("freedisk")).longValue() > 0);
+    assertTrue("heapUsage value is " + ((Number) val.get("heapUsage")).longValue(), ((Number) val.get("heapUsage")).longValue() > 0);
+    assertTrue("sysLoadAvg value is " + ((Number) val.get("sysLoadAvg")).longValue(), ((Number) val.get("sysLoadAvg")).longValue() > 0);
+    String overseerNode = OverseerTaskProcessor.getLeaderNode(cluster.getZkClient());
+    cluster.getSolrClient().request(CollectionAdminRequest.addRole(overseerNode, "overseer"));
+    for (int i = 0; i < 10; i++) {
+      Map<String, Object> data = cluster.getSolrClient().getZkStateReader().getZkClient().getJson(ZkStateReader.ROLES, true);
+      if (i >= 9 && data == null) {
+        throw new RuntimeException("NO overseer node created");
+      }
+      Thread.sleep(100);
+    }
+    val = provider.getNodeValues(overseerNode, Arrays.asList("nodeRole"));
+    assertEquals("overseer",val.get("nodeRole"));
   }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4638488f/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientDataProvider.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientDataProvider.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientDataProvider.java
index 41f9cfc..6a49f69 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientDataProvider.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientDataProvider.java
@@ -95,7 +95,7 @@ public class SolrClientDataProvider implements ClusterDataProvider, MapWriter {
   public Map<String, Object> getNodeValues(String node, Collection<String> tags) {
     AutoScalingSnitch  snitch = new AutoScalingSnitch();
     ClientSnitchCtx ctx = new ClientSnitchCtx(null, node, snitchSession, solrClient);
-    snitch.getRemoteInfo(node, new HashSet<>(tags), ctx);
+    snitch.getTags(node, new HashSet<>(tags), ctx);
     nodeVsTags.put(node, ctx.getTags());
     return ctx.getTags();
   }
@@ -162,8 +162,6 @@ public class SolrClientDataProvider implements ClusterDataProvider, MapWriter {
 
   //uses metrics API to get node information
   static class AutoScalingSnitch extends ImplicitSnitch {
-
-
     @Override
     protected void getRemoteInfo(String solrNode, Set<String> requestedTags, SnitchContext ctx) {
       ClientSnitchCtx snitchContext = (ClientSnitchCtx) ctx;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4638488f/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java b/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
index e25bc1d..aecfc3e 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
@@ -364,7 +364,12 @@ public class SolrZkClient implements Closeable {
   }
 
   public Map<String, Object> getJson(String path, boolean retryOnConnLoss) throws KeeperException, InterruptedException {
-    byte[] bytes = getData(path, null, null, retryOnConnLoss);
+    byte[] bytes = null;
+    try {
+      bytes = getData(path, null, null, retryOnConnLoss);
+    } catch (KeeperException.NoNodeException e) {
+      return null;
+    }
     if (bytes != null && bytes.length > 0) {
       return (Map<String, Object>) Utils.fromJSON(bytes);
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4638488f/solr/solrj/src/java/org/apache/solr/common/cloud/rule/ImplicitSnitch.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/rule/ImplicitSnitch.java b/solr/solrj/src/java/org/apache/solr/common/cloud/rule/ImplicitSnitch.java
index 8e596dc..a2af163 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/rule/ImplicitSnitch.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/rule/ImplicitSnitch.java
@@ -64,7 +64,8 @@ public class ImplicitSnitch extends Snitch {
       Matcher hostAndPortMatcher = hostAndPortPattern.matcher(solrNode);
       if (hostAndPortMatcher.find()) ctx.getTags().put(PORT, hostAndPortMatcher.group(2));
     }
-    if (requestedTags.contains(ROLE) || requestedTags.contains(NODEROLE)) fillRole(solrNode, ctx);
+    if (requestedTags.contains(ROLE)) fillRole(solrNode, ctx, ROLE);
+    if (requestedTags.contains(NODEROLE)) fillRole(solrNode, ctx, NODEROLE);// for new policy framework
 
     addIpTags(solrNode, requestedTags, ctx);
 
@@ -81,7 +82,7 @@ public class ImplicitSnitch extends Snitch {
     if (params.size() > 0) ctx.invokeRemote(solrNode, params, "org.apache.solr.cloud.rule.ImplicitSnitch", null);
   }
 
-  private void fillRole(String solrNode, SnitchContext ctx) {
+  private void fillRole(String solrNode, SnitchContext ctx, String key) {
     Map roles = (Map) ctx.retrieve(ZkStateReader.ROLES); // we don't want to hit the ZK for each node
     // so cache and reuse
     if(roles == null) roles = ctx.getZkJson(ZkStateReader.ROLES);
@@ -91,7 +92,7 @@ public class ImplicitSnitch extends Snitch {
         Map.Entry e = (Map.Entry) o;
         if (e.getValue() instanceof List) {
           if(((List) e.getValue()).contains(solrNode)) {
-            ctx.getTags().put(ROLE, e.getKey());
+            ctx.getTags().put(key, e.getKey());
             break;
           }
         }