You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2023/10/25 23:55:36 UTC

[hbase] branch branch-2.4 updated: HBASE-28157. hbck should report previously reported regions with null region location (#5463)

This is an automated email from the ASF dual-hosted git repository.

apurtell pushed a commit to branch branch-2.4
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-2.4 by this push:
     new 7c2ad329f55 HBASE-28157. hbck should report previously reported regions with null region location (#5463)
7c2ad329f55 is described below

commit 7c2ad329f55c86ddfd9055cd726097ecc552efe2
Author: Andrew Purtell <ap...@apache.org>
AuthorDate: Wed Oct 25 16:32:53 2023 -0700

    HBASE-28157. hbck should report previously reported regions with null region location (#5463)
    
    Ensure that hbck will report as inconsistent regions where previously a
    location was reported but now the region location is null, if it is not
    expected to be offline.
    
    Signed-off-by: Duo Zhang <zh...@apache.org>
    Signed-off-by: Viraj Jasani <vj...@apache.org>
    Reviewed-by: Shanmukha Haripriya Kota <sk...@cloudera.com>
---
 .../main/java/org/apache/hadoop/hbase/master/hbck/HbckChore.java   | 5 +----
 hbase-server/src/main/resources/hbase-webapps/master/hbck.jsp      | 4 ++++
 .../org/apache/hadoop/hbase/master/assignment/TestHbckChore.java   | 7 +++++++
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/hbck/HbckChore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/hbck/HbckChore.java
index 85e978014e5..53fd02bef8d 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/hbck/HbckChore.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/hbck/HbckChore.java
@@ -229,10 +229,7 @@ public class HbckChore extends ScheduledChore {
 
     for (Map.Entry<String, HbckRegionInfo> entry : report.getRegionInfoMap().entrySet()) {
       HbckRegionInfo hri = entry.getValue();
-      ServerName locationInMeta = hri.getMetaEntry().getRegionServer();
-      if (locationInMeta == null) {
-        continue;
-      }
+      ServerName locationInMeta = hri.getMetaEntry().getRegionServer(); // can be null
       if (hri.getDeployedOn().size() == 0) {
         // skip the offline region which belong to disabled table.
         if (report.getDisabledTableRegions().contains(hri.getRegionNameAsString())) {
diff --git a/hbase-server/src/main/resources/hbase-webapps/master/hbck.jsp b/hbase-server/src/main/resources/hbase-webapps/master/hbck.jsp
index 21128cea047..87efb4b1b1b 100644
--- a/hbase-server/src/main/resources/hbase-webapps/master/hbck.jsp
+++ b/hbase-server/src/main/resources/hbase-webapps/master/hbck.jsp
@@ -355,9 +355,13 @@
  * If a live server reference, make it a link.
  * If dead, make it italic.
  * If unknown, make it plain.
+ * If null, make it "null".
  */
 private static String formatServerName(HMaster master,
    ServerManager serverManager, ServerName serverName) {
+  if (serverName == null) {
+    return "null";
+  }
   String sn = serverName.toString();
   if (serverManager.isServerOnline(serverName)) {
     int infoPort = master.getRegionServerInfoPort(serverName);
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestHbckChore.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestHbckChore.java
index 1939544ce70..43665f2842d 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestHbckChore.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestHbckChore.java
@@ -154,6 +154,13 @@ public class TestHbckChore extends TestAssignmentManagerBase {
     hbckChore.choreForTesting();
     inconsistentRegions = hbckChore.getLastReport().getInconsistentRegions();
     assertFalse(inconsistentRegions.containsKey(regionName));
+
+    // Test for case4: No region location for a previously reported region. Probably due to
+    // TRSP bug or bypass.
+    am.offlineRegion(hri);
+    hbckChore.choreForTesting();
+    inconsistentRegions = hbckChore.getLastReport().getInconsistentRegions();
+    assertTrue(inconsistentRegions.containsKey(regionName));
   }
 
   @Test