Index: src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (revision 1552707) +++ src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (working copy) @@ -2810,8 +2810,15 @@ + " to ENABLED state."); // enableTable in sync way during master startup, // no need to invoke coprocessor - new EnableTableHandler(this.master, tableName.getBytes(), - catalogTracker, this, true).process(); + EnableTableHandler eth = null; + try { + eth = + new EnableTableHandler(this.master, tableName.getBytes(), catalogTracker, this, true); + } catch (TableNotFoundException e) { + LOG.warn("Table " + tableName + " not found in .META. to recover."); + continue; + } + if (eth != null) eth.process(); } } } Index: src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java (revision 1552707) +++ src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java (working copy) @@ -73,6 +73,7 @@ } try { this.assignmentManager.getZKTable().removeEnablingTable(tableNameStr, true); + throw new TableNotFoundException(tableNameStr); } catch (KeeperException e) { // TODO : Use HBCK to clear such nodes LOG.warn("Failed to delete the ENABLING node for the table " + tableNameStr Index: src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java =================================================================== --- src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java (revision 1552707) +++ src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java (working copy) @@ -960,6 +960,37 @@ } /** + * Test verifies whether stale znodes of unknown tables as for the hbase:meta will be removed or + * not. + * @throws KeeperException + * @throws IOException + * @throws Exception + */ + @Test + public void testMasterRestartShouldRemoveStaleZnodesOfUnknownTableAsForMeta() + throws KeeperException, IOException, Exception { + List destServers = new ArrayList(1); + destServers.add(SERVERNAME_A); + Mockito.when(this.serverManager.getOnlineServersList()).thenReturn(destServers); + Mockito.when(this.serverManager.isServerOnline(SERVERNAME_A)).thenReturn(true); + HTU.getConfiguration().setInt(HConstants.MASTER_PORT, 0); + Server server = new HMaster(HTU.getConfiguration()); + Whitebox.setInternalState(server, "serverManager", this.serverManager); + AssignmentManagerWithExtrasForTesting am = setUpMockedAssignmentManager(server, + this.serverManager); + try { + String tableName = "dummyTable"; + am.enablingTables.put(tableName, null); + // set table in enabling state. + am.getZKTable().setEnablingTable(tableName); + am.joinCluster(); + assertFalse("Table should not be present in zookeeper.", + am.getZKTable().isTablePresent(tableName)); + } finally { + } + } + + /** * Test verifies whether all the enabling table regions assigned only once during master startup. * * @throws KeeperException