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 1521962) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java (working copy) @@ -367,7 +367,23 @@ assertTrue(exceptionThrown); } } - /** + + @Test + public void testIsEnabledOrDisabledOnUnknownTable() throws Exception { + try { + admin.isTableEnabled(Bytes.toBytes("unkownTable")); + fail("Test should fail if isTableEnabled called on unknown table."); + } catch (IOException e) { + } + + try { + admin.isTableDisabled(Bytes.toBytes("unkownTable")); + fail("Test should fail if isTableDisabled called on unknown table."); + } catch (IOException e) { + } + } + + /** * Verify schema modification takes. * @throws IOException * @throws InterruptedException Index: hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java =================================================================== --- hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java (revision 1521962) +++ hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java (working copy) @@ -772,7 +772,13 @@ boolean enabled = false; long start = EnvironmentEdgeManager.currentTimeMillis(); for (int tries = 0; tries < (this.numRetries * this.retryLongerMultiplier); tries++) { - enabled = isTableEnabled(tableName) && isTableAvailable(tableName); + try { + enabled = isTableEnabled(tableName); + } catch (TableNotFoundException tnfe) { + // wait for table to be created + enabled = false; + } + enabled = enabled && isTableAvailable(tableName); if (enabled) { break; } @@ -1001,12 +1007,23 @@ return failed.toArray(new HTableDescriptor[failed.size()]); } + /* + * Checks whether table exists. If not, throws TableNotFoundException + * @param tableName + */ + private void checkTableExistence(TableName tableName) throws IOException { + if (!tableExists(tableName)) { + throw new TableNotFoundException(tableName); + } + } + /** * @param tableName name of table to check * @return true if table is on-line * @throws IOException if a remote or network exception occurs */ public boolean isTableEnabled(TableName tableName) throws IOException { + checkTableExistence(tableName); return connection.isTableEnabled(tableName); } @@ -1026,6 +1043,7 @@ * @throws IOException if a remote or network exception occurs */ public boolean isTableDisabled(TableName tableName) throws IOException { + checkTableExistence(tableName); return connection.isTableDisabled(tableName); }