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