Index: hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (revision 1351318) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (working copy) @@ -1714,7 +1714,16 @@ if (isDisabledorDisablingRegionInRIT(region)) { return; } - setEnabledTable(region); + // In case of assign from EnableTableHandler table state is ENABLING. Any how + // EnableTableHandler will set ENABLED after assigning all the the table regions. If we + // try to set to ENABLED directly then client api may think ENABLE table is completed. + // When we have a case like all the regions are added directly into META and we call + // assignRegion then we need to make the table ENABLED. Hence in such case the table + // will not be in ENABLING or ENABLED state. + if (isNotEnabledorEnablingTable(region)) { + LOG.debug("Setting table " + region.getTableNameAsString() + " to ENABLED state."); + setEnabledTable(region); + } } } if (setOfflineInZK && versionOfOfflineNode == -1) { @@ -1806,6 +1815,11 @@ } + private boolean isNotEnabledorEnablingTable(final HRegionInfo region) { + return !zkTable.isEnablingTable(region.getRegionNameAsString()) + && !zkTable.isEnabledTable(region.getRegionNameAsString()); + } + private boolean isDisabledorDisablingRegionInRIT(final HRegionInfo region) { String tableName = region.getTableNameAsString(); boolean disabled = this.zkTable.isDisabledTable(tableName);