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) {