You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2012/07/11 16:09:40 UTC
svn commit: r1360180 - in
/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver:
CompactSplitThread.java HRegionServer.java MemStoreFlusher.java
RSDumpServlet.java
Author: stack
Date: Wed Jul 11 14:09:39 2012
New Revision: 1360180
URL: http://svn.apache.org/viewvc?rev=1360180&view=rev
Log:
HBASE-2730 Expose RS work queue contents on web UI
Modified:
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/RSDumpServlet.java
Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java?rev=1360180&r1=1360179&r2=1360180&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java Wed Jul 11 14:09:39 2012
@@ -21,6 +21,8 @@ package org.apache.hadoop.hbase.regionse
import java.io.IOException;
import java.util.concurrent.Executors;
+import java.util.Iterator;
+import java.util.concurrent.BlockingQueue;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.ThreadFactory;
@@ -137,6 +139,40 @@ public class CompactSplitThread implemen
: largeCompactions.getQueue().size())
+ ", split_queue=" + splits.getQueue().size();
}
+
+ public String dumpQueue() {
+ StringBuffer queueLists = new StringBuffer();
+ queueLists.append("Compaction/Split Queue dump:\n");
+ queueLists.append(" LargeCompation Queue:\n");
+ BlockingQueue<Runnable> lq = largeCompactions.getQueue();
+ Iterator it = lq.iterator();
+ while(it.hasNext()){
+ queueLists.append(" "+it.next().toString());
+ queueLists.append("\n");
+ }
+
+ if( smallCompactions != null ){
+ queueLists.append("\n");
+ queueLists.append(" SmallCompation Queue:\n");
+ lq = smallCompactions.getQueue();
+ it = lq.iterator();
+ while(it.hasNext()){
+ queueLists.append(" "+it.next().toString());
+ queueLists.append("\n");
+ }
+ }
+
+ queueLists.append("\n");
+ queueLists.append(" Split Queue:\n");
+ lq = splits.getQueue();
+ it = lq.iterator();
+ while(it.hasNext()){
+ queueLists.append(" "+it.next().toString());
+ queueLists.append("\n");
+ }
+
+ return queueLists.toString();
+ }
public synchronized boolean requestSplit(final HRegion r) {
// don't split regions that are blocking
Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=1360180&r1=1360179&r2=1360180&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java Wed Jul 11 14:09:39 2012
@@ -248,6 +248,9 @@ public class HRegionServer implements HR
/** region server process name */
public static final String REGIONSERVER = "regionserver";
+
+ /** region server configuration name */
+ public static final String REGIONSERVER_CONF = "regionserver_conf";
/*
* Space is reserved in HRS constructor and then released when aborting to
@@ -1558,6 +1561,7 @@ public class HRegionServer implements HR
this.infoServer.addServlet("status", "/rs-status", RSStatusServlet.class);
this.infoServer.addServlet("dump", "/dump", RSDumpServlet.class);
this.infoServer.setAttribute(REGIONSERVER, this);
+ this.infoServer.setAttribute(REGIONSERVER_CONF, conf);
this.infoServer.start();
break;
} catch (BindException e) {
Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java?rev=1360180&r1=1360179&r2=1360180&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java Wed Jul 11 14:09:39 2012
@@ -472,6 +472,26 @@ class MemStoreFlusher extends HasThread
}
}
+ @Override
+ public String toString() {
+ return "flush_queue="
+ + flushQueue.size();
+ }
+
+ public String dumpQueue() {
+ StringBuilder queueList = new StringBuilder();
+ queueList.append("Flush Queue Queue dump:\n");
+ queueList.append(" Flush Queue:\n");
+ java.util.Iterator<FlushQueueEntry> it = flushQueue.iterator();
+
+ while(it.hasNext()){
+ queueList.append(" "+it.next().toString());
+ queueList.append("\n");
+ }
+
+ return queueList.toString();
+ }
+
interface FlushQueueEntry extends Delayed {}
/**
Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/RSDumpServlet.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/RSDumpServlet.java?rev=1360180&r1=1360179&r2=1360180&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/RSDumpServlet.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/RSDumpServlet.java Wed Jul 11 14:09:39 2012
@@ -44,6 +44,10 @@ public class RSDumpServlet extends State
HRegionServer hrs = (HRegionServer)getServletContext().getAttribute(
HRegionServer.REGIONSERVER);
assert hrs != null : "No RS in context!";
+
+ Configuration hrsconf = (Configuration)getServletContext().getAttribute(
+ HRegionServer.REGIONSERVER_CONF);
+ assert hrsconf != null : "No RS conf in context";
response.setContentType("text/plain");
OutputStream os = response.getOutputStream();
@@ -80,6 +84,30 @@ public class RSDumpServlet extends State
long tailKb = getTailKbParam(request);
LogMonitoring.dumpTailOfLogs(out, tailKb);
+ out.println("\n\nRS Queue:");
+ out.println(LINE);
+ if(isShowQueueDump(hrsconf)) {
+ dumpQueue(hrs, out);
+ }
+
out.flush();
- }
+ }
+
+ private boolean isShowQueueDump(Configuration conf){
+ return conf.getBoolean("hbase.regionserver.servlet.show.queuedump", true);
+ }
+
+ private void dumpQueue(HRegionServer hrs, PrintWriter out)
+ throws IOException {
+ // 1. Print out Compaction/Split Queue
+ out.println("Compaction/Split Queue summary: "
+ + hrs.compactSplitThread.toString() );
+ out.println(hrs.compactSplitThread.dumpQueue());
+
+ // 2. Print out flush Queue
+ out.println("\nFlush Queue summary: "
+ + hrs.cacheFlusher.toString());
+ out.println(hrs.cacheFlusher.dumpQueue());
+ }
+
}