hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From zg...@apache.org
Subject [hbase] branch branch-2.2 updated: HBASE-21866 Do not move the table to null rsgroup when creating an existing table
Date Mon, 04 Mar 2019 06:25:20 GMT
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 e641365  HBASE-21866 Do not move the table to null rsgroup when creating an existing
table
e641365 is described below

commit e64136577485e6c5a1fc006e62bc2c205dfc9b2b
Author: Xiang Li <lixiang@freewheel.tv>
AuthorDate: Tue Feb 19 07:31:10 2019 +0000

    HBASE-21866 Do not move the table to null rsgroup when creating an existing table
    
    Signed-off-by: Guanghao Zhang <zghao@apache.org>
---
 .../hadoop/hbase/rsgroup/TestRSGroupsAdmin1.java   | 36 ++++++++++++++++++++++
 .../master/procedure/CreateTableProcedure.java     | 13 +++++---
 2 files changed, 44 insertions(+), 5 deletions(-)

diff --git a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsAdmin1.java
b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsAdmin1.java
index 4d41d36..ca53985 100644
--- a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsAdmin1.java
+++ b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsAdmin1.java
@@ -28,9 +28,12 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.SortedSet;
+
 import org.apache.hadoop.hbase.HBaseClassTestRule;
 import org.apache.hadoop.hbase.NamespaceDescriptor;
 import org.apache.hadoop.hbase.ServerName;
+import org.apache.hadoop.hbase.TableExistsException;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.TableNotFoundException;
 import org.apache.hadoop.hbase.Waiter;
@@ -452,6 +455,39 @@ public class TestRSGroupsAdmin1 extends TestRSGroupsBase {
 
   }
 
+  @Test
+  public void testNotMoveTableToNullRSGroupWhenCreatingExistingTable()
+          throws Exception {
+    // Trigger
+    TableName tn1 = TableName.valueOf("t1");
+    TEST_UTIL.createTable(tn1, "cf1");
+    try {
+      // Create an existing table to trigger HBASE-21866
+      TEST_UTIL.createTable(tn1, "cf1");
+    } catch (TableExistsException teex) {
+      // Ignore
+    }
+
+    // Wait then verify
+    //   Could not verify until the rollback of CreateTableProcedure is done
+    //   (that is, the coprocessor finishes its work),
+    //   or the table is still in the "default" rsgroup even though HBASE-21866
+    //   is not fixed.
+    TEST_UTIL.waitFor(5000, new Waiter.Predicate<Exception>() {
+      @Override
+      public boolean evaluate() throws Exception {
+        return
+                (master.getMasterProcedureExecutor().getActiveExecutorCount() == 0);
+      }
+    });
+    SortedSet<TableName> tables
+            = rsGroupAdmin.getRSGroupInfo(RSGroupInfo.DEFAULT_GROUP).getTables();
+    assertTrue("Table 't1' must be in 'default' rsgroup", tables.contains(tn1));
+
+    // Cleanup
+    TEST_UTIL.deleteTable(tn1);
+  }
+
   private void toggleQuotaCheckAndRestartMiniCluster(boolean enable) throws Exception {
     TEST_UTIL.shutdownMiniCluster();
     TEST_UTIL.getConfiguration().setBoolean(QuotaUtil.QUOTA_CONF_KEY, enable);
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java
index 3e144d0..34fde27 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java
@@ -139,11 +139,14 @@ public class CreateTableProcedure
       // nothing to rollback, pre-create is just table-state checks.
       // We can fail if the table does exist or the descriptor is malformed.
       // TODO: coprocessor rollback semantic is still undefined.
-      DeleteTableProcedure.deleteTableStates(env, getTableName());
-
-      final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();
-      if (cpHost != null) {
-        cpHost.postDeleteTable(getTableName());
+      if (hasException() /* avoid NPE */ &&
+          getException().getCause().getClass() != TableExistsException.class) {
+        DeleteTableProcedure.deleteTableStates(env, getTableName());
+
+        final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();
+        if (cpHost != null) {
+          cpHost.postDeleteTable(getTableName());
+        }
       }
 
       releaseSyncLatch();


Mime
View raw message