From 32eb23c8f36381fc7da2c288133a04db7b799679 Mon Sep 17 00:00:00 2001 From: clarax Date: Mon, 25 Oct 2021 15:44:11 -0700 Subject: [PATCH] HBASE-26327 Replicas cohosted on a rack shouldn't keep triggering balancer (#3788) Signed-off-by: Huaxiang Sun --- .../hbase/master/balancer/StochasticLoadBalancer.java | 6 +----- .../balancer/TestStochasticLoadBalancerRegionReplica.java | 4 ++-- .../TestStochasticLoadBalancerRegionReplicaWithRacks.java | 2 +- 3 files changed, 4 insertions(+), 8 deletions(-) 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 3dc7670d1c3..f2993deed5b 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 @@ -337,11 +337,7 @@ public class StochasticLoadBalancer extends BaseLoadBalancer { if (Math.abs(regionReplicaHostCostFunction.cost()) > CostFunction.COST_EPSILON) { return true; } - regionReplicaRackCostFunction.prepare(c); - if (Math.abs(regionReplicaRackCostFunction.cost()) > CostFunction.COST_EPSILON) { - return true; - } - return false; + return (Math.abs(regionReplicaHostCostFunction.cost()) > CostFunction.COST_EPSILON); } @RestrictedApi(explanation = "Should only be called in tests", link = "", diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplica.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplica.java index 8262e2c45e2..cccb8547f23 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplica.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplica.java @@ -18,6 +18,7 @@ package org.apache.hadoop.hbase.master.balancer; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.ArrayList; @@ -161,8 +162,7 @@ public class TestStochasticLoadBalancerRegionReplica extends BalancerTestBase { map.put(s2, regionsOnS2); // add another server so that the cluster has some host on another rack map.put(ServerName.valueOf("host2", 1000, 11111), randomRegions(1)); - assertTrue( - loadBalancer.needsBalance(HConstants.ENSEMBLE_TABLE_NAME, + assertFalse(loadBalancer.needsBalance(HConstants.ENSEMBLE_TABLE_NAME, new BalancerClusterState(map, null, null, new ForTestRackManagerOne()))); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaWithRacks.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaWithRacks.java index b682c4b97be..ea305d3dc98 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaWithRacks.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaWithRacks.java @@ -51,7 +51,7 @@ public class TestStochasticLoadBalancerRegionReplicaWithRacks extends BalancerTe @Test public void testRegionReplicationOnMidClusterWithRacks() { - conf.setLong(StochasticLoadBalancer.MAX_STEPS_KEY, 10000000L); + conf.setLong(StochasticLoadBalancer.MAX_STEPS_KEY, 100000000L); conf.setFloat("hbase.master.balancer.stochastic.maxMovePercent", 1.0f); conf.setLong("hbase.master.balancer.stochastic.maxRunningTime", 120 * 1000); // 120 sec loadBalancer.onConfigurationChange(conf);