You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zg...@apache.org on 2020/03/11 03:02:47 UTC
[hbase] branch branch-2.2 updated: HBASE-23953 SimpleBalancer bug
when second pass to fill up to min (#1262)
This is an automated email from the ASF dual-hosted git repository.
zghao pushed a commit to branch branch-2.2
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.2 by this push:
new 53c6c48 HBASE-23953 SimpleBalancer bug when second pass to fill up to min (#1262)
53c6c48 is described below
commit 53c6c487b4f23be6ff276fb8b06bba6f09e4f657
Author: niuyulin <ny...@163.com>
AuthorDate: Wed Mar 11 10:30:02 2020 +0800
HBASE-23953 SimpleBalancer bug when second pass to fill up to min (#1262)
Signed-off-by: Guanghao Zhang <zg...@apache.org>
---
.../hbase/master/balancer/SimpleLoadBalancer.java | 1 +
.../hbase/master/balancer/BalancerTestBase.java | 20 ++++++++++++++++
.../master/balancer/TestDefaultLoadBalancer.java | 27 ++++++++++++++++++++++
3 files changed, 48 insertions(+)
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.java
index d3ccda4..c0538b8 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.java
@@ -424,6 +424,7 @@ public class SimpleLoadBalancer extends BaseLoadBalancer {
addRegionPlan(regionsToMove, fetchFromTail,
server.getKey().getServerName(), regionsToReturn);
numTaken++;
+ balanceInfo.setNumRegionsAdded(balanceInfo.getNumRegionsAdded() + 1);
}
}
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 6a3aaee..733df71 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
@@ -431,6 +431,26 @@ public class BalancerTestBase {
return randomRegions(numRegions, -1);
}
+ protected List<RegionInfo> createRegions(int numRegions, TableName tableName) {
+ List<RegionInfo> regions = new ArrayList<>(numRegions);
+ byte[] start = new byte[16];
+ byte[] end = new byte[16];
+ Random rand = ThreadLocalRandom.current();
+ rand.nextBytes(start);
+ rand.nextBytes(end);
+ for (int i = 0; i < numRegions; i++) {
+ Bytes.putInt(start, 0, numRegions << 1);
+ Bytes.putInt(end, 0, (numRegions << 1) + 1);
+ RegionInfo hri = RegionInfoBuilder.newBuilder(tableName)
+ .setStartKey(start)
+ .setEndKey(end)
+ .setSplit(false)
+ .build();
+ regions.add(hri);
+ }
+ return regions;
+ }
+
protected List<RegionInfo> randomRegions(int numRegions, int numTables) {
List<RegionInfo> regions = new ArrayList<>(numRegions);
byte[] start = new byte[16];
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestDefaultLoadBalancer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestDefaultLoadBalancer.java
index 8382722..dccaf02 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestDefaultLoadBalancer.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestDefaultLoadBalancer.java
@@ -17,6 +17,7 @@
*/
package org.apache.hadoop.hbase.master.balancer;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
@@ -209,4 +210,30 @@ public class TestDefaultLoadBalancer extends BalancerTestBase {
List<ServerAndLoad> balancedCluster1 = reconcile(clusterList, clusterplans1, clusterServers);
assertTrue(assertClusterOverallAsBalanced(balancedCluster1, clusterLoadPerTable.keySet().size()));
}
+
+ @Test
+ public void
+ testBalanceClusterOverallStrictly() throws Exception {
+ int[] regionNumOfTable1PerServer = {3, 3, 4, 4, 4, 4, 5, 5, 5};
+ int[] regionNumOfTable2PerServer = {2, 2, 2, 2, 2, 2, 2, 2, 1};
+ TreeMap<ServerName, List<RegionInfo>> serverRegionInfo = new TreeMap<>();
+ List<ServerAndLoad> serverAndLoads = new ArrayList<>();
+ for (int i = 0; i < regionNumOfTable1PerServer.length; i++) {
+ ServerName serverName = ServerName.valueOf("server" + i, 1000, -1);
+ List<RegionInfo> regions1 = createRegions(regionNumOfTable1PerServer[i], TableName.valueOf("table1"));
+ List<RegionInfo> regions2 = createRegions(regionNumOfTable2PerServer[i], TableName.valueOf("table2"));
+ regions1.addAll(regions2);
+ serverRegionInfo.put(serverName, regions1);
+ ServerAndLoad serverAndLoad = new ServerAndLoad(serverName, regionNumOfTable1PerServer[i] + regionNumOfTable2PerServer[i]);
+ serverAndLoads.add(serverAndLoad);
+ }
+ HashMap<TableName, TreeMap<ServerName, List<RegionInfo>>> clusterLoadPerTable = mockClusterServersWithTables(serverRegionInfo);
+ loadBalancer.setClusterLoad((Map) clusterLoadPerTable);
+ List<RegionPlan> partialplans = loadBalancer.balanceCluster(clusterLoadPerTable.get(TableName.valueOf("table1")));
+ List<ServerAndLoad> balancedServerLoads = reconcile(serverAndLoads, partialplans, serverRegionInfo);
+ for (ServerAndLoad serverAndLoad : balancedServerLoads) {
+ assertEquals(6, serverAndLoad.getLoad());
+ }
+ }
+
}