Repository: hbase Updated Branches: refs/heads/branch-1 4ba57cb93 -> 5f5cdaae9
HBASE-15720 Print row locks at the debug dump page Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/5f5cdaae Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/5f5cdaae Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/5f5cdaae Branch: refs/heads/branch-1 Commit: 5f5cdaae9a0b056dabb36b6866ef06b6aaa99190 Parents: 4ba57cb Author: chenheng <chenh...@apache.org> Authored: Thu Apr 28 11:40:29 2016 +0800 Committer: chenheng <chenh...@apache.org> Committed: Thu Apr 28 11:46:06 2016 +0800 ---------------------------------------------------------------------- .../hadoop/hbase/regionserver/HRegion.java | 11 ++++++++++ .../hbase/regionserver/RSDumpServlet.java | 21 +++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/5f5cdaae/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index e620c60..a9ca483 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -5248,6 +5248,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi rowLockContext.cleanUp(); throw new IOException("Timed out waiting for lock for row: " + rowKey); } + rowLockContext.setThreadName(Thread.currentThread().getName()); return result; } catch (InterruptedException ie) { LOG.warn("Thread interrupted waiting for lock on row: " + rowKey); @@ -5275,6 +5276,10 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi } } + public ConcurrentHashMap<HashedBytes, RowLockContext> getLockedRows() { + return lockedRows; + } + @VisibleForTesting class RowLockContext { private final HashedBytes row; @@ -5282,6 +5287,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi final AtomicBoolean usable = new AtomicBoolean(true); final AtomicInteger count = new AtomicInteger(0); final Object lock = new Object(); + private String threadName; RowLockContext(HashedBytes row) { this.row = row; @@ -5320,12 +5326,17 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi } } + public void setThreadName(String threadName) { + this.threadName = threadName; + } + @Override public String toString() { return "RowLockContext{" + "row=" + row + ", readWriteLock=" + readWriteLock + ", count=" + count + + ", threadName=" + threadName + '}'; } } http://git-wip-us.apache.org/repos/asf/hbase/blob/5f5cdaae/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSDumpServlet.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSDumpServlet.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSDumpServlet.java index 77b68ec..0c69bd9 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSDumpServlet.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSDumpServlet.java @@ -23,7 +23,6 @@ import java.io.OutputStream; import java.io.PrintStream; import java.io.PrintWriter; import java.util.Date; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -69,6 +68,10 @@ public class RSDumpServlet extends StateDumpServlet { out.println(LINE); TaskMonitor.get().dumpAsText(out); + out.println("\n\nRowLocks:"); + out.println(LINE); + dumpRowLock(hrs, out); + out.println("\n\nExecutors:"); out.println(LINE); dumpExecutors(hrs.getExecutorService(), out); @@ -100,6 +103,22 @@ public class RSDumpServlet extends StateDumpServlet { out.flush(); } + public static void dumpRowLock(HRegionServer hrs, PrintWriter out) { + StringBuilder sb = new StringBuilder(); + for (Region region : hrs.getOnlineRegions()) { + HRegion hRegion = (HRegion)region; + if (hRegion.getLockedRows().size() > 0) { + for (HRegion.RowLockContext rowLockContext : hRegion.getLockedRows().values()) { + sb.setLength(0); + sb.append(hRegion.getTableDesc().getTableName()).append(",") + .append(hRegion.getRegionInfo().getEncodedName()).append(","); + sb.append(rowLockContext.toString()); + out.println(sb.toString()); + } + } + } + } + public static void dumpQueue(HRegionServer hrs, PrintWriter out) throws IOException { if (hrs.compactSplitThread != null) {