You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by bu...@apache.org on 2018/08/14 18:04:23 UTC

[09/15] hbase git commit: HBASE-20975 Lock may not be taken or released while rolling back procedure

HBASE-20975 Lock may not be taken or released while rolling back procedure


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/a07e7556
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/a07e7556
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/a07e7556

Branch: refs/heads/HBASE-20387
Commit: a07e755625382d3904c935c21a4f240ede6d2f43
Parents: 21e0281
Author: Allan Yang <al...@apache.org>
Authored: Mon Aug 13 20:23:04 2018 +0800
Committer: Allan Yang <al...@apache.org>
Committed: Mon Aug 13 20:23:04 2018 +0800

----------------------------------------------------------------------
 .../hadoop/hbase/procedure2/ProcedureExecutor.java  | 16 ++++------------
 1 file changed, 4 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/a07e7556/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java
----------------------------------------------------------------------
diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java
index 2ee80d7..464eaeb 100644
--- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java
+++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java
@@ -1363,29 +1363,21 @@ public class ProcedureExecutor<TEnvironment> {
     assert subprocStack != null : "Called rollback with no steps executed rootProc=" + rootProc;
 
     int stackTail = subprocStack.size();
-    boolean reuseLock = false;
-    while (stackTail --> 0) {
+    while (stackTail-- > 0) {
       Procedure<TEnvironment> proc = subprocStack.get(stackTail);
 
-      LockState lockState;
-      if (!reuseLock && (lockState = acquireLock(proc)) != LockState.LOCK_ACQUIRED) {
+      LockState lockState = acquireLock(proc);
+      if (lockState != LockState.LOCK_ACQUIRED) {
         // can't take a lock on the procedure, add the root-proc back on the
         // queue waiting for the lock availability
         return lockState;
       }
 
       lockState = executeRollback(proc);
+      releaseLock(proc, false);
       boolean abortRollback = lockState != LockState.LOCK_ACQUIRED;
       abortRollback |= !isRunning() || !store.isRunning();
 
-      // If the next procedure is the same to this one
-      // (e.g. StateMachineProcedure reuse the same instance)
-      // we can avoid to lock/unlock each step
-      reuseLock = stackTail > 0 && (subprocStack.get(stackTail - 1) == proc) && !abortRollback;
-      if (!reuseLock && proc.hasLock()) {
-        releaseLock(proc, false);
-      }
-
       // allows to kill the executor before something is stored to the wal.
       // useful to test the procedure recovery.
       if (abortRollback) {