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);
+  }
 }