You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by wc...@apache.org on 2020/07/29 10:33:16 UTC
[hbase-operator-tools] branch master updated: HBASE-24778
[hbase-operator-tools] Merging regions failed when the table is not default
namespace (#71)
This is an automated email from the ASF dual-hosted git repository.
wchevreuil pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase-operator-tools.git
The following commit(s) were added to refs/heads/master by this push:
new c252041 HBASE-24778 [hbase-operator-tools] Merging regions failed when the table is not default namespace (#71)
c252041 is described below
commit c2520412878abf0523d35a6f1ce7847ae474664a
Author: Baiqiang Zhao <zb...@gmail.com>
AuthorDate: Wed Jul 29 18:33:07 2020 +0800
HBASE-24778 [hbase-operator-tools] Merging regions failed when the table is not default namespace (#71)
Signed-off-by: Wellington Chevreuil <wc...@apache.org>
---
.../main/java/org/apache/hbase/RegionsMerger.java | 2 +-
.../java/org/apache/hbase/TestRegionsMerger.java | 41 +++++++++++++++++-----
2 files changed, 33 insertions(+), 10 deletions(-)
diff --git a/hbase-tools/src/main/java/org/apache/hbase/RegionsMerger.java b/hbase-tools/src/main/java/org/apache/hbase/RegionsMerger.java
index dd23abb..6a3e1e8 100644
--- a/hbase-tools/src/main/java/org/apache/hbase/RegionsMerger.java
+++ b/hbase-tools/src/main/java/org/apache/hbase/RegionsMerger.java
@@ -90,7 +90,7 @@ public class RegionsMerger extends Configured implements org.apache.hadoop.util.
Path basePath = new Path(conf.get(HConstants.HBASE_DIR));
basePath = new Path(basePath, "data");
Path tablePath = new Path(basePath, table.getNamespaceAsString());
- return new Path(tablePath, table.getNameAsString());
+ return new Path(tablePath, table.getQualifierAsString());
}
private long sumSizeInFS(Path parentPath) throws IOException {
diff --git a/hbase-tools/src/test/java/org/apache/hbase/TestRegionsMerger.java b/hbase-tools/src/test/java/org/apache/hbase/TestRegionsMerger.java
index f6939b0..9c5fe37 100644
--- a/hbase-tools/src/test/java/org/apache/hbase/TestRegionsMerger.java
+++ b/hbase-tools/src/test/java/org/apache/hbase/TestRegionsMerger.java
@@ -24,6 +24,7 @@ import java.util.List;
import org.apache.hadoop.hbase.HBaseTestingUtility;
import org.apache.hadoop.hbase.HConstants;
+import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.RegionInfo;
@@ -34,6 +35,9 @@ import org.junit.*;
public class TestRegionsMerger {
private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();
+ private static final String NAMESPACE = "TEST";
+ private static final TableName TABLE_NAME_WITH_NAMESPACE =
+ TableName.valueOf(NAMESPACE, TestRegionsMerger.class.getSimpleName());
private static final TableName TABLE_NAME =
TableName.valueOf(TestRegionsMerger.class.getSimpleName());
private static final byte[] family = Bytes.toBytes("f");
@@ -66,26 +70,41 @@ public class TestRegionsMerger {
public void testMergeRegionsCanMergeToTarget() throws Exception {
final int originalCount = TEST_UTIL.countRows(table);
TEST_UTIL.getConfiguration().setInt(RegionsMerger.MAX_ROUNDS_IDLE, 10);
- RegionsMerger merger = new RegionsMerger(TEST_UTIL.getConfiguration());
// hbase-2.3 and hbase-2.1 merge's work differently; 2.3 won't merge if a merge candidate is a parent.
// The below used to merge until only 3 regions. Made it less aggressive. Originally there are 15 regions.
// Merge till 10.
final int target = 10;
- merger.mergeRegions(TABLE_NAME.getNameWithNamespaceInclAsString(), target);
- List<RegionInfo> result = TEST_UTIL.getAdmin().getRegions(TABLE_NAME);
+ List<RegionInfo> result = mergeRegionsToTarget(TABLE_NAME, target);
assertEquals(target, result.size());
assertEquals("Row count before and after merge should be equal",
originalCount, TEST_UTIL.countRows(table));
}
@Test
+ public void testMergeRegionsForNonDefaultNamespaceTable() throws Exception {
+ try {
+ TEST_UTIL.getConfiguration().setInt(RegionsMerger.MAX_ROUNDS_IDLE, 10);
+ TEST_UTIL.getAdmin().createNamespace(NamespaceDescriptor.create(NAMESPACE).build());
+ Table tableWithNamespace = TEST_UTIL.createMultiRegionTable(TABLE_NAME_WITH_NAMESPACE, family, 15);
+ final int originalCount = TEST_UTIL.countRows(tableWithNamespace);
+ final int target = 10;
+ List<RegionInfo> result = mergeRegionsToTarget(TABLE_NAME_WITH_NAMESPACE, target);
+ assertEquals(target, result.size());
+ assertEquals("Row count before and after merge should be equal",
+ originalCount, TEST_UTIL.countRows(tableWithNamespace));
+ } finally {
+ TEST_UTIL.deleteTable(TABLE_NAME_WITH_NAMESPACE);
+ TEST_UTIL.getAdmin().deleteNamespace(NAMESPACE);
+ }
+ }
+
+
+ @Test
public void testMergeRegionsCanMergeSomeButNotToTarget() throws Exception {
TEST_UTIL.getConfiguration().setInt(RegionsMerger.MAX_ROUNDS_IDLE, 3);
- RegionsMerger merger = new RegionsMerger(TEST_UTIL.getConfiguration());
generateTableData();
final int originalCount = TEST_UTIL.countRows(table);
- merger.mergeRegions(TABLE_NAME.getNameWithNamespaceInclAsString(), 3);
- List<RegionInfo> result = TEST_UTIL.getAdmin().getRegions(TABLE_NAME);
+ List<RegionInfo> result = mergeRegionsToTarget(TABLE_NAME, 3);
assertEquals(8, result.size());
assertEquals("Row count before and after merge should be equal",
originalCount, TEST_UTIL.countRows(table));
@@ -95,12 +114,10 @@ public class TestRegionsMerger {
public void testMergeRegionsCannotMergeAny() throws Exception {
TEST_UTIL.getConfiguration().setDouble(RegionsMerger.RESULTING_REGION_UPPER_MARK, 0.5);
TEST_UTIL.getConfiguration().setInt(RegionsMerger.MAX_ROUNDS_IDLE, 2);
- RegionsMerger merger = new RegionsMerger(TEST_UTIL.getConfiguration());
generateTableData();
TEST_UTIL.getAdmin().flush(TABLE_NAME);
final int originalCount = TEST_UTIL.countRows(table);
- merger.mergeRegions(TABLE_NAME.getNameWithNamespaceInclAsString(), 3);
- List<RegionInfo> result = TEST_UTIL.getAdmin().getRegions(TABLE_NAME);
+ List<RegionInfo> result = mergeRegionsToTarget(TABLE_NAME, 3);
assertEquals(15, result.size());
assertEquals("Row count before and after merge should be equal",
originalCount, TEST_UTIL.countRows(table));
@@ -127,4 +144,10 @@ public class TestRegionsMerger {
}
});
}
+
+ private List<RegionInfo> mergeRegionsToTarget(TableName tableName, int target) throws Exception {
+ RegionsMerger merger = new RegionsMerger(TEST_UTIL.getConfiguration());
+ merger.mergeRegions(tableName.getNameWithNamespaceInclAsString(), target);
+ return TEST_UTIL.getAdmin().getRegions(tableName);
+ }
}