diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKTableStateClientSideReader.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKTableStateClientSideReader.java index 03579ff..943b79d 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKTableStateClientSideReader.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKTableStateClientSideReader.java @@ -139,6 +139,19 @@ public class ZKTableStateClientSideReader { } /** + * Gets a list of all the tables set as enabling or enabled in zookeeper. + * @param zkw ZooKeeperWatcher instance to use + * @return Set of enabling / enabled tables, empty Set if none + * @throws KeeperException + * @throws InterruptedException + */ + public static Set getEnablingAndEnabledTables(ZooKeeperWatcher zkw) + throws KeeperException, InterruptedException { + return getTablesInStates(zkw, ZooKeeperProtos.Table.State.ENABLING, + ZooKeeperProtos.Table.State.ENABLED); + } + + /** * Gets a list of tables that are set as one of the passing in states in zookeeper. * @param zkw ZooKeeperWatcher instance to use * @param states the list of states that a table could be in diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java index 1512193..9f56f14 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java @@ -3261,11 +3261,12 @@ public class HBaseFsck extends Configured implements Closeable { ZooKeeperWatcher zkw = createZooKeeperWatcher(); try { - Set enablingTables = ZKTableStateClientSideReader.getEnablingTables(zkw); + Set enablingAndEnabledTables = + ZKTableStateClientSideReader.getEnablingAndEnabledTables(zkw); String msg; TableInfo tableInfo; - for (TableName tableName : enablingTables) { + for (TableName tableName : enablingAndEnabledTables) { // Check whether the table exists in hbase tableInfo = tablesInfo.get(tableName); if (tableInfo != null) { @@ -3292,8 +3293,8 @@ public class HBaseFsck extends Configured implements Closeable { } catch (CoordinatedStateException e) { // This exception should not happen here LOG.error( - "Got a CoordinatedStateException while fixing the ENABLING table znode " + tableName, - e); + "Got a CoordinatedStateException while fixing the ENABLING / ENABLED table znode " + + tableName, e); } } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java index 364446a..bbd9b09 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java @@ -2540,11 +2540,17 @@ public class TestHBaseFsck { */ @Test public void testOrphanedTableZNode() throws Exception { - TableName table = TableName.valueOf("testOrphanedZKTableEntry"); + testOrphanedTableZNode(ZooKeeperProtos.Table.State.ENABLING); + testOrphanedTableZNode(ZooKeeperProtos.Table.State.ENABLED); + } + + public void testOrphanedTableZNode(ZooKeeperProtos.Table.State state) throws Exception { + String tablename = "testOrphanedZKTableEntryIn" + state; + TableName table = TableName.valueOf(tablename); try { TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager().getTableStateManager() - .setTableState(table, ZooKeeperProtos.Table.State.ENABLING); + .setTableState(table, state); try { setupTable(table);