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);
}