[
https://issues.apache.org/jira/browse/HBASE-20975?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16577625#comment-16577625
]
Allan Yang edited comment on HBASE-20975 at 8/12/18 3:31 PM:
-------------------------------------------------------------
Rebasing, and trigger a run in branch-2.1. We need to fix it in branch-2.1
too. Otherwise, there will be some strange log:
{code}
2018-08-08 23:40:59,010 WARN [PEWorker-2] procedure2.ProcedureExecutor:
Usually this should not happen, we will release the lock before if the
procedure is finished, even if the holdLock is true, arrive here means we have
some holes where we do not release the lock. And the releaseLock below may fail
since the procedure may have already been deleted from the procedure store.
{code}
was (Author: allan163):
rebasing, and trigger a run in branch-2.1. We need to fix it in branch-2.1
too, otherwise, there will be some strange log:
{code}
2018-08-08 23:40:59,010 WARN [PEWorker-2] procedure2.ProcedureExecutor:
Usually this should not happen, we will release the lock before if the
procedure is finished, even if the holdLock is true, arri
ve here means we have some holes where we do not release the lock. And the
releaseLock below may fail since the procedure may have already been deleted
from the procedure store.
{code}
> Lock may not be taken or released while rolling back procedure
> --------------------------------------------------------------
>
> Key: HBASE-20975
> URL: https://issues.apache.org/jira/browse/HBASE-20975
> Project: HBase
> Issue Type: Sub-task
> Components: amv2
> Affects Versions: 2.1.0, 2.0.1
> Reporter: Allan Yang
> Assignee: Allan Yang
> Priority: Major
> Attachments: HBASE-20975.branch-2.0.001.patch,
> HBASE-20975.branch-2.0.002.patch, HBASE-20975.branch-2.0.003.patch,
> HBASE-20975.branch-2.0.004.patch, HBASE-20975.branch-2.0.005.patch,
> HBASE-20975.branch-2.1.001.patch
>
>
> Find this one when investigating HBASE-20921, too.
> Here is some code from executeRollback in ProcedureExecutor.java.
> {code}
> boolean reuseLock = false;
> while (stackTail --> 0) {
> final Procedure proc = subprocStack.get(stackTail);
> LockState lockState;
> //If reuseLock, then don't acquire the lock
> if (!reuseLock && (lockState = acquireLock(proc)) !=
> LockState.LOCK_ACQUIRED) {
> return lockState;
> }
> lockState = executeRollback(proc);
> boolean abortRollback = lockState != LockState.LOCK_ACQUIRED;
> abortRollback |= !isRunning() || !store.isRunning();
> //If the next procedure in the stack is the current one, then reuseLock
> = true
> reuseLock = stackTail > 0 && (subprocStack.get(stackTail - 1) == proc)
> && !abortRollback;
> //If reuseLock, don't releaseLock
> if (!reuseLock) {
> releaseLock(proc, false);
> }
> if (abortRollback) {
> return lockState;
> }
> subprocStack.remove(stackTail);
> if (proc.isYieldAfterExecutionStep(getEnvironment())) {
> return LockState.LOCK_YIELD_WAIT;
> }
> //But, here, lock is released no matter reuseLock is true or false
> if (proc != rootProc) {
> execCompletionCleanup(proc);
> }
> }
> {code}
> You can see my comments in the code above, reuseLock can cause the procedure
> executing(rollback) without a lock. Though I haven't found any bugs
> introduced by this issue, it is indeed a potential bug need to fix.
> I think we can just remove the reuseLock logic. Acquire and release lock
> every time.
> Find another case that during rolling back, the procedure's lock may not be
> released properly:
> see comment:
> https://issues.apache.org/jira/browse/HBASE-20975?focusedCommentId=16565123&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-16565123
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)