You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2024/09/06 08:42:20 UTC
(hbase) branch branch-2 updated: HBASE-28778 NPE may occur when opening master-status or table.jsp or procedure.jsp while Master is initializing (#6210)
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 <lu...@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 <zh...@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());
%>