Skip to content

Commit 77034ad

Browse files
guluo2016Apache9
authored andcommitted
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 <zhangduo@apache.org> (cherry picked from commit 6a5757d)
1 parent 1aa73e3 commit 77034ad

File tree

3 files changed

+33
-7
lines changed

3 files changed

+33
-7
lines changed

hbase-server/src/main/java/org/apache/hadoop/hbase/master/http/MasterStatusServlet.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,10 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
7777
private ServerName getMetaLocationOrNull(HMaster master) {
7878
RegionStateNode rsn = master.getAssignmentManager().getRegionStates()
7979
.getRegionStateNode(RegionInfoBuilder.FIRST_META_REGIONINFO);
80-
return rsn.isInState(RegionState.State.OPEN) ? rsn.getRegionLocation() : null;
80+
if (rsn != null) {
81+
return rsn.isInState(RegionState.State.OPEN) ? rsn.getRegionLocation() : null;
82+
}
83+
return null;
8184
}
8285

8386
private Map<String, Integer> getFragmentationInfo(HMaster master, Configuration conf)

hbase-server/src/main/resources/hbase-webapps/master/procedures.jsp

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,28 @@
4747
<%@ page import="org.apache.hadoop.hbase.metrics.Histogram" %>
4848
<%@ page import="java.util.TreeMap" %>
4949
<%@ page import="org.apache.hadoop.hbase.metrics.impl.HistogramImpl" %>
50+
51+
<jsp:include page="header.jsp">
52+
<jsp:param name="pageTitle" value="${pageTitle}"/>
53+
</jsp:include>
54+
5055
<%
5156
HMaster master = (HMaster) getServletContext().getAttribute(HMaster.MASTER);
57+
if (!master.isInitialized()) {
58+
%>
59+
<div class="container-fluid content">
60+
<div class="row inner_header">
61+
<div class="page-header">
62+
<h1>Master is initializing</h1>
63+
</div>
64+
</div>
65+
<p><hr><p>
66+
<jsp:include page="redirect.jsp" />
67+
</div>
68+
<% return;
69+
} %>
70+
71+
<%
5272
ProcedureExecutor<MasterProcedureEnv> procExecutor = master.getMasterProcedureExecutor();
5373
List<Procedure<MasterProcedureEnv>> procedures = procExecutor.getProcedures();
5474
Collections.sort(procedures, new Comparator<Procedure>() {
@@ -63,9 +83,6 @@
6383
List<LockedResource> lockedResources = master.getLocks();
6484
pageContext.setAttribute("pageTitle", "HBase Master Procedures: " + master.getServerName());
6585
%>
66-
<jsp:include page="header.jsp">
67-
<jsp:param name="pageTitle" value="${pageTitle}"/>
68-
</jsp:include>
6986

7087
<div class="container-fluid content">
7188
<div class="row top_header">

hbase-server/src/main/resources/hbase-webapps/regionserver/region.jsp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,22 @@
3333
String regionName = request.getParameter("name");
3434
HRegionServer rs = (HRegionServer) getServletContext().getAttribute(HRegionServer.REGIONSERVER);
3535
FileSystem fs = rs.getFileSystem();
36-
37-
HRegion region = rs.getRegion(regionName);
36+
HRegion region = null;
37+
if (regionName != null) {
38+
region = rs.getRegion(regionName);
39+
}
3840
String displayName;
3941
boolean isReplicaRegion = false;
4042
if (region != null) {
4143
displayName = RegionInfoDisplay.getRegionNameAsStringForDisplay(region.getRegionInfo(),
4244
rs.getConfiguration());
4345
isReplicaRegion = region.getRegionInfo().getReplicaId() > RegionInfo.DEFAULT_REPLICA_ID;
4446
} else {
45-
displayName = "region {" + regionName + "} is not currently online on this region server";
47+
if (regionName != null) {
48+
displayName = "region {" + regionName + "} is not currently online on this region server";
49+
} else {
50+
displayName = "you must specify a region name when accessing this page";
51+
}
4652
}
4753
pageContext.setAttribute("pageTitle", "HBase RegionServer: " + rs.getServerName());
4854
%>

0 commit comments

Comments
 (0)