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">