You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2018/08/22 01:54:42 UTC
hbase git commit: HBASE-20666 Unsuccessful table creation leaves
entry in hbase:rsgroup table
Repository: hbase
Updated Branches:
refs/heads/master f62c8201b -> 50055dbf0
HBASE-20666 Unsuccessful table creation leaves entry in hbase:rsgroup table
Signed-off-by: tedyu <yu...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/50055dbf
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/50055dbf
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/50055dbf
Branch: refs/heads/master
Commit: 50055dbf04deee7e850cf71323b64d454aee20ca
Parents: f62c820
Author: Xu Cang <xc...@salesforce.com>
Authored: Mon Aug 20 01:14:27 2018 -0700
Committer: tedyu <yu...@gmail.com>
Committed: Tue Aug 21 18:54:36 2018 -0700
----------------------------------------------------------------------
.../hadoop/hbase/rsgroup/TestRSGroups.java | 65 +++++++++++++++++++-
.../master/procedure/CreateTableProcedure.java | 6 ++
2 files changed, 70 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/50055dbf/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroups.java
----------------------------------------------------------------------
diff --git a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroups.java b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroups.java
index f9dafd4..2fac94c 100644
--- a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroups.java
+++ b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroups.java
@@ -18,11 +18,13 @@
package org.apache.hadoop.hbase.rsgroup;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.IOException;
import java.util.Iterator;
+import java.util.List;
import java.util.Optional;
import java.util.Set;
@@ -45,6 +47,7 @@ import org.apache.hadoop.hbase.coprocessor.MasterObserver;
import org.apache.hadoop.hbase.coprocessor.ObserverContext;
import org.apache.hadoop.hbase.master.MasterCoprocessorHost;
import org.apache.hadoop.hbase.master.ServerManager;
+import org.apache.hadoop.hbase.master.TableNamespaceManager;
import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;
import org.apache.hadoop.hbase.net.Address;
import org.apache.hadoop.hbase.quotas.QuotaTableUtil;
@@ -94,7 +97,6 @@ public class TestRSGroups extends TestRSGroupsBase {
ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART,
NUM_SLAVES_BASE - 1);
TEST_UTIL.getConfiguration().setBoolean(SnapshotManager.HBASE_SNAPSHOT_ENABLED, true);
-
initialize();
}
@@ -542,6 +544,67 @@ public class TestRSGroups extends TestRSGroupsBase {
}
}
+ @Test
+ public void testRSGroupListDoesNotContainFailedTableCreation() throws Exception {
+ toggleQuotaCheckAndRestartMiniCluster(true);
+ String nsp = "np1";
+ NamespaceDescriptor nspDesc =
+ NamespaceDescriptor.create(nsp).addConfiguration(TableNamespaceManager.KEY_MAX_REGIONS, "5")
+ .addConfiguration(TableNamespaceManager.KEY_MAX_TABLES, "2").build();
+ admin.createNamespace(nspDesc);
+ assertEquals(3, admin.listNamespaceDescriptors().length);
+ HColumnDescriptor fam1 = new HColumnDescriptor("fam1");
+ HTableDescriptor tableDescOne =
+ new HTableDescriptor(TableName.valueOf(nsp + TableName.NAMESPACE_DELIM + "table1"));
+ tableDescOne.addFamily(fam1);
+ admin.createTable(tableDescOne);
+
+ HTableDescriptor tableDescTwo =
+ new HTableDescriptor(TableName.valueOf(nsp + TableName.NAMESPACE_DELIM + "table2"));
+ tableDescTwo.addFamily(fam1);
+ boolean constraintViolated = false;
+
+ try {
+ admin.createTable(tableDescTwo, Bytes.toBytes("AAA"), Bytes.toBytes("ZZZ"),
+ 6);
+ Assert.fail("Creation table should fail because of quota violation.");
+ } catch (Exception exp) {
+ assertTrue(exp instanceof IOException);
+ constraintViolated = true;
+ } finally {
+ assertTrue("Constraint not violated for table " + tableDescTwo.getTableName(),
+ constraintViolated);
+ }
+ List<RSGroupInfo> rsGroupInfoList = rsGroupAdmin.listRSGroups();
+ boolean foundTable2 = false;
+ boolean foundTable1 = false;
+ for(int i = 0; i < rsGroupInfoList.size(); i++){
+ if(rsGroupInfoList.get(i).getTables().contains(tableDescTwo.getTableName())){
+ foundTable2 = true;
+ }
+ if(rsGroupInfoList.get(i).getTables().contains(tableDescOne.getTableName())){
+ foundTable1 = true;
+ }
+ }
+ assertFalse("Found table2 in rsgroup list.", foundTable2);
+ assertTrue("Did not find table1 in rsgroup list", foundTable1);
+
+ TEST_UTIL.deleteTable(tableDescOne.getTableName());
+ admin.deleteNamespace(nspDesc.getName());
+ toggleQuotaCheckAndRestartMiniCluster(false);
+
+ }
+ private void toggleQuotaCheckAndRestartMiniCluster(boolean enable) throws Exception{
+ TEST_UTIL.shutdownMiniCluster();
+ TEST_UTIL.getConfiguration().setBoolean(QuotaUtil.QUOTA_CONF_KEY, enable);
+ TEST_UTIL.startMiniCluster(NUM_SLAVES_BASE - 1);
+ TEST_UTIL.getConfiguration().setInt(
+ ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART,
+ NUM_SLAVES_BASE - 1);
+ TEST_UTIL.getConfiguration().setBoolean(SnapshotManager.HBASE_SNAPSHOT_ENABLED, true);
+ initialize();
+ }
+
private void restartHBaseCluster() throws Exception {
LOG.info("\n\nShutting down cluster");
TEST_UTIL.shutdownMiniHBaseCluster();
http://git-wip-us.apache.org/repos/asf/hbase/blob/50055dbf/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java
----------------------------------------------------------------------
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 bd6c371..3e144d0 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
@@ -140,6 +140,12 @@ public class CreateTableProcedure
// 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());
+ }
+
releaseSyncLatch();
return;
}