diff --git a/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/AssignmentManagerStatusTmpl.jamon b/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/AssignmentManagerStatusTmpl.jamon index f97860bd7fb..8ca80a65b2e 100644 --- a/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/AssignmentManagerStatusTmpl.jamon +++ b/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/AssignmentManagerStatusTmpl.jamon @@ -73,7 +73,7 @@ int numOfPages = (int) Math.ceil(numOfRITs * 1.0 / ritsPerPage);

Regions in Transition

-

<% numOfRITs %> region(s) in transition. +

<% numOfRITs %> region(s) in transition. <%if !ritsTwiceThreshold.isEmpty() %> <%elseif !ritsOverThreshold.isEmpty() %> diff --git a/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon b/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon index 0d02f997ecd..0b331b8d378 100644 --- a/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon +++ b/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon @@ -195,6 +195,10 @@ AssignmentManager assignmentManager = master.getAssignmentManager(); + <%if master.getAssignmentManager() != null %> + <& AssignmentManagerStatusTmpl; assignmentManager=master.getAssignmentManager()&> + +

Region Servers

<& RegionServerListTmpl; master= master; servers = servers &> @@ -241,9 +245,6 @@ AssignmentManager assignmentManager = master.getAssignmentManager();

Peers

<& peerConfigs &>
- <%if master.getAssignmentManager() != null %> - <& AssignmentManagerStatusTmpl; assignmentManager=master.getAssignmentManager()&> - <%else>
<& BackupMasterStatusTmpl; master = master &> @@ -472,6 +473,9 @@ AssignmentManager assignmentManager = master.getAssignmentManager(); master.getAssignmentManager().getRegionStates() .getRegionByStateOfTable(tableName); int openRegionsCount = tableRegions.get(RegionState.State.OPEN).size(); + int openingRegionsCount = tableRegions.get(RegionState.State.OPENING).size(); + int closedRegionsCount = tableRegions.get(RegionState.State.CLOSED).size(); + int closingRegionsCount = tableRegions.get(RegionState.State.CLOSING).size(); int offlineRegionsCount = tableRegions.get(RegionState.State.OFFLINE).size(); int splitRegionsCount = tableRegions.get(RegionState.State.SPLIT).size(); int failedRegionsCount = tableRegions.get(RegionState.State.FAILED_OPEN).size() @@ -492,6 +496,9 @@ AssignmentManager assignmentManager = master.getAssignmentManager(); <% frags.get(tableName.getNameAsString()) != null ? frags.get(tableName.getNameAsString()).intValue() + "%" : "n/a" %> <% openRegionsCount %> + <%if (openingRegionsCount > 0) %> <% openingRegionsCount %> <%else><% openingRegionsCount %> + <% closedRegionsCount %> + <%if (closingRegionsCount > 0) %> <% closingRegionsCount %> <%else><% closingRegionsCount %> <% offlineRegionsCount %> <% failedRegionsCount %> <% splitRegionsCount %> diff --git a/hbase-server/src/main/resources/hbase-webapps/master/rits.jsp b/hbase-server/src/main/resources/hbase-webapps/master/rits.jsp new file mode 100644 index 00000000000..cf21acbd92f --- /dev/null +++ b/hbase-server/src/main/resources/hbase-webapps/master/rits.jsp @@ -0,0 +1,180 @@ +<%-- +/** + * 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 contentType="text/html;charset=UTF-8" + import="java.util.ArrayList" + import="java.util.List" + import="java.util.HashMap" + import="java.util.HashSet" + import="java.util.Map" + import="java.util.Set" + import="org.apache.hadoop.hbase.HBaseConfiguration" + import="org.apache.hadoop.hbase.master.HMaster" + import="org.apache.hadoop.hbase.master.RegionState" + import="org.apache.hadoop.hbase.util.GsonUtil" + import="org.apache.hbase.thirdparty.com.google.gson.Gson" +%> +<% + HMaster master = (HMaster) getServletContext().getAttribute(HMaster.MASTER); + Set rit = master.getAssignmentManager().getRegionStates().getRegionsInTransition(); + String table = request.getParameter("table"); + String state = request.getParameter("state"); + if (table != null && state != null && !table.equals("null") && !state.equals("null")) { + Set ritFiltered = new HashSet<>(); + for (RegionState regionState: rit) { + if (regionState.getRegion().getTable().getNameAsString().equals(table) && + regionState.getState().name().equals(state)){ + ritFiltered.add(regionState); + } + } + rit = ritFiltered; + } + + String format = request.getParameter("format"); + if(format == null || format.isEmpty()){ + format = "html"; + } + String filter = request.getParameter("filter"); +%> + + +<% if (format.equals("html")) { %> + + + + + + HBase Master Procedures: <%= master.getServerName() %> + + + + + + + + + + +
+
+ +
+
+ +
+ + <% if (rit != null && rit.size() > 0) { %> + + + + + + + + + + <% for (RegionState regionState : rit) { %> + + + + + + + + + <% } %> +

<%= rit.size() %> region(s) in transition.

+
RegionTableRegionStateServerStart TimeDuration (ms)
<%= regionState.getRegion().getEncodedName() %><%= regionState.getRegion().getTable() %><%= regionState.getState() %><%= regionState.getServerName() %><%= regionState.getStamp() %><%= regionState.getRitDuration() %>
+ <% } else { %> +

no region in transition right now.

+ <% } %> +
+ + + + + +<% } else if (format.equals("json")) { %> + <% + Gson GSON = GsonUtil.createGson().create(); + Map>> map = new HashMap<>(); + List> rits = new ArrayList<>(); + map.put("rits", rits); + for (RegionState regionState : rit) { + Map r = new HashMap<>(); + r.put("region", regionState.getRegion().getEncodedName()); + r.put("table", regionState.getRegion().getTable().getNameAsString()); + r.put("state", regionState.getState()); + r.put("server", regionState.getServerName()); + r.put("startTime", regionState.getStamp()); + r.put("duration", regionState.getRitDuration()); + rits.add(r); + } + %> + <%= GSON.toJson(map) %> +<% } else { %> +
+
+

+ <% + if (filter.equals("region")) { + for (RegionState regionState : rit) { %> + <%= regionState.getRegion().getEncodedName() %>
+ <% } + } else { %> + "Not a valid filter" + <% } %> +

+
+
+<% } %>