[
https://issues.apache.org/jira/browse/HBASE-6469?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13509470#comment-13509470
]
Jonathan Hsieh commented on HBASE-6469:
---------------------------------------
[~ndimiduk] Give some more thought, based on what I've been working on
recently, doing option 3 is a good stopgap, but only exposes a way to "fix" the
problem when it happens but I don't think it fundamentally fix the problem.
I think the right way would essentially do something like 2pc where everyone
would agree that they are enabling/disabling logging this decision, and then
the master would "commit" the new table state. This commit would be logged, so
that if any rs/master failed along the way, when they be able to recover. I'm
actually thinking this logging state can be held in META as extra columns
associated with each region. The overall table state would either need to be
held in a special meta row (maybe the first?) or in hdfs.
> Failure on enable/disable table will cause table state in zk to be left as
> enabling/disabling until master is restart
> ---------------------------------------------------------------------------------------------------------------------
>
> Key: HBASE-6469
> URL: https://issues.apache.org/jira/browse/HBASE-6469
> Project: HBase
> Issue Type: Bug
> Affects Versions: 0.94.2, 0.96.0
> Reporter: Enis Soztutar
> Assignee: Nick Dimiduk
> Fix For: 0.96.0, 0.94.4
>
>
> In Enable/DisableTableHandler code, if something goes wrong in handling, the
> table state in zk is left as ENABLING / DISABLING. After that we cannot force
> any more action from the API or CLI, and the only recovery path is restarting
> the master.
> {code}
> if (done) {
> // Flip the table to enabled.
> this.assignmentManager.getZKTable().setEnabledTable(
> this.tableNameStr);
> LOG.info("Table '" + this.tableNameStr
> + "' was successfully enabled. Status: done=" + done);
> } else {
> LOG.warn("Table '" + this.tableNameStr
> + "' wasn't successfully enabled. Status: done=" + done);
> }
> {code}
> Here, if done is false, the table state is not changed. There is also no way
> to set skipTableStateCheck from cli / api.
> We have run into this issue a couple of times before.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira