This is an automated email from the ASF dual-hosted git repository. zhangduo pushed a commit to branch branch-2 in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2 by this push: new 6a5757d10a9 HBASE-28778 NPE may occur when opening master-status or table.jsp or procedure.jsp while Master is initializing (#6210) 6a5757d10a9 is described below commit 6a5757d10a9e884544094d97c5d11cd9ebb90610 Author: Peng Lu <lupeng_n...@qq.com> AuthorDate: Fri Sep 6 16:42:14 2024 +0800 HBASE-28778 NPE may occur when opening master-status or table.jsp or procedure.jsp while Master is initializing (#6210) Signed-off-by: Duo Zhang <zhang...@apache.org> --- .../hbase/master/http/MasterStatusServlet.java | 5 ++++- .../resources/hbase-webapps/master/procedures.jsp | 23 +++++++++++++++++++--- .../hbase-webapps/regionserver/region.jsp | 12 ++++++++--- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/http/MasterStatusServlet.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/http/MasterStatusServlet.java index e46621d7b52..09bb5375a5d 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/http/MasterStatusServlet.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/http/MasterStatusServlet.java @@ -77,7 +77,10 @@ public class MasterStatusServlet extends HttpServlet { private ServerName getMetaLocationOrNull(HMaster master) { RegionStateNode rsn = master.getAssignmentManager().getRegionStates() .getRegionStateNode(RegionInfoBuilder.FIRST_META_REGIONINFO); - return rsn.isInState(RegionState.State.OPEN) ? rsn.getRegionLocation() : null; + if (rsn != null) { + return rsn.isInState(RegionState.State.OPEN) ? rsn.getRegionLocation() : null; + } + return null; } private Map<String, Integer> getFragmentationInfo(HMaster master, Configuration conf) diff --git a/hbase-server/src/main/resources/hbase-webapps/master/procedures.jsp b/hbase-server/src/main/resources/hbase-webapps/master/procedures.jsp index 0ac2ff3908d..c25c5c3886b 100644 --- a/hbase-server/src/main/resources/hbase-webapps/master/procedures.jsp +++ b/hbase-server/src/main/resources/hbase-webapps/master/procedures.jsp @@ -47,8 +47,28 @@ <%@ page import="org.apache.hadoop.hbase.metrics.Histogram" %> <%@ page import="java.util.TreeMap" %> <%@ page import="org.apache.hadoop.hbase.metrics.impl.HistogramImpl" %> + +<jsp:include page="header.jsp"> + <jsp:param name="pageTitle" value="${pageTitle}"/> +</jsp:include> + <% HMaster master = (HMaster) getServletContext().getAttribute(HMaster.MASTER); + if (!master.isInitialized()) { +%> + <div class="container-fluid content"> + <div class="row inner_header"> + <div class="page-header"> + <h1>Master is initializing</h1> + </div> + </div> + <p><hr><p> + <jsp:include page="redirect.jsp" /> + </div> +<% return; + } %> + +<% ProcedureExecutor<MasterProcedureEnv> procExecutor = master.getMasterProcedureExecutor(); List<Procedure<MasterProcedureEnv>> procedures = procExecutor.getProcedures(); Collections.sort(procedures, new Comparator<Procedure>() { @@ -63,9 +83,6 @@ List<LockedResource> lockedResources = master.getLocks(); pageContext.setAttribute("pageTitle", "HBase Master Procedures: " + master.getServerName()); %> -<jsp:include page="header.jsp"> - <jsp:param name="pageTitle" value="${pageTitle}"/> -</jsp:include> <div class="container-fluid content"> <div class="row top_header"> diff --git a/hbase-server/src/main/resources/hbase-webapps/regionserver/region.jsp b/hbase-server/src/main/resources/hbase-webapps/regionserver/region.jsp index c516d035aac..f44b00301ac 100644 --- a/hbase-server/src/main/resources/hbase-webapps/regionserver/region.jsp +++ b/hbase-server/src/main/resources/hbase-webapps/regionserver/region.jsp @@ -33,8 +33,10 @@ String regionName = request.getParameter("name"); HRegionServer rs = (HRegionServer) getServletContext().getAttribute(HRegionServer.REGIONSERVER); FileSystem fs = rs.getFileSystem(); - - HRegion region = rs.getRegion(regionName); + HRegion region = null; + if (regionName != null) { + region = rs.getRegion(regionName); + } String displayName; boolean isReplicaRegion = false; if (region != null) { @@ -42,7 +44,11 @@ rs.getConfiguration()); isReplicaRegion = region.getRegionInfo().getReplicaId() > RegionInfo.DEFAULT_REPLICA_ID; } else { - displayName = "region {" + regionName + "} is not currently online on this region server"; + if (regionName != null) { + displayName = "region {" + regionName + "} is not currently online on this region server"; + } else { + displayName = "you must specify a region name when accessing this page"; + } } pageContext.setAttribute("pageTitle", "HBase RegionServer: " + rs.getServerName()); %>