You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2018/07/26 14:46:58 UTC

hbase git commit: HBASE-20949 Add logs for debugging

Repository: hbase
Updated Branches:
  refs/heads/master a392c017e -> 8b8de1f8a


HBASE-20949 Add logs for debugging


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

Branch: refs/heads/master
Commit: 8b8de1f8a77b5b9f6d4b8cfb7eeb3d545a69d0f2
Parents: a392c01
Author: zhangduo <zh...@apache.org>
Authored: Thu Jul 26 22:42:44 2018 +0800
Committer: zhangduo <zh...@apache.org>
Committed: Thu Jul 26 22:43:14 2018 +0800

----------------------------------------------------------------------
 .../apache/hadoop/hbase/procedure2/LockAndQueue.java  | 13 ++++++++++---
 .../master/procedure/MasterProcedureScheduler.java    | 14 +++++++-------
 2 files changed, 17 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/8b8de1f8/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/LockAndQueue.java
----------------------------------------------------------------------
diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/LockAndQueue.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/LockAndQueue.java
index ae8daa2..f86c7c8 100644
--- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/LockAndQueue.java
+++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/LockAndQueue.java
@@ -21,6 +21,8 @@ package org.apache.hadoop.hbase.procedure2;
 import java.util.function.Predicate;
 import java.util.stream.Stream;
 import org.apache.yetus.audience.InterfaceAudience;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Locking for mutual exclusion between procedures. Used only by procedure framework internally.
@@ -48,6 +50,7 @@ import org.apache.yetus.audience.InterfaceAudience;
  */
 @InterfaceAudience.Private
 public class LockAndQueue implements LockStatus {
+  private static final Logger LOG = LoggerFactory.getLogger(LockAndQueue.class);
   private final ProcedureDeque queue = new ProcedureDeque();
   private Procedure<?> exclusiveLockOwnerProcedure = null;
   private int sharedLock = 0;
@@ -111,11 +114,13 @@ public class LockAndQueue implements LockStatus {
    */
   public boolean trySharedLock(Procedure<?> proc) {
     if (hasExclusiveLock() && !hasLockAccess(proc)) {
+      LOG.debug("{} acquire shared lock {} failed", proc, this, new Exception());
       return false;
     }
     // If no one holds the xlock, then we are free to hold the sharedLock
     // If the parent proc or we have already held the xlock, then we return true here as
     // xlock is more powerful then shared lock.
+    LOG.debug("{} acquire shared lock {} succeeded", proc, this, new Exception());
     sharedLock++;
     return true;
   }
@@ -123,7 +128,8 @@ public class LockAndQueue implements LockStatus {
   /**
    * @return whether we should wake the procedures waiting on the lock here.
    */
-  public boolean releaseSharedLock() {
+  public boolean releaseSharedLock(Procedure<?> proc) {
+    LOG.debug("{} release shared lock {}", proc, this, new Exception());
     // hasExclusiveLock could be true, it usually means we acquire shared lock while we or our
     // parent have held the xlock. And since there is still an exclusive lock, we do not need to
     // wake any procedures.
@@ -186,7 +192,8 @@ public class LockAndQueue implements LockStatus {
 
   @Override
   public String toString() {
-    return "exclusiveLockOwner=" + (hasExclusiveLock() ? getExclusiveLockProcIdOwner() : "NONE") +
-      ", sharedLockCount=" + getSharedLockCount() + ", waitingProcCount=" + queue.size();
+    return String.format("%08x", hashCode()) + ": exclusiveLockOwner=" +
+      (hasExclusiveLock() ? getExclusiveLockProcIdOwner() : "NONE") + ", sharedLockCount=" +
+      getSharedLockCount() + ", waitingProcCount=" + queue.size();
   }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/8b8de1f8/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java
index 2a29ee1..4180a96 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java
@@ -526,7 +526,7 @@ public class MasterProcedureScheduler extends AbstractProcedureScheduler {
         return true;
       }
       if (!tableLock.tryExclusiveLock(procedure)) {
-        namespaceLock.releaseSharedLock();
+        namespaceLock.releaseSharedLock(procedure);
         waitProcedure(tableLock, procedure);
         logLockedResource(LockedResourceType.TABLE, table.getNameAsString());
         return true;
@@ -552,7 +552,7 @@ public class MasterProcedureScheduler extends AbstractProcedureScheduler {
       if (tableLock.releaseExclusiveLock(procedure)) {
         waitingCount += wakeWaitingProcedures(tableLock);
       }
-      if (namespaceLock.releaseSharedLock()) {
+      if (namespaceLock.releaseSharedLock(procedure)) {
         waitingCount += wakeWaitingProcedures(namespaceLock);
       }
       addToRunQueue(tableRunQueue, getTableQueue(table));
@@ -584,7 +584,7 @@ public class MasterProcedureScheduler extends AbstractProcedureScheduler {
       }
 
       if (!tableLock.trySharedLock(procedure)) {
-        namespaceLock.releaseSharedLock();
+        namespaceLock.releaseSharedLock(procedure);
         waitProcedure(tableLock, procedure);
         return null;
       }
@@ -606,11 +606,11 @@ public class MasterProcedureScheduler extends AbstractProcedureScheduler {
       final LockAndQueue namespaceLock = locking.getNamespaceLock(table.getNamespaceAsString());
       final LockAndQueue tableLock = locking.getTableLock(table);
       int waitingCount = 0;
-      if (tableLock.releaseSharedLock()) {
+      if (tableLock.releaseSharedLock(procedure)) {
         addToRunQueue(tableRunQueue, getTableQueue(table));
         waitingCount += wakeWaitingProcedures(tableLock);
       }
-      if (namespaceLock.releaseSharedLock()) {
+      if (namespaceLock.releaseSharedLock(procedure)) {
         waitingCount += wakeWaitingProcedures(namespaceLock);
       }
       wakePollIfNeeded(waitingCount);
@@ -784,7 +784,7 @@ public class MasterProcedureScheduler extends AbstractProcedureScheduler {
 
       final LockAndQueue namespaceLock = locking.getNamespaceLock(namespace);
       if (!namespaceLock.tryExclusiveLock(procedure)) {
-        systemNamespaceTableLock.releaseSharedLock();
+        systemNamespaceTableLock.releaseSharedLock(procedure);
         waitProcedure(namespaceLock, procedure);
         logLockedResource(LockedResourceType.NAMESPACE, namespace);
         return true;
@@ -811,7 +811,7 @@ public class MasterProcedureScheduler extends AbstractProcedureScheduler {
       if (namespaceLock.releaseExclusiveLock(procedure)) {
         waitingCount += wakeWaitingProcedures(namespaceLock);
       }
-      if (systemNamespaceTableLock.releaseSharedLock()) {
+      if (systemNamespaceTableLock.releaseSharedLock(procedure)) {
         addToRunQueue(tableRunQueue, getTableQueue(TableName.NAMESPACE_TABLE_NAME));
         waitingCount += wakeWaitingProcedures(systemNamespaceTableLock);
       }