Index: hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java (revision 124855) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java (working copy) @@ -385,23 +385,7 @@ } return false; } - // Check if we even need to do any load balancing - // HBASE-3681 check sloppiness first - float average = cs.getLoadAverage(); // for logging - int floor = (int) Math.floor(average * (1 - slop)); - int ceiling = (int) Math.ceil(average * (1 + slop)); - if (!(cs.getMinLoad() > ceiling || cs.getMaxLoad() < floor)) { - NavigableMap> serversByLoad = cs.getServersByLoad(); - if (LOG.isTraceEnabled()) { - // If nothing to balance, then don't say anything unless trace-level logging. - LOG.trace("Skipping load balancing because balanced cluster; " + - "servers=" + cs.getNumServers() + " " + - "regions=" + cs.getNumRegions() + " average=" + average + " " + - "mostloaded=" + serversByLoad.lastKey().getLoad() + - " leastloaded=" + serversByLoad.firstKey().getLoad()); - } - return false; - } + return true; } Index: hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.java (revision 124855) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.java (working copy) @@ -93,6 +93,30 @@ } } + @Override + protected boolean needsBalance(ClusterLoadState cs) { + if (!super.needsBalance(cs)) return false; + + // Check if we even need to do any load balancing + // HBASE-3681 check sloppiness first + float average = cs.getLoadAverage(); // for logging + int floor = (int) Math.floor(average * (1 - slop)); + int ceiling = (int) Math.ceil(average * (1 + slop)); + if (!(cs.getMinLoad() > ceiling || cs.getMaxLoad() < floor)) { + NavigableMap> serversByLoad = cs.getServersByLoad(); + if (LOG.isTraceEnabled()) { + // If nothing to balance, then don't say anything unless trace-level logging. + LOG.trace("Skipping load balancing because balanced cluster; " + "servers=" + + cs.getNumServers() + " " + "regions=" + cs.getNumRegions() + " average=" + average + + " " + "mostloaded=" + serversByLoad.lastKey().getLoad() + " leastloaded=" + + serversByLoad.firstKey().getLoad()); + } + return false; + } + + return true; + } + /** * Generate a global load balancing plan according to the specified map of * server information to the most loaded regions of each server.