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());
 %>

Reply via email to