HBASE-20382 If RSGroups not enabled, rsgroup.jsp prints stack trace

Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/35b4adf3
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/35b4adf3
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/35b4adf3

Branch: refs/heads/HBASE-19064
Commit: 35b4adf3ed05a903686cab2b09c3e80c94a81697
Parents: eb40e6d
Author: Balazs Meszaros <balazs.mesza...@cloudera.com>
Authored: Wed Apr 11 15:53:58 2018 +0200
Committer: Michael Stack <st...@apache.org>
Committed: Wed Apr 11 09:50:07 2018 -0700

----------------------------------------------------------------------
 .../hadoop/hbase/RSGroupTableAccessor.java      | 10 ++-
 .../resources/hbase-webapps/master/rsgroup.jsp  | 78 +++++++++++---------
 2 files changed, 51 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/35b4adf3/hbase-client/src/main/java/org/apache/hadoop/hbase/RSGroupTableAccessor.java
----------------------------------------------------------------------
diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/RSGroupTableAccessor.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/RSGroupTableAccessor.java
index 06a7604..406c41e 100644
--- 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/RSGroupTableAccessor.java
+++ 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/RSGroupTableAccessor.java
@@ -45,6 +45,13 @@ public final class RSGroupTableAccessor {
   private static final byte[] META_FAMILY_BYTES = Bytes.toBytes("m");
   private static final byte[] META_QUALIFIER_BYTES = Bytes.toBytes("i");
 
+  private RSGroupTableAccessor() {
+  }
+
+  public static boolean isRSGroupsEnabled(Connection connection) throws 
IOException {
+    return connection.getAdmin().tableExists(RSGROUP_TABLE_NAME);
+  }
+
   public static List<RSGroupInfo> getAllRSGroupInfo(Connection connection)
       throws IOException {
     try (Table rsGroupTable = connection.getTable(RSGROUP_TABLE_NAME)) {
@@ -76,7 +83,4 @@ public final class RSGroupTableAccessor {
       return getRSGroupInfo(result);
     }
   }
-
-  private RSGroupTableAccessor() {
-  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/35b4adf3/hbase-server/src/main/resources/hbase-webapps/master/rsgroup.jsp
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/resources/hbase-webapps/master/rsgroup.jsp 
b/hbase-server/src/main/resources/hbase-webapps/master/rsgroup.jsp
index d866008..7a80c35 100644
--- a/hbase-server/src/main/resources/hbase-webapps/master/rsgroup.jsp
+++ b/hbase-server/src/main/resources/hbase-webapps/master/rsgroup.jsp
@@ -45,20 +45,43 @@
 <%@ page import="org.apache.hadoop.hbase.Size" %>
 <%@ page import="org.apache.hadoop.hbase.RegionMetrics" %>
 <%
-  HMaster master = (HMaster)getServletContext().getAttribute(HMaster.MASTER);
   String rsGroupName = request.getParameter("name");
-  List<Address> rsGroupServers = new ArrayList<>();
-  List<TableName> rsGroupTables = new ArrayList<>();
+  pageContext.setAttribute("pageTitle", "RSGroup: " + rsGroupName);
+%>
+<jsp:include page="header.jsp">
+    <jsp:param name="pageTitle" value="${pageTitle}"/>
+</jsp:include>
+<div class="container-fluid content">
+<%
+  HMaster master = (HMaster)getServletContext().getAttribute(HMaster.MASTER);
   RSGroupInfo rsGroupInfo = null;
-  if (rsGroupName != null && !rsGroupName.isEmpty()) {
-    rsGroupInfo = RSGroupTableAccessor.getRSGroupInfo(
-        master.getConnection(), Bytes.toBytes(rsGroupName));
-    if (rsGroupInfo != null) {
-      rsGroupServers.addAll(rsGroupInfo.getServers());
-      rsGroupTables.addAll(rsGroupInfo.getTables());
-    }
-  }
-  Collections.sort(rsGroupServers);
+
+  if (!RSGroupTableAccessor.isRSGroupsEnabled(master.getConnection())) {
+%>
+  <div class="row inner_header">
+    <div class="page-header">
+      <h1>RSGroups are not enabled</h1>
+    </div>
+  </div>
+  <p>Go <a href="javascript:history.back()">Back</a>, or wait for the redirect.
+<%
+  } else if (rsGroupName == null || rsGroupName.isEmpty() ||
+      (rsGroupInfo = RSGroupTableAccessor.getRSGroupInfo(
+          master.getConnection(), Bytes.toBytes(rsGroupName))) == null) {
+%>
+  <div class="row inner_header">
+    <div class="page-header">
+      <h1>RSGroup: <%= rsGroupName %> does not exist</h1>
+    </div>
+  </div>
+  <p>Go <a href="javascript:history.back()">Back</a>, or wait for the redirect.
+<%
+  } else {
+    List<Address> rsGroupServers = new ArrayList<>();
+    List<TableName> rsGroupTables = new ArrayList<>();
+    rsGroupServers.addAll(rsGroupInfo.getServers());
+    rsGroupTables.addAll(rsGroupInfo.getTables());
+    Collections.sort(rsGroupServers);
     rsGroupTables.sort((o1, o2) -> {
       int compare = Bytes.compareTo(o1.getNamespace(), o2.getNamespace());
       if (compare != 0)
@@ -69,29 +92,16 @@
       return 0;
     });
 
-  Map<Address, ServerMetrics> onlineServers = Collections.emptyMap();
-  Map<Address, ServerName> serverMaping = Collections.emptyMap();
-  if (master.getServerManager() != null) {
-    onlineServers = 
master.getServerManager().getOnlineServers().entrySet().stream()
-            .collect(Collectors.toMap(p -> p.getKey().getAddress(), 
Map.Entry::getValue));
-    serverMaping =
-        master.getServerManager().getOnlineServers().entrySet().stream()
-            .collect(Collectors.toMap(p -> p.getKey().getAddress(), 
Map.Entry::getKey));
-  }
-  pageContext.setAttribute("pageTitle", "RSGroup: " + rsGroupName);
+    Map<Address, ServerMetrics> onlineServers = Collections.emptyMap();
+    Map<Address, ServerName> serverMaping = Collections.emptyMap();
+    if (master.getServerManager() != null) {
+      onlineServers = 
master.getServerManager().getOnlineServers().entrySet().stream()
+              .collect(Collectors.toMap(p -> p.getKey().getAddress(), 
Map.Entry::getValue));
+      serverMaping =
+          master.getServerManager().getOnlineServers().entrySet().stream()
+              .collect(Collectors.toMap(p -> p.getKey().getAddress(), 
Map.Entry::getKey));
+    }
 %>
-<jsp:include page="header.jsp">
-    <jsp:param name="pageTitle" value="${pageTitle}"/>
-</jsp:include>
-<div class="container-fluid content">
-  <% if (rsGroupName == null || rsGroupName.isEmpty() || rsGroupInfo == null) 
{ %>
-  <div class="row inner_header">
-      <div class="page-header">
-          <h1>RSGroup: "<%= rsGroupName %>" does not exist</h1>
-      </div>
-  </div>
-  <p>Go <a href="javascript:history.back()">Back</a>, or wait for the redirect.
-  <% } else { %>
   <div class="container-fluid content">
     <div class="row">
       <div class="page-header">

Reply via email to