You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2021/03/15 13:49:46 UTC
[hbase] branch branch-2.4 updated: HBASE-25635 CandidateGenerator
may miss some region balance actions (#3024)
This is an automated email from the ASF dual-hosted git repository.
zhangduo pushed a commit to branch branch-2.4
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.4 by this push:
new 2ecf923 HBASE-25635 CandidateGenerator may miss some region balance actions (#3024)
2ecf923 is described below
commit 2ecf9232bf7a130f2aa9e7000c689de4dc1e509e
Author: haxiaolin <li...@gmail.com>
AuthorDate: Mon Mar 15 21:28:22 2021 +0800
HBASE-25635 CandidateGenerator may miss some region balance actions (#3024)
Signed-off-by: Viraj Jasani <vj...@apache.org>
Signed-off-by: Duo Zhang <zh...@apache.org>
---
.../hbase/master/balancer/CandidateGenerator.java | 6 +++---
.../master/balancer/StochasticLoadBalancer.java | 7 +++++++
...estStochasticLoadBalancerHeterogeneousCost.java | 23 ++++++++++++++++++++++
3 files changed, 33 insertions(+), 3 deletions(-)
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/CandidateGenerator.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/CandidateGenerator.java
index 77bbcf9..e74e865 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/CandidateGenerator.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/CandidateGenerator.java
@@ -124,12 +124,12 @@ abstract class CandidateGenerator {
if (fromServer < 0 || toServer < 0) {
return BaseLoadBalancer.Cluster.NullAction;
}
- if (fromRegion > 0 && toRegion > 0) {
+ if (fromRegion >= 0 && toRegion >= 0) {
return new BaseLoadBalancer.Cluster.SwapRegionsAction(fromServer, fromRegion,
toServer, toRegion);
- } else if (fromRegion > 0) {
+ } else if (fromRegion >= 0) {
return new BaseLoadBalancer.Cluster.MoveRegionAction(fromRegion, fromServer, toServer);
- } else if (toRegion > 0) {
+ } else if (toRegion >= 0) {
return new BaseLoadBalancer.Cluster.MoveRegionAction(toRegion, toServer, fromServer);
} else {
return BaseLoadBalancer.Cluster.NullAction;
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 355960f..97eb148 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
@@ -261,6 +261,13 @@ public class StochasticLoadBalancer extends BaseLoadBalancer {
this.candidateGenerators = customCandidateGenerators;
}
+ /**
+ * Exposed for Testing!
+ */
+ public List<CandidateGenerator> getCandidateGenerators() {
+ return this.candidateGenerators;
+ }
+
@Override
protected void setSlop(Configuration conf) {
this.slop = conf.getFloat("hbase.regions.slop", 0.001F);
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCost.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCost.java
index e355678..066e22a 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCost.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCost.java
@@ -76,6 +76,7 @@ public class TestStochasticLoadBalancerHeterogeneousCost extends BalancerTestBas
RULES_FILE);
BalancerTestBase.loadBalancer = new StochasticLoadBalancer();
BalancerTestBase.loadBalancer.setConf(BalancerTestBase.conf);
+ BalancerTestBase.loadBalancer.getCandidateGenerators().add(new FairRandomCandidateGenerator());
}
@Test
@@ -279,4 +280,26 @@ public class TestStochasticLoadBalancerHeterogeneousCost extends BalancerTestBas
ServerName sn = ServerName.valueOf(host, port, startCode);
return new ServerAndLoad(sn, 0);
}
+
+ static class FairRandomCandidateGenerator extends
+ StochasticLoadBalancer.RandomCandidateGenerator {
+
+ @Override
+ public BaseLoadBalancer.Cluster.Action pickRandomRegions(BaseLoadBalancer.Cluster cluster,
+ int thisServer, int otherServer) {
+ if (thisServer < 0 || otherServer < 0) {
+ return BaseLoadBalancer.Cluster.NullAction;
+ }
+
+ int thisRegion = pickRandomRegion(cluster, thisServer, 0.5);
+ int otherRegion = pickRandomRegion(cluster, otherServer, 0.5);
+
+ return getAction(thisServer, thisRegion, otherServer, otherRegion);
+ }
+
+ @Override
+ BaseLoadBalancer.Cluster.Action generate(BaseLoadBalancer.Cluster cluster) {
+ return super.generate(cluster);
+ }
+ }
}