diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/TableStateManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/TableStateManager.java index c9daa0d..12db91e 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/TableStateManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/TableStateManager.java @@ -77,9 +77,10 @@ public class TableStateManager { * @param tableName table to change state for * @param newState new state * @param states states to check against + * @return null if succeed or table state if failed * @throws IOException */ - public boolean setTableStateIfInStates(TableName tableName, + public TableState.State setTableStateIfInStates(TableName tableName, TableState.State newState, TableState.State... states) throws IOException { @@ -91,9 +92,9 @@ public class TableStateManager { } if (currentState.inStates(states)) { udpateMetaState(tableName, newState); - return true; + return null; } else { - return false; + return currentState.getState(); } } finally { lock.writeLock().unlock(); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/DisableTableHandler.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/DisableTableHandler.java index ee77419..d34f25e 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/DisableTableHandler.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/DisableTableHandler.java @@ -90,11 +90,13 @@ public class DisableTableHandler extends EventHandler { // DISABLED or ENABLED. //TODO: reevaluate this since we have table locks now if (!skipTableStateCheck) { - if (!this.assignmentManager.getTableStateManager().setTableStateIfInStates( - this.tableName, TableState.State.DISABLING, - TableState.State.ENABLED)) { - LOG.info("Table " + tableName + " isn't enabled; skipping disable"); - throw new TableNotEnabledException(this.tableName); + TableState.State state = this.assignmentManager. + getTableStateManager().setTableStateIfInStates( + this.tableName, TableState.State.DISABLING, + TableState.State.ENABLED); + if (state!=null) { + LOG.info("Table " + tableName + " isn't enabled;is "+state.name()+"; skipping disable"); + throw new TableNotEnabledException(this.tableName+" state is "+state.name()); } } success = true; diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java index c7145fd..fd3d4c7 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java @@ -100,11 +100,13 @@ public class EnableTableHandler extends EventHandler { // After that, no other requests can be accepted until the table reaches // DISABLED or ENABLED. if (!skipTableStateCheck) { - if (!this.assignmentManager.getTableStateManager().setTableStateIfInStates( - this.tableName, TableState.State.ENABLING, - TableState.State.DISABLED)) { - LOG.info("Table " + tableName + " isn't disabled; skipping enable"); - throw new TableNotDisabledException(this.tableName); + TableState.State state = this.assignmentManager + .getTableStateManager().setTableStateIfInStates( + this.tableName, TableState.State.ENABLING, + TableState.State.DISABLED); + if (state!=null) { + LOG.info("Table " + tableName + " isn't disabled;is "+state.name()+"; skipping enable"); + throw new TableNotDisabledException(this.tableName+" state is "+state.name()); } } success = true; diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.java index de79a91..351751e3 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.java @@ -294,9 +294,11 @@ public class DisableTableProcedure // set the state later on). A quick state check should be enough for us to move forward. TableStateManager tsm = env.getMasterServices().getAssignmentManager().getTableStateManager(); - if (!tsm.getTableState(tableName).equals(TableState.State.ENABLED)) { - LOG.info("Table " + tableName + " isn't enabled; skipping disable"); - setFailure("master-disable-table", new TableNotEnabledException(tableName)); + TableState.State state = tsm.getTableState(tableName); + if(!state.equals(TableState.State.ENABLED)){ + LOG.info("Table " + tableName + " isn't enabled;is "+state.name()+"; skipping disable"); + setFailure("master-disable-table", new TableNotEnabledException( + tableName+" state is "+state.name())); canTableBeDisabled = false; } } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.java index 8474e85..ef13d07 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.java @@ -314,9 +314,11 @@ public class EnableTableProcedure // was implemented. With table lock, there is no need to set the state here (it will // set the state later on). A quick state check should be enough for us to move forward. TableStateManager tsm = env.getMasterServices().getAssignmentManager().getTableStateManager(); - if (!tsm.getTableState(tableName).equals(TableState.State.DISABLED)) { - LOG.info("Table " + tableName + " isn't disabled; skipping enable"); - setFailure("master-enable-table", new TableNotDisabledException(this.tableName)); + TableState.State state = tsm.getTableState(tableName); + if(!state.equals(TableState.State.DISABLED)){ + LOG.info("Table " + tableName + " isn't disabled;is "+state.name()+"; skipping enable"); + setFailure("master-enable-table", new TableNotDisabledException( + this.tableName+" state is "+state.name())); canTableBeEnabled = false; } }