[ https://issues.apache.org/jira/browse/HBASE-5494?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13268102#comment-13268102 ]
stack commented on HBASE-5494: ------------------------------ bq. I think it makes sense to have a separate JIRA (or perhaps another patch for the same JIRA?) to address this... Yes. Would be a separate JIRA. I'm just trying to have it so it is a continuation of the work done here rather than a different table locking facility that runs beside this one because we need read/writes and that there can be multiple read locks outstanding at anyone time; one per region currently splitting/merging. On region-level locks, we do not need this I'd say (Already, region changes go via zk and there'll be failed transitions if concurrent operators try manipulate a single region given we usually check znode sequence id before we go forward moving a region to a new state). You thought this overkill for your case? http://zookeeper.apache.org/doc/r3.1.2/recipes.html#Shared+Locks That is fine. Do you think we could backfill it later underneath the patch attached here? On the lock being left in place on master crash, whats wrong w/ that? Thats sort of what we want I'd say. Or more, what we really want is that when the new master comes up, he finishes off what the previous master was at. To that end, should lock and unlock be public apis on the master at all, but rather just internal primitives used by the master doing disable/enable? If you disable a table, the first think you do is obtain a lock and then when done, you let it go on completion. A new master that comes up after a previous master has crashed and sees a table in disabling state should go ahead and complete the disable moving the table state to disabled and when done, then it undoes the unlock to finish the schema change transaction; you'd have to let the second master be able to undo the lock (Over in accumulo they have a system where they allow describing a macro change in terms of distinct steps; the steps are posted to zk and then acted on. We don't have to be that smart just yet... we can hardcode disable/enable for now). Good stuff Alex. > Introduce a zk hosted table-wide read/write lock so only one table operation > at a time > -------------------------------------------------------------------------------------- > > Key: HBASE-5494 > URL: https://issues.apache.org/jira/browse/HBASE-5494 > Project: HBase > Issue Type: Improvement > Reporter: stack > Attachments: D2997.3.patch, D2997.4.patch > > > I saw this facility over in the accumulo code base. > Currently we just try to sort out the mess when splits come in during an > online schema edit; somehow we figure we can figure all possible region > transition combinations and make the right call. > We could try and narrow the number of combinations by taking out a zk table > lock when doing table operations. > For example, on split or merge, we could take a read-only lock meaning the > table can't be disabled while these are running. > We could then take a write only lock if we want to ensure the table doesn't > change while disabling or enabling process is happening. > Shouldn't be too hard to add. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira