diff --git hbase-server/src/main/resources/hbase-webapps/master/header.jsp hbase-server/src/main/resources/hbase-webapps/master/header.jsp index c7cbf3ec99..133fd74133 100644 --- hbase-server/src/main/resources/hbase-webapps/master/header.jsp +++ hbase-server/src/main/resources/hbase-webapps/master/header.jsp @@ -61,6 +61,7 @@ <% if (HBaseConfiguration.isShowConfInServlet()) { %>
  • HBase Configuration
  • <% } %> +
  • Region State dump
  • diff --git hbase-server/src/main/resources/hbase-webapps/master/table.jsp hbase-server/src/main/resources/hbase-webapps/master/table.jsp index c8ca50ba53..8e1ffe7c43 100644 --- hbase-server/src/main/resources/hbase-webapps/master/table.jsp +++ hbase-server/src/main/resources/hbase-webapps/master/table.jsp @@ -27,6 +27,7 @@ import="java.util.LinkedHashMap" import="java.util.List" import="java.util.Map" + import="java.util.HashMap" import="java.util.TreeMap" import="org.apache.commons.lang3.StringEscapeUtils" import="org.apache.hadoop.conf.Configuration" @@ -46,6 +47,8 @@ import="org.apache.hadoop.hbase.client.RegionReplicaUtil" import="org.apache.hadoop.hbase.client.Table" import="org.apache.hadoop.hbase.master.HMaster" + import="org.apache.hadoop.hbase.master.assignment.RegionStates" + import="org.apache.hadoop.hbase.master.RegionState" import="org.apache.hadoop.hbase.quotas.QuotaTableUtil" import="org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot" import="org.apache.hadoop.hbase.util.Bytes" @@ -247,6 +250,14 @@ if ( fqtn != null ) { <%} else { Admin admin = master.getConnection().getAdmin(); + RegionStates states = master.getAssignmentManager().getRegionStates(); + Map> regionStates = states.getRegionByStateOfTable(table.getName()); + Map stateMap = new HashMap<>(); + for (RegionState.State regionState : regionStates.keySet()) { + for (RegionInfo regionInfo : regionStates.get(regionState)) { + stateMap.put(regionInfo.getEncodedName(), regionState); + } + } RegionLocator r = master.getClusterConnection().getRegionLocator(table.getName()); try { %>

    Table Attributes

    @@ -452,6 +463,7 @@ ShowDetailName&Start/End Key <%= escapeXml(showWhole?Bytes.toStringBinary(regionInfo.getEndKey()):"-")%> + <%= state%> <% if (withReplica) { %> diff --git hbase-server/src/main/resources/hbase-webapps/master/regionstate.jsp hbase-server/src/main/resources/hbase-webapps/master/regionstate.jsp new file mode 100644 index 0000000000..ecf1da94ee --- /dev/null +++ hbase-server/src/main/resources/hbase-webapps/master/regionstate.jsp @@ -0,0 +1,51 @@ +<%-- +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +--%> +<%@page import="java.net.URLEncoder"%> +<%@ page contentType="application/json;charset=UTF-8" + import="java.util.List" + import="java.util.Map" + import="java.util.HashMap" + import="org.apache.hadoop.hbase.TableName" + import="org.apache.hadoop.hbase.client.RegionInfo" + import="org.apache.hadoop.hbase.master.HMaster" + import="org.apache.hadoop.hbase.master.assignment.RegionStates" + import="org.apache.hadoop.hbase.master.RegionState" + import="org.apache.hadoop.hbase.util.JsonMapper" + %> +<% + String result; + HMaster master = (HMaster)getServletContext().getAttribute(HMaster.MASTER); + if (master.getAssignmentManager() == null) { + result = "Still initializing, please wait."; + } else { + RegionStates states = master.getAssignmentManager().getRegionStates(); + List assignedRegions = states.getAssignedRegions(); + Map>> regions = new HashMap<>(); + + for (RegionInfo regionInfo : assignedRegions) { + TableName tableOfRegion = regionInfo.getTable(); + if (!regions.keySet().contains(tableOfRegion)) { + regions.put(tableOfRegion, states.getRegionByStateOfTable(tableOfRegion)); + } + } + result = JsonMapper.writeObjectAsString(regions); + } +%> +<%= result%>