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/08 09:03:32 UTC

lucene-solr:feature/autoscaling: SOLR-10278: fix infinite loop in in MoveReplicaSuggester

Repository: lucene-solr
Updated Branches:
  refs/heads/feature/autoscaling dc9ab4996 -> 6a3f22ffd


SOLR-10278: fix infinite loop in in MoveReplicaSuggester


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

Branch: refs/heads/feature/autoscaling
Commit: 6a3f22ffd40f999e243ccb204a68e28196892d6b
Parents: dc9ab49
Author: Noble Paul <no...@apache.org>
Authored: Mon May 8 18:33:21 2017 +0930
Committer: Noble Paul <no...@apache.org>
Committed: Mon May 8 18:33:21 2017 +0930

----------------------------------------------------------------------
 .../cloud/autoscaling/MoveReplicaSuggester.java |  4 +-
 .../org/apache/solr/cloud/autoscaling/Row.java  |  2 +-
 .../solr/cloud/autoscaling/TestPolicy.java      | 58 +++++++++++++++-----
 3 files changed, 48 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a3f22ff/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/MoveReplicaSuggester.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/MoveReplicaSuggester.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/MoveReplicaSuggester.java
index 1e5dcda..2acfc18 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/MoveReplicaSuggester.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/MoveReplicaSuggester.java
@@ -56,9 +56,9 @@ public class MoveReplicaSuggester extends Suggester {
           clause.test(tmpRow);
         }
       }
-      int i = getMatrix().indexOf(fromRow);
+      final int i = getMatrix().indexOf(fromRow);
       if (tmpRow.violations.isEmpty()) {
-        for (int j = getMatrix().size() - 1; j > i; i--) {
+        for (int j = getMatrix().size() - 1; j > i; j--) {
           Row targetRow = getMatrix().get(j);
           if (!isAllowed(targetRow.node, Hint.TARGET_NODE)) continue;
           targetRow = targetRow.addReplica(coll, shard);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a3f22ff/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java
index 658c3af..d5f94c9 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java
@@ -95,7 +95,7 @@ class Row implements MapWriter {
     if (c == null) row.replicaInfo.put(coll, c = new HashMap<>());
     List<ReplicaInfo> s = c.get(shard);
     if (s == null) c.put(shard, s = new ArrayList<>());
-    s.add(new ReplicaInfo(coll,shard,""+new Random().nextInt(1000)+1000 , new HashMap<>()));
+    s.add(new ReplicaInfo(""+new Random().nextInt(1000)+1000,coll,shard, new HashMap<>()));
     return row;
 
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a3f22ff/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java b/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
index 88ea92e..b856621 100644
--- a/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
+++ b/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
@@ -219,7 +219,7 @@ public class TestPolicy extends SolrTestCaseJ4 {
     String autoscaleJson = "{" +
         "      'cluster-policy':[" +
         "      {'cores':'<10','node':'#ANY'}," +
-        "      {'replica':'<2','shard':'#EACH','node':'#ANY'}," +
+        "      {'replica':'<3','shard':'#EACH','node':'#ANY'}," +
         "      {'nodeRole':'!overseer','replica':'#ANY'}]," +
         "      'cluster-preferences':[" +
         "      {'minimize':'cores', 'precision':3}," +
@@ -277,18 +277,27 @@ public class TestPolicy extends SolrTestCaseJ4 {
     assertNotNull(op);
   }
 
- /* public void testOtherTag(){
+  public void testOtherTag(){
     String rules = "{" +
-        "conditions:[" +
-        "{nodeRole:'!overseer', strict:false}," +
-        "{replica:'<1',node:node3}," +
-        "{replica:'<2',node:'#ANY', shard:'#EACH'}," +
-        "{replica:'<3',shard:'#EACH', rack:'#ANY' }" +
+        "'cluster-preferences':[" +
+        "{'minimize':'cores','precision':2}," +
+        "{'maximize':'freedisk','precision':50}," +
+        "{'minimize':'heap','precision':1000}" +
         "]," +
-        " preferences:[" +
-        "{minimize:cores , precision:2}," +
-        "{maximize:freedisk, precision:50}, " +
-        "{minimize:heap, precision:1000}]}";
+        "'cluster-policy':[" +
+        "{'nodeRole':'!overseer','strict':false}," +
+        "{'replica':'<1','node':'node3'}," +
+        "{'replica':'<2','node':'#ANY','shard':'#EACH'}" +
+        "]," +
+        "'policies':{" +
+        "'p1':[" +
+        "{'nodeRole':'!overseer','strict':false}," +
+        "{'replica':'<1','node':'node3'}," +
+        "{'replica':'<2','node':'#ANY','shard':'#EACH'}," +
+        "{'replica':'<3','shard':'#EACH','rack':'#ANY'}" +
+        "]" +
+        "}" +
+        "}";
 
     Map<String, Map> nodeValues = (Map<String, Map>) Utils.fromJSONString("{" +
         "node1:{cores:12, freedisk: 334, heap:10480, rack: rack4}," +
@@ -297,14 +306,37 @@ public class TestPolicy extends SolrTestCaseJ4 {
         "node4:{cores:8, freedisk: 375, heap:16900, nodeRole:overseer, rack: rack1}" +
         "}");
     Policy policy = new Policy((Map<String, Object>) Utils.fromJSONString(rules));
-    Policy.Session session = policy.createSession(getClusterDataProvider(nodeValues, clusterState));
+    ClusterDataProvider clusterDataProvider = getClusterDataProvider(nodeValues, clusterState);
+    ClusterDataProvider cdp = new ClusterDataProvider() {
+      @Override
+      public Map<String, Object> getNodeValues(String node, Collection<String> tags) {
+        return clusterDataProvider.getNodeValues(node, tags);
+      }
+
+      @Override
+      public Map<String, Map<String, List<Policy.ReplicaInfo>>> getReplicaInfo(String node, Collection<String> keys) {
+        return clusterDataProvider.getReplicaInfo(node, keys);
+      }
+
+      @Override
+      public Collection<String> getNodes() {
+        return clusterDataProvider.getNodes();
+      }
+
+      @Override
+      public String getPolicy(String coll) {
+        return "p1";
+      }
+    };
+    Policy.Session session =  policy.createSession(cdp);
 
     Map op = session
         .getSuggester(ADDREPLICA)
         .hint(Hint.COLL, "newColl")
         .hint(Hint.SHARD, "s1").getOperation();
     assertNotNull(op);
-  }*/
+    assertEquals("node2", op.get("node"));
+  }
 
 
   private ClusterDataProvider getClusterDataProvider(final Map<String, Map> nodeValues, String  clusterState) {