Skip to content

Commit 27f8230

Browse files
committed
NPE may occur when opening master-status or table.jsp or procedure.jsp while Master is initializing
1 parent 6788ff4 commit 27f8230

3 files changed

Lines changed: 45 additions & 22 deletions

File tree

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/master/table.jsp

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -148,11 +148,32 @@
148148
return "";
149149
}
150150
%>
151+
152+
<jsp:include page="header.jsp">
153+
<jsp:param name="pageTitle" value="${pageTitle}"/>
154+
</jsp:include>
155+
151156
<%
152157
final String ZEROMB = "0 MB";
153158
HMaster master = (HMaster)getServletContext().getAttribute(HMaster.MASTER);
154159
Configuration conf = master.getConfiguration();
155160
String fqtn = request.getParameter("name");
161+
// handle the case for fqtn is null or master is not initialized with error message + redirect
162+
if (fqtn == null || !master.isInitialized()) {
163+
%>
164+
<div class="container-fluid content">
165+
<div class="row inner_header">
166+
<div class="page-header">
167+
<h1>Table not ready</h1>
168+
</div>
169+
</div>
170+
<p><hr><p>
171+
<jsp:include page="redirect.jsp" />
172+
</div>
173+
<% return;
174+
} %>
175+
176+
<%
156177
final String escaped_fqtn = StringEscapeUtils.escapeHtml4(fqtn);
157178
Table table = master.getConnection().getTable(TableName.valueOf(fqtn));
158179
boolean showFragmentation = conf.getBoolean("hbase.master.ui.fragmentation.enabled", false);
@@ -201,24 +222,6 @@
201222
final MetaBrowser metaBrowser = new MetaBrowser(connection, request);
202223
%>
203224

204-
<jsp:include page="header.jsp">
205-
<jsp:param name="pageTitle" value="${pageTitle}"/>
206-
</jsp:include>
207-
208-
<% // handle the case for fqtn is null or master is not initialized with error message + redirect
209-
if (fqtn == null || ! master.isInitialized()) { %>
210-
<div class="container-fluid content">
211-
<div class="row inner_header">
212-
<div class="page-header">
213-
<h1>Table not ready</h1>
214-
</div>
215-
</div>
216-
<p><hr><p>
217-
<jsp:include page="redirect.jsp" />
218-
</div>
219-
<% return;
220-
} %>
221-
222225
<% // unknow table
223226
if (! admin.tableExists(TableName.valueOf(fqtn)).get()) { %>
224227
<div class="container-fluid content">

0 commit comments

Comments
 (0)