From 9dbddf3da40e30a3658a60bde2337bf3a2f8207c Mon Sep 17 00:00:00 2001 From: Jean-Daniel Cryans Date: Fri, 31 Oct 2008 01:38:50 +0000 Subject: [PATCH] HBASE-785 Remove InfoServer, use HADOOP-3824 StatusHttpServer instead (requires hadoop 0.19) git-svn-id: https://svn.apache.org/repos/asf/hadoop/hbase/trunk@709322 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 + .../apache/hadoop/hbase/util/InfoServer.java | 189 ++---------------- src/webapps/master/master.jsp | 1 - 3 files changed, 24 insertions(+), 168 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index e19c4bc4181..b6d5a71fc0f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -87,6 +87,8 @@ Release 0.19.0 - Unreleased HBASE-949 Add an HBase Manual HBASE-839 Update hadoop libs in hbase; move hbase TRUNK on to an hadoop 0.19.0 RC + HBASE-785 Remove InfoServer, use HADOOP-3824 StatusHttpServer + instead (requires hadoop 0.19) NEW FEATURES HBASE-875 Use MurmurHash instead of JenkinsHash [in bloomfilters] diff --git a/src/java/org/apache/hadoop/hbase/util/InfoServer.java b/src/java/org/apache/hadoop/hbase/util/InfoServer.java index 3bc2d91f327..02ddd3404fe 100644 --- a/src/java/org/apache/hadoop/hbase/util/InfoServer.java +++ b/src/java/org/apache/hadoop/hbase/util/InfoServer.java @@ -22,15 +22,9 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.net.URL; -import javax.servlet.http.HttpServlet; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.hadoop.mapred.StatusHttpServer; +import org.apache.hadoop.http.HttpServer; import org.mortbay.http.HttpContext; -import org.mortbay.http.SocketListener; import org.mortbay.http.handler.ResourceHandler; -import org.mortbay.jetty.servlet.WebApplicationContext; /** * Create a Jetty embedded server to answer http requests. The primary goal @@ -40,18 +34,7 @@ import org.mortbay.jetty.servlet.WebApplicationContext; * "/static/" -> points to common static files (src/webapps/static) * "/" -> the jsp server code from (src/webapps/) */ -public class InfoServer { - // Bulk of this class is copied from - // {@link org.apache.hadoop.mapred.StatusHttpServer}. StatusHttpServer - // is not amenable to subclassing. It keeps webAppContext inaccessible - // and will find webapps only in the jar the class StatusHttpServer was - // loaded from. - private static final Log LOG = LogFactory.getLog(InfoServer.class.getName()); - private org.mortbay.jetty.Server webServer; - private SocketListener listener; - private boolean findPort; - private WebApplicationContext webAppContext; - +public class InfoServer extends HttpServer{ /** * Create a status server on the given port. * The jsp scripts are taken from src/webapps/name. @@ -62,17 +45,9 @@ public class InfoServer { */ public InfoServer(String name, String bindAddress, int port, boolean findPort) throws IOException { - this.webServer = new org.mortbay.jetty.Server(); - this.findPort = findPort; - this.listener = new SocketListener(); - this.listener.setPort(port); - this.listener.setHost(bindAddress); - this.webServer.addListener(listener); - - // Set up the context for "/static/*" - String appDir = getWebAppsPath(); + super(name, bindAddress, port, findPort); - // Set up the context for "/logs/" if "hadoop.log.dir" property is defined. + // Set up the context for "/logs/" if "hbase.log.dir" property is defined. String logDir = System.getProperty("hbase.log.dir"); if (logDir != null) { HttpContext logContext = new HttpContext(); @@ -81,25 +56,30 @@ public class InfoServer { logContext.addHandler(new ResourceHandler()); webServer.addContext(logContext); } - - HttpContext staticContext = new HttpContext(); - staticContext.setContextPath("/static/*"); - staticContext.setResourceBase(appDir + "/static"); - staticContext.addHandler(new ResourceHandler()); - this.webServer.addContext(staticContext); - - // set up the context for "/" jsp files - String webappDir = getWebAppDir(name); - this.webAppContext = - this.webServer.addWebApplication("/", webappDir); if (name.equals("master")) { // Put up the rest webapp. this.webServer.addWebApplication("/api", getWebAppDir("rest")); } - addServlet("stacks", "/stacks", StatusHttpServer.StackServlet.class); - addServlet("logLevel", "/logLevel", org.apache.hadoop.log.LogLevel.Servlet.class); } + /** + * Get the pathname to the path files. + * @param path Path to find. + * @return the pathname as a URL + */ + private static String getWebAppsPath(final String path) throws IOException { + URL url = InfoServer.class.getClassLoader().getResource(path); + if (url == null) + throw new IOException("webapps not found in CLASSPATH: " + path); + return url.toString(); + } + + /** + * Get the path for this web app + * @param webappName web app + * @return path + * @throws IOException + */ public static String getWebAppDir(final String webappName) throws IOException { String webappDir = null; try { @@ -110,130 +90,5 @@ public class InfoServer { } return webappDir; } - - /** - * Set a value in the webapp context. These values are available to the jsp - * pages as "application.getAttribute(name)". - * @param name The name of the attribute - * @param value The value of the attribute - */ - public void setAttribute(String name, Object value) { - this.webAppContext.setAttribute(name, value); - } - - /** - * Add a servlet in the server. - * @param name The name of the servlet (can be passed as null) - * @param pathSpec The path spec for the servlet - * @param servletClass The servlet class - */ - public void addServlet(String name, String pathSpec, - Class servletClass) { - WebApplicationContext context = webAppContext; - try { - if (name == null) { - context.addServlet(pathSpec, servletClass.getName()); - } else { - context.addServlet(name, pathSpec, servletClass.getName()); - } - } catch (ClassNotFoundException ex) { - throw makeRuntimeException("Problem instantiating class", ex); - } catch (InstantiationException ex) { - throw makeRuntimeException("Problem instantiating class", ex); - } catch (IllegalAccessException ex) { - throw makeRuntimeException("Problem instantiating class", ex); - } - } - private static RuntimeException makeRuntimeException(String msg, Throwable cause) { - RuntimeException result = new RuntimeException(msg); - if (cause != null) { - result.initCause(cause); - } - return result; - } - - /** - * Get the value in the webapp context. - * @param name The name of the attribute - * @return The value of the attribute - */ - public Object getAttribute(String name) { - return this.webAppContext.getAttribute(name); - } - - /** - * Get the pathname to the webapps files. - * @return the pathname as a URL - */ - private static String getWebAppsPath() throws IOException { - return getWebAppsPath("webapps"); - } - - /** - * Get the pathname to the patch files. - * @param path Path to find. - * @return the pathname as a URL - */ - private static String getWebAppsPath(final String path) throws IOException { - URL url = InfoServer.class.getClassLoader().getResource(path); - if (url == null) - throw new IOException("webapps not found in CLASSPATH: " + path); - return url.toString(); - } - - /** - * Get the port that the server is on - * @return the port - */ - public int getPort() { - return this.listener.getPort(); - } - - public void setThreads(int min, int max) { - this.listener.setMinThreads(min); - this.listener.setMaxThreads(max); - } - - /** - * Start the server. Does not wait for the server to start. - */ - public void start() throws IOException { - try { - while (true) { - try { - this.webServer.start(); - break; - } catch (org.mortbay.util.MultiException ex) { - // look for the multi exception containing a bind exception, - // in that case try the next port number. - boolean needNewPort = false; - for(int i=0; i < ex.size(); ++i) { - Exception sub = ex.getException(i); - if (sub instanceof java.net.BindException) { - needNewPort = true; - break; - } - } - if (!findPort || !needNewPort) { - throw ex; - } - this.listener.setPort(listener.getPort() + 1); - } - } - } catch (IOException ie) { - throw ie; - } catch (Exception e) { - IOException ie = new IOException("Problem starting http server"); - ie.initCause(e); - throw ie; - } - } - - /** - * stop the server - */ - public void stop() throws InterruptedException { - this.webServer.stop(); - } } diff --git a/src/webapps/master/master.jsp b/src/webapps/master/master.jsp index c3a4876167c..3159551a68c 100644 --- a/src/webapps/master/master.jsp +++ b/src/webapps/master/master.jsp @@ -44,7 +44,6 @@ HBase Compiled<%= org.apache.hadoop.hbase.util.VersionInfo.getDate() %>, <%= org.apache.hadoop.hbase.util.VersionInfo.getUser() %>When HBase version was compiled and by whom Hadoop Version<%= org.apache.hadoop.util.VersionInfo.getVersion() %>, r<%= org.apache.hadoop.util.VersionInfo.getRevision() %>Hadoop version and svn revision Hadoop Compiled<%= org.apache.hadoop.util.VersionInfo.getDate() %>, <%= org.apache.hadoop.util.VersionInfo.getUser() %>When Hadoop version was compiled and by whom -Filesystem<%= conf.get("fs.default.name") %>Filesystem HBase is running on HBase Root Directory<%= master.getRootDir().toString() %>Location of HBase home directory Load average<%= master.getAverageLoad() %>Average load across all region servers. Naive computation.