### Eclipse Workspace Patch 1.0 #P apache-hbase-trunk Index: hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java (revision 1374131) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java (working copy) @@ -521,6 +521,18 @@ deleteTable(Bytes.toBytes(tableName)); } + public void deleteTableAsync(final byte[] tableName) throws IOException{ + execute(new MasterAdminCallable() { + @Override + public Void call() throws ServiceException { + DeleteTableRequest req = RequestConverter + .buildDeleteTableRequest(tableName); + masterAdmin.deleteTable(null, req); + return null; + } + }); + } + /** * Deletes a table. * Synchronous operation. @@ -532,16 +544,7 @@ HTableDescriptor.isLegalTableName(tableName); HRegionLocation firstMetaServer = getFirstMetaServerForTable(tableName); boolean tableExists = true; - - execute(new MasterAdminCallable() { - @Override - public Void call() throws ServiceException { - DeleteTableRequest req = RequestConverter.buildDeleteTableRequest(tableName); - masterAdmin.deleteTable(null,req); - return null; - } - }); - + deleteTableAsync(tableName); // Wait until all regions deleted ClientProtocol server = connection.getClient(firstMetaServer.getHostname(), firstMetaServer.getPort()); Index: hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java (revision 1374131) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java (working copy) @@ -833,6 +833,21 @@ assertTrue((entryList.get(2).getValue() - entryList.get(0).getValue()) < 2); } + + @Test + public void testEnableTableAndDeleteTable() throws Exception { + byte[] TABLENAME = Bytes.toBytes("TestEnableAndDelete"); + TEST_UTIL.createTable(TABLENAME, HConstants.CATALOG_FAMILY).close(); + TEST_UTIL.waitTableAvailable(TABLENAME, 5000); + this.admin.disableTable(TABLENAME); + this.admin.deleteTableAsync(TABLENAME); + this.admin.enableTable(TABLENAME); + assertFalse(this.admin.isTableDisabled(TABLENAME)); + assertFalse(this.admin.isTableEnabled(TABLENAME)); + assertFalse(this.admin.getClusterStatus().getRegionsInTransition() != null); + assertFalse(this.admin.isTableAvailable(TABLENAME)); + } + /** * Multi-family scenario. Tests forcing split from client and * having scanners successfully ride over split. Index: hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java (revision 1374131) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java (working copy) @@ -125,6 +125,11 @@ // tables are onlined. List regionsInMeta; regionsInMeta = MetaReader.getTableRegions(this.ct, tableName, true); + if (regionsInMeta == null || regionsInMeta.size() == 0) { + LOG.warn("Table is deleted already, clean table state in zk. see HBASE-6588."); + this.assignmentManager.getZKTable().setDeletedTable(tableNameStr); + return; + } int countOfRegionsInTable = regionsInMeta.size(); List regions = regionsToAssign(regionsInMeta); int regionsCount = regions.size();