You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by bh...@apache.org on 2014/03/18 21:32:55 UTC

[03/10] git commit: ACCUMULO-2488 Change criteria for unbalanced servers in concurrent randomwalk

ACCUMULO-2488 Change criteria for unbalanced servers in concurrent randomwalk

The Concurrent randomwalk test used to consider servers unbalanced if any server's
tablet count differed from the cluster average by more than a fifth of the average or
by one, whichever was larger. This would cause failures under typical balancings from
the default balancer.

This commit changes the criterion for an unbalanced server to be double the standard
deviation from the cluster average.


Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/a4174248
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/a4174248
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/a4174248

Branch: refs/heads/1.6.0-SNAPSHOT
Commit: a4174248a96cadcc79a9de4015c90c6618a96418
Parents: 6df83da
Author: Bill Havanki <bh...@cloudera.com>
Authored: Tue Mar 18 09:12:19 2014 -0400
Committer: Bill Havanki <bh...@cloudera.com>
Committed: Tue Mar 18 16:22:22 2014 -0400

----------------------------------------------------------------------
 .../test/randomwalk/concurrent/CheckBalance.java  | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/a4174248/src/server/src/main/java/org/apache/accumulo/server/test/randomwalk/concurrent/CheckBalance.java
----------------------------------------------------------------------
diff --git a/src/server/src/main/java/org/apache/accumulo/server/test/randomwalk/concurrent/CheckBalance.java b/src/server/src/main/java/org/apache/accumulo/server/test/randomwalk/concurrent/CheckBalance.java
index d00e2b4..5d0b978 100644
--- a/src/server/src/main/java/org/apache/accumulo/server/test/randomwalk/concurrent/CheckBalance.java
+++ b/src/server/src/main/java/org/apache/accumulo/server/test/randomwalk/concurrent/CheckBalance.java
@@ -16,6 +16,7 @@
  */
 package org.apache.accumulo.server.test.randomwalk.concurrent;
 
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -57,9 +58,11 @@ public class CheckBalance extends Test {
       total += count.longValue();
     }
     final double average = total / counts.size();
-    
-    // Check for even # of tablets on each node
-    double maxDifference = Math.max(1, average / 5);
+    final double sd = stddev(counts.values(), average);
+    log.debug("average " + average + ", standard deviation " + sd);
+
+    // Check for balanced # of tablets on each node
+    double maxDifference = 2.0 * sd;
     String unbalancedLocation = null;
     long lastCount = 0L;
     boolean balanced = true;
@@ -94,4 +97,13 @@ public class CheckBalance extends Test {
     }
   }
   
+  private static double stddev(Collection<Long> samples, double avg) {
+    int num = samples.size();
+    double sqrtotal = 0.0;
+    for (Long s : samples) {
+      double diff = s.doubleValue() - avg;
+      sqrtotal += diff * diff;
+    }
+    return Math.sqrt(sqrtotal / (double) num);
+  }
 }