diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java index 226dee7..433e56b 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java @@ -262,6 +262,8 @@ public class StochasticLoadBalancer extends BaseLoadBalancer { return false; } + // small value for judging whether double variable is close to 0 + static final double EPSILON = 0.000000000000001D; @Override protected boolean needsBalance(Cluster cluster) { ClusterLoadState cs = new ClusterLoadState(cluster.clusterState); @@ -283,8 +285,13 @@ public class StochasticLoadBalancer extends BaseLoadBalancer { if (multiplier <= 0) { continue; } - sumMultiplier += multiplier; - total += c.cost() * multiplier; + double cost = c.cost(); + if (cost >= EPSILON) { + sumMultiplier += multiplier; + } else { + LOG.debug("ignoring " + c.getClass() + " with multiplier " + multiplier); + } + total += cost * multiplier; } if (total <= 0 || sumMultiplier <= 0