You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zg...@apache.org on 2019/05/29 07:22:10 UTC

[hbase] 01/02: HBASE-22486 Fix flaky test TestLockManager

This is an automated email from the ASF dual-hosted git repository.

zghao pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 21241d03d9406ba3990c539b72da0901fbcf15b7
Author: Guanghao <zg...@apache.org>
AuthorDate: Wed May 29 10:58:10 2019 +0800

    HBASE-22486 Fix flaky test TestLockManager
---
 .../java/org/apache/hadoop/hbase/master/locking/LockProcedure.java  | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/locking/LockProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/locking/LockProcedure.java
index 3a87bbc..dc1e5bc 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/locking/LockProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/locking/LockProcedure.java
@@ -90,6 +90,8 @@ public final class LockProcedure extends Procedure<MasterProcedureEnv>
   // DEFAULT_LOCAL_MASTER_LOCKS_TIMEOUT_MS (10 min) so that there is no need to heartbeat.
   private final CountDownLatch lockAcquireLatch;
 
+  private volatile boolean suspended = false;
+
   @Override
   public TableName getTableName() {
     return tableName;
@@ -219,9 +221,10 @@ public final class LockProcedure extends Procedure<MasterProcedureEnv>
     locked.set(false);
     // Maybe timeout already awakened the event and the procedure has finished.
     synchronized (event) {
-      if (!event.isReady()) {
+      if (!event.isReady() && suspended) {
         setState(ProcedureProtos.ProcedureState.RUNNABLE);
         event.wake(env.getProcedureScheduler());
+        suspended = false;
       }
     }
   }
@@ -244,6 +247,7 @@ public final class LockProcedure extends Procedure<MasterProcedureEnv>
       event.suspend();
       event.suspendIfNotReady(this);
       setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);
+      suspended = true;
     }
     throw new ProcedureSuspendedException();
   }