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..8825637 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 @@ -283,6 +283,10 @@ public class StochasticLoadBalancer extends BaseLoadBalancer { if (multiplier <= 0) { continue; } + if (!c.isNeeded()) { + LOG.debug(c.getClass().getName() + " indicated that its cost should not be considered"); + continue; + } sumMultiplier += multiplier; total += c.cost() * multiplier; } @@ -925,9 +929,11 @@ public class StochasticLoadBalancer extends BaseLoadBalancer { protected Cluster cluster; CostFunction(Configuration c) { - } + boolean isNeeded() { + return true; + } float getMultiplier() { return multiplier; } @@ -1430,6 +1436,11 @@ public class StochasticLoadBalancer extends BaseLoadBalancer { } @Override + boolean isNeeded() { + return cluster.hasRegionReplicas; + } + + @Override double cost() { if (maxCost <= 0) { return 0; diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java index 622dc4b..aee8606 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java @@ -150,6 +150,9 @@ public class BalancerTestBase { new int[]{0, 0, 0, 7}, // 5 node new int[]{1, 1, 1, 1, 4}, + // 6 nodes + new int[]{1500, 500, 500, 500, 10, 0}, + new int[]{1500, 500, 500, 500, 500, 0}, // more nodes new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 10},