You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cu...@apache.org on 2006/10/24 23:23:48 UTC

svn commit: r467492 - in /lucene/hadoop/trunk: CHANGES.txt src/java/org/apache/hadoop/mapred/StatusHttpServer.java

Author: cutting
Date: Tue Oct 24 14:23:48 2006
New Revision: 467492

URL: http://svn.apache.org/viewvc?view=rev&rev=467492
Log:
HADOOP-625.  Add a servlet to all http daemons that displays a stack dump, useful for debugging.

Modified:
    lucene/hadoop/trunk/CHANGES.txt
    lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/StatusHttpServer.java

Modified: lucene/hadoop/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/CHANGES.txt?view=diff&rev=467492&r1=467491&r2=467492
==============================================================================
--- lucene/hadoop/trunk/CHANGES.txt (original)
+++ lucene/hadoop/trunk/CHANGES.txt Tue Oct 24 14:23:48 2006
@@ -34,6 +34,9 @@
  9. HADOOP-610.  Fix TaskTracker to survive more exceptions, keeping
     tasks from becoming lost.  (omalley via cutting)
 
+10. HADOOP-625.  Add a servlet to all http daemons that displays a
+    stack dump, useful for debugging.  (omalley via cutting)
+
 
 Release 0.7.2 - 2006-10-18
 

Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/StatusHttpServer.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/StatusHttpServer.java?view=diff&rev=467492&r1=467491&r2=467492
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/StatusHttpServer.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/StatusHttpServer.java Tue Oct 24 14:23:48 2006
@@ -15,14 +15,18 @@
  */
 package org.apache.hadoop.mapred;
 
-import java.io.File;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
+import java.io.*;
 import java.net.URL;
 import java.net.URLDecoder;
 
+import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.util.*;
 import org.mortbay.http.HttpContext;
 import org.mortbay.http.handler.ResourceHandler;
 import org.mortbay.http.SocketListener;
@@ -44,6 +48,8 @@
   private SocketListener listener;
   private boolean findPort;
   private WebApplicationContext webAppContext;
+  private static final Log LOG =
+    LogFactory.getLog(StatusHttpServer.class.getName());
   
   /**
    * Create a status server on the given port.
@@ -80,7 +86,8 @@
 
     // set up the context for "/" jsp files
     webAppContext = 
-      webServer.addWebApplication("/", appDir + File.separator + name);      
+      webServer.addWebApplication("/", appDir + File.separator + name);
+    addServlet("stacks", "/stacks", StackServlet.class);
   }
 
   /**
@@ -207,4 +214,23 @@
   public void stop() throws InterruptedException {
     webServer.stop();
   }
+  
+  /**
+   * A very simple servlet to serve up a text representation of the current
+   * stack traces. It both returns the stacks to the caller and logs them.
+   * Currently the stack traces are done sequentially rather than exactly the
+   * same data.
+   * @author Owen O'Malley
+   */
+  public static class StackServlet extends HttpServlet {
+    public void doGet(HttpServletRequest request, 
+                      HttpServletResponse response
+                     ) throws ServletException, IOException {
+      OutputStream outStream = response.getOutputStream();
+      ReflectionUtils.printThreadInfo(new PrintWriter(outStream), "");
+      outStream.close();
+      ReflectionUtils.logThreadInfo(LOG, "jsp requested", 1);      
+    }
+  }
+
 }