From a6f5c0b2a33bfa3a734ddf90c5f083b41309f393 Mon Sep 17 00:00:00 2001 From: Andrew Purtell Date: Fri, 26 Apr 2019 16:41:31 -0700 Subject: [PATCH] HBASE-22225 Profiler tab on Master/RS UI not working w/o comprehensive message --- .../apache/hadoop/hbase/http/HttpServer.java | 1 + .../hadoop/hbase/http/ProfileServlet.java | 27 +++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/http/HttpServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/http/HttpServer.java index 660e02e259..347e2c4bb4 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/http/HttpServer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/http/HttpServer.java @@ -735,6 +735,7 @@ public class HttpServer implements FilterContainer { genCtx.setResourceBase(tmpDir.toAbsolutePath().toString()); genCtx.setDisplayName("prof-output"); } else { + addServlet("prof", "/prof", ProfileServlet.DisabledServlet.class); LOG.info("ASYNC_PROFILER_HOME environment variable and async.profiler.home system property " + "not specified. Disabling /prof endpoint."); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java index 2cd6924ae3..34a96755ca 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/http/ProfileServlet.java @@ -83,6 +83,7 @@ import org.apache.hadoop.hbase.util.ProcessUtils; * // lock */ public class ProfileServlet extends HttpServlet { + private static final long serialVersionUID = 1L; private static final Log LOG = LogFactory.getLog(ProfileServlet.class); @@ -174,7 +175,10 @@ public class ProfileServlet extends HttpServlet { if (asyncProfilerHome == null || asyncProfilerHome.trim().isEmpty()) { resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); setResponseHeader(resp); - resp.getWriter().write("ASYNC_PROFILER_HOME env is not set."); + resp.getWriter().write("ASYNC_PROFILER_HOME env is not set.\n\n" + + "Please ensure the prerequsites for the Profiler Servlet have been installed and the\n" + + "environment is properly configured. For more information please see\n" + + "http://hbase.apache.org/book.html#profiler\n"); return; } @@ -392,7 +396,7 @@ public class ProfileServlet extends HttpServlet { return Output.SVG; } - private void setResponseHeader(final HttpServletResponse response) { + private static void setResponseHeader(final HttpServletResponse response) { response.setHeader(ACCESS_CONTROL_ALLOW_METHODS, ALLOWED_METHODS); response.setHeader(ACCESS_CONTROL_ALLOW_ORIGIN, "*"); response.setContentType(CONTENT_TYPE_TEXT); @@ -407,4 +411,23 @@ public class ProfileServlet extends HttpServlet { return asyncProfilerHome; } + + public static class DisabledServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + + @Override + protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) + throws IOException { + resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + setResponseHeader(resp); + resp.getWriter().write("The profiler servlet was disabled at startup.\n\n" + + "Please ensure the prerequsites for the Profiler Servlet have been installed and the\n" + + "environment is properly configured. For more information please see\n" + + "http://hbase.apache.org/book.html#profiler\n"); + return; + } + + } + } \ No newline at end of file -- 2.21.0