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

commit 612d7860e18dece07e9276e8d8b04cca702c7aa6
Author: Junegunn Choi <[email protected]>
AuthorDate: Sat Mar 1 01:07:02 2025 +0900

    HBASE-29066 Fix NPE in rits.jsp when regions are not open (#6594)
    
    Signed-off-by: Duo Zhang <[email protected]>
    (cherry picked from commit fd50561a099a5b3b44b209d5b806e70f24c2aa9c)
---
 .../hbase/master/assignment/RegionStateNode.java   |  8 ++++
 .../main/resources/hbase-webapps/master/rits.jsp   | 45 ++++++++++++----------
 2 files changed, 32 insertions(+), 21 deletions(-)

diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStateNode.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStateNode.java
index 91c0222facd..c00f8c367ad 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStateNode.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStateNode.java
@@ -244,6 +244,14 @@ public class RegionStateNode implements 
Comparable<RegionStateNode> {
     return regionLocation;
   }
 
+  public String getRegionServerName() {
+    ServerName sn = getRegionLocation();
+    if (sn != null) {
+      return sn.getServerName();
+    }
+    return null;
+  }
+
   public State getState() {
     return state;
   }
diff --git a/hbase-server/src/main/resources/hbase-webapps/master/rits.jsp 
b/hbase-server/src/main/resources/hbase-webapps/master/rits.jsp
index 3fc960ee0c6..b08c4a37f87 100644
--- a/hbase-server/src/main/resources/hbase-webapps/master/rits.jsp
+++ b/hbase-server/src/main/resources/hbase-webapps/master/rits.jsp
@@ -97,7 +97,7 @@
                 <td><%= regionStateNode.getRegionInfo().getEncodedName() 
%></td>
                 <td><%= regionStateNode.getRegionInfo().getTable() %></td>
                 <td><%= regionStateNode.getState() %></td>
-                <td><%= regionStateNode.getRegionLocation().getServerName() 
%></td>
+                <td><%= regionStateNode.getRegionServerName() %></td>
                 <%
                     TransitRegionStateProcedure procedure = 
regionStateNode.getProcedure();
 
@@ -123,27 +123,30 @@
 </div>
 <jsp:include page="footer.jsp" />
 <% } else if (format.equals("json")) { %>
-<%
-    Gson GSON = GsonUtil.createGson().create();
-    Map<String, List<Map<String, Object>>> map = new HashMap<>();
-    List<Map<String, Object>> rits = new ArrayList<>();
-    map.put("rits", rits);
-    for (RegionStateNode regionStateNode : rit) {
-        Map<String, Object> r = new HashMap<>();
-        r.put("region", regionStateNode.getRegionInfo().getEncodedName());
-        r.put("table", 
regionStateNode.getRegionInfo().getTable().getNameAsString());
-        r.put("state", regionStateNode.getState());
-        r.put("server", regionStateNode.getRegionLocation().getServerName());
-        TransitRegionStateProcedure procedure = regionStateNode.getProcedure();
-        if (procedure != null) {
-          r.put("procedureId", procedure.getProcId());
-          r.put("procedureState", procedure.getState().toString());
+    <%
+        Gson GSON = GsonUtil.createGson().create();
+        Map<String, List<Map<String, Object>>> map = new HashMap<>();
+        List<Map<String, Object>> rits = new ArrayList<>();
+        map.put("rits", rits);
+        for (RegionStateNode regionStateNode : rit) {
+            Map<String, Object> r = new HashMap<>();
+            r.put("region", regionStateNode.getRegionInfo().getEncodedName());
+            r.put("table", 
regionStateNode.getRegionInfo().getTable().getNameAsString());
+            r.put("state", regionStateNode.getState());
+            r.put("server", regionStateNode.getRegionServerName());
+
+            TransitRegionStateProcedure procedure = 
regionStateNode.getProcedure();
+            if (procedure != null) {
+                r.put("procedureId", procedure.getProcId());
+                r.put("procedureState", procedure.getState().toString());
+            }
+
+            RegionState rs = regionStateNode.toRegionState();
+            r.put("startTime", rs.getStamp());
+            r.put("duration", System.currentTimeMillis() - rs.getStamp());
+
+            rits.add(r);
         }
-        RegionState rs = regionStateNode.toRegionState();
-        r.put("startTime", rs.getStamp());
-        r.put("duration", System.currentTimeMillis() - rs.getStamp());
-        rits.add(r);
-      }
     %>
     <%= GSON.toJson(map) %>
 <% } else { %>

Reply via email to