You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by nd...@apache.org on 2021/01/19 19:05:45 UTC
[hbase] branch branch-2.4 updated: HBASE-25513 When the table is
turned on normalize,
the first region may not be merged even the size is 0 (#2887)
This is an automated email from the ASF dual-hosted git repository.
ndimiduk 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 cc5b884 HBASE-25513 When the table is turned on normalize, the first region may not be merged even the size is 0 (#2887)
cc5b884 is described below
commit cc5b884a8d7059e70f1a9b5c9c11fec89b8c8a06
Author: Baiqiang Zhao <zb...@gmail.com>
AuthorDate: Tue Jan 19 23:53:51 2021 +0800
HBASE-25513 When the table is turned on normalize, the first region may not be merged even the size is 0 (#2887)
Signed-off-by: Nick Dimiduk <nd...@apache.org>
---
.../master/normalizer/SimpleRegionNormalizer.java | 4 +++
.../normalizer/TestSimpleRegionNormalizer.java | 32 ++++++++++++++++++++++
2 files changed, 36 insertions(+)
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.java
index 6d7387b..08e529c 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.java
@@ -364,6 +364,10 @@ class SimpleRegionNormalizer implements RegionNormalizer, ConfigurationObserver
if (rangeMembers.isEmpty() // when there are no range members, seed the range with whatever
// we have. this way we're prepared in case the next region is
// 0-size.
+ || (rangeMembers.size() == 1 && sumRangeMembersSizeMb == 0) // when there is only one
+ // region and the size is 0,
+ // seed the range with
+ // whatever we have.
|| regionSizeMb == 0 // always add an empty region to the current range.
|| (regionSizeMb + sumRangeMembersSizeMb <= avgRegionSizeMb)) { // add the current region
// to the range when
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.java
index 33b3297..70f5a87 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.java
@@ -449,6 +449,38 @@ public class TestSimpleRegionNormalizer {
}
@Test
+ public void testMergeEmptyRegions2() {
+ conf.setBoolean(SPLIT_ENABLED_KEY, false);
+ conf.setInt(MERGE_MIN_REGION_SIZE_MB_KEY, 0);
+ final TableName tableName = name.getTableName();
+ final List<RegionInfo> regionInfos = createRegionInfos(tableName, 8);
+ final Map<byte[], Integer> regionSizes =
+ createRegionSizesMap(regionInfos, 0, 10, 1, 0, 9, 0, 10, 0);
+ setupMocksForNormalizer(regionSizes, regionInfos);
+
+ assertFalse(normalizer.isSplitEnabled());
+ assertEquals(0, normalizer.getMergeMinRegionSizeMb());
+ List<NormalizationPlan> plans = normalizer.computePlansForTable(tableName);
+ assertThat(plans, contains(
+ new MergeNormalizationPlan.Builder()
+ .addTarget(regionInfos.get(0), 0)
+ .addTarget(regionInfos.get(1), 10)
+ .build(),
+ new MergeNormalizationPlan.Builder()
+ .addTarget(regionInfos.get(2), 1)
+ .addTarget(regionInfos.get(3), 0)
+ .build(),
+ new MergeNormalizationPlan.Builder()
+ .addTarget(regionInfos.get(4), 9)
+ .addTarget(regionInfos.get(5), 0)
+ .build(),
+ new MergeNormalizationPlan.Builder()
+ .addTarget(regionInfos.get(6), 10)
+ .addTarget(regionInfos.get(7), 0)
+ .build()));
+ }
+
+ @Test
public void testSplitAndMultiMerge() {
conf.setInt(MERGE_MIN_REGION_SIZE_MB_KEY, 0);
final TableName tableName = name.getTableName();