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..09a8f4d 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 @@ -280,7 +280,7 @@ public class StochasticLoadBalancer extends BaseLoadBalancer { float sumMultiplier = 0.0f; for (CostFunction c : costFunctions) { float multiplier = c.getMultiplier(); - if (multiplier <= 0) { + if (multiplier <= 0 || !c.isNeeded()) { continue; } sumMultiplier += multiplier; @@ -925,9 +925,11 @@ public class StochasticLoadBalancer extends BaseLoadBalancer { protected Cluster cluster; CostFunction(Configuration c) { - } + boolean isNeeded() { + return true; + } float getMultiplier() { return multiplier; } @@ -1430,6 +1432,14 @@ public class StochasticLoadBalancer extends BaseLoadBalancer { } @Override + boolean isNeeded() { + if (maxCost <= 0) { + return false; + } + return true; + } + + @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},