HBASE-17565 StochasticLoadBalancer may incorrectly skip balancing due to skewed multiplier sum
This commit is contained in:
parent
0a0aef345a
commit
5a0020e867
|
@ -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;
|
||||
}
|
||||
|
@ -926,9 +930,11 @@ public class StochasticLoadBalancer extends BaseLoadBalancer {
|
|||
protected Cluster cluster;
|
||||
|
||||
CostFunction(Configuration c) {
|
||||
|
||||
}
|
||||
|
||||
boolean isNeeded() {
|
||||
return true;
|
||||
}
|
||||
float getMultiplier() {
|
||||
return multiplier;
|
||||
}
|
||||
|
@ -1433,6 +1439,11 @@ public class StochasticLoadBalancer extends BaseLoadBalancer {
|
|||
return costPerGroup(primariesOfRegions);
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean isNeeded() {
|
||||
return cluster.hasRegionReplicas;
|
||||
}
|
||||
|
||||
@Override
|
||||
double cost() {
|
||||
if (maxCost <= 0) {
|
||||
|
|
|
@ -84,7 +84,6 @@ public class TestRegionRebalancing {
|
|||
public void before() throws Exception {
|
||||
UTIL.getConfiguration().set("hbase.master.loadbalancer.class", this.balancerName);
|
||||
// set minCostNeedBalance to 0, make sure balancer run
|
||||
UTIL.getConfiguration().setFloat("hbase.master.balancer.stochastic.minCostNeedBalance", 0.0f);
|
||||
UTIL.startMiniCluster(1);
|
||||
this.desc = new HTableDescriptor(TableName.valueOf("test"));
|
||||
this.desc.addFamily(new HColumnDescriptor(FAMILY_NAME));
|
||||
|
|
|
@ -71,7 +71,6 @@ public class BalancerTestBase {
|
|||
conf.setFloat("hbase.master.balancer.stochastic.maxMovePercent", 0.75f);
|
||||
conf.setFloat("hbase.regions.slop", 0.0f);
|
||||
conf.setFloat("hbase.master.balancer.stochastic.localityCost", 0);
|
||||
conf.setFloat("hbase.master.balancer.stochastic.minCostNeedBalance", 0.0f);
|
||||
loadBalancer = new StochasticLoadBalancer();
|
||||
loadBalancer.setConf(conf);
|
||||
}
|
||||
|
@ -129,6 +128,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},
|
||||
|
|
|
@ -104,7 +104,6 @@ public class TestStochasticLoadBalancer extends BalancerTestBase {
|
|||
assertNull(plans);
|
||||
}
|
||||
// reset config
|
||||
conf.setFloat("hbase.master.balancer.stochastic.minCostNeedBalance", 0.0f);
|
||||
loadBalancer.setConf(conf);
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,6 @@ public class TestStochasticLoadBalancer2 extends BalancerTestBase {
|
|||
@After
|
||||
public void after() {
|
||||
// reset config to make sure balancer run
|
||||
conf.setFloat("hbase.master.balancer.stochastic.minCostNeedBalance", 0.0f);
|
||||
loadBalancer.setConf(conf);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue