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/23 05:34:12 UTC

lucene-solr:feature/autoscaling: test for violations

Repository: lucene-solr
Updated Branches:
  refs/heads/feature/autoscaling e59cce6a8 -> 11f70a0e2


test for violations


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

Branch: refs/heads/feature/autoscaling
Commit: 11f70a0e20769db075c67ef7a17a502e3b2fac3f
Parents: e59cce6
Author: Noble Paul <no...@apache.org>
Authored: Tue May 23 15:04:02 2017 +0930
Committer: Noble Paul <no...@apache.org>
Committed: Tue May 23 15:04:02 2017 +0930

----------------------------------------------------------------------
 .../apache/solr/cloud/autoscaling/Clause.java   | 20 +++++++++++++++----
 .../java/org/apache/solr/common/MapWriter.java  |  6 ++++++
 .../solr/cloud/autoscaling/TestPolicy.java      | 21 ++++++--------------
 3 files changed, 28 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/11f70a0e/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
index 4fdd88a..d466ce9 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
@@ -176,15 +176,17 @@ public class Clause implements MapWriter, Comparable<Clause> {
     }
   }
 
-  public class Violation {
+  public class Violation implements MapWriter {
     final String shard, coll, node;
+    final Object actualVal;
     private final int hash;
 
 
-    private Violation(String coll, String shard, String node) {
+    private Violation(String coll, String shard, String node, Object actualVal) {
       this.shard = shard;
       this.coll = coll;
       this.node = node;
+      this.actualVal = actualVal;
       hash = ("" + coll + " " + shard + " " + node + " " + Utils.toJSONString(getClause().toMap(new HashMap<>()))).hashCode();
     }
 
@@ -207,6 +209,16 @@ public class Clause implements MapWriter, Comparable<Clause> {
       }
       return false;
     }
+
+    @Override
+    public void writeMap(EntryWriter ew) throws IOException {
+      ew.putIfNotNull("collection", coll);
+      ew.putIfNotNull("shard", shard);
+      ew.putIfNotNull("node", node);
+      ew.putIfNotNull("violation", (MapWriter) ew1 -> ew1.put(getClause().isPerCollectiontag() ? "replica" : tag.name,
+          String.valueOf(actualVal)));
+      ew.put("clause", getClause());
+    }
   }
 
 
@@ -221,7 +233,7 @@ public class Clause implements MapWriter, Comparable<Clause> {
           for (Map.Entry<String, AtomicInteger> counts : shardVsCount.getValue().entrySet()) {
             if (!replica.isPass(counts.getValue())) {
               errors.add(new Violation(e.getKey(), shardVsCount.getKey(),
-                  tag.name.equals("node") ? counts.getKey() : null));
+                  tag.name.equals("node") ? counts.getKey() : null, counts.getValue()));
             }
           }
         }
@@ -229,7 +241,7 @@ public class Clause implements MapWriter, Comparable<Clause> {
     } else {
       for (Row r : allRows) {
         if (!tag.isPass(r)) {
-          errors.add(new Violation(null, null, r.node));
+          errors.add(new Violation(null, null, r.node, r.getVal(tag.name) ));
         }
       }
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/11f70a0e/solr/solrj/src/java/org/apache/solr/common/MapWriter.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/MapWriter.java b/solr/solrj/src/java/org/apache/solr/common/MapWriter.java
index 24307d6..fca6e2b 100644
--- a/solr/solrj/src/java/org/apache/solr/common/MapWriter.java
+++ b/solr/solrj/src/java/org/apache/solr/common/MapWriter.java
@@ -64,6 +64,12 @@ public interface MapWriter extends MapSerializable {
      */
     EntryWriter put(String k, Object v) throws IOException;
 
+    default EntryWriter putIfNotNull(String k, Object v) throws IOException {
+      if(v != null) put(k,v);
+      return this;
+    }
+
+
     default EntryWriter put(String k, int v) throws IOException {
       put(k, (Integer) v);
       return this;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/11f70a0e/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 9d1f12a..5f49bea 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
@@ -32,7 +32,7 @@ import com.google.common.collect.ImmutableList;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
-import org.apache.solr.client.solrj.request.CollectionAdminRequest.MoveReplica;
+import org.apache.solr.cloud.autoscaling.Clause.Violation;
 import org.apache.solr.cloud.autoscaling.Policy.Suggester.Hint;
 import org.apache.solr.common.params.CollectionParams;
 import org.apache.solr.common.params.SolrParams;
@@ -186,21 +186,12 @@ public class TestPolicy extends SolrTestCaseJ4 {
     assertEquals("node2", l.get(3).node);
 
 
-    /*Map<String, List<Clause>> violations = session.getViolations();
-    System.out.println(Utils.getDeepCopy(violations, 6));
+    List<Violation> violations = session.getViolations();
     assertEquals(3, violations.size());
-    List<Clause> v = violations.get("node4");
-    assertNotNull(v);
-    assertEquals(v.get(0).tag.name, "nodeRole");
-    v = violations.get("node1");
-    assertNotNull(v);
-    assertEquals(v.get(0).replica.op, Operand.LESS_THAN);
-    assertEquals(v.get(0).replica.val, 2);
-    v = violations.get("node3");
-    assertNotNull(v);
-    assertEquals(v.get(0).replica.op, Operand.LESS_THAN);
-    assertEquals(v.get(0).replica.val, 1);
-    assertEquals(v.get(0).tag.val, "node3");*/
+    assertTrue( violations.stream().anyMatch(violation -> "node3".equals(violation.getClause().tag.val)));
+    assertTrue( violations.stream().anyMatch(violation -> "nodeRole".equals(violation.getClause().tag.name)));
+    assertTrue(violations.stream().anyMatch(violation -> (violation.getClause().replica.op == Operand.LESS_THAN && "node".equals(violation.getClause().tag.name))));
+
     Policy.Suggester suggester = session.getSuggester(ADDREPLICA)
         .hint(Hint.COLL, "gettingstarted")
         .hint(Hint.SHARD, "r1");