You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by es...@apache.org on 2017/07/27 21:02:22 UTC

hbase git commit: HBASE-18362 hbck should not report split replica parent region from meta as errors (Huaxiang Sun)

Repository: hbase
Updated Branches:
  refs/heads/branch-1 aca8a124c -> e662d0432


HBASE-18362 hbck should not report split replica parent region from meta as errors (Huaxiang Sun)

Signed-off-by: Esteban Gutierrez <es...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/e662d043
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/e662d043
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/e662d043

Branch: refs/heads/branch-1
Commit: e662d04321f2c4cec29a775a220752a50168026d
Parents: aca8a12
Author: Esteban Gutierrez <es...@apache.org>
Authored: Thu Jul 27 15:59:07 2017 -0500
Committer: Esteban Gutierrez <es...@apache.org>
Committed: Thu Jul 27 15:59:07 2017 -0500

----------------------------------------------------------------------
 .../org/apache/hadoop/hbase/util/HBaseFsck.java | 10 ++++++++
 .../apache/hadoop/hbase/util/TestHBaseFsck.java | 25 ++++++++++++++++++++
 2 files changed, 35 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/e662d043/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java
index 0c491e2..e5e4b5a 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java
@@ -2440,6 +2440,16 @@ public class HBaseFsck extends Configured implements Closeable {
           return;
         }
       }
+
+      // For Replica region, we need to do a similar check. If replica is not split successfully,
+      // error is going to be reported against primary daughter region.
+      if (hbi.getReplicaId() != HRegionInfo.DEFAULT_REPLICA_ID) {
+        LOG.info("Region " + descriptiveName + " is a split parent in META, in HDFS, "
+            + "and not deployed on any region server. This may be transient.");
+        hbi.setSkipChecks(true);
+        return;
+      }
+
       errors.reportError(ERROR_CODE.LINGERING_SPLIT_PARENT, "Region "
           + descriptiveName + " is a split parent in META, in HDFS, "
           + "and not deployed on any region server. This could be transient, "

http://git-wip-us.apache.org/repos/asf/hbase/blob/e662d043/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java
index c0102de..f1dc1a2 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java
@@ -210,6 +210,31 @@ public class TestHBaseFsck {
     EnvironmentEdgeManager.reset();
   }
 
+  /*
+ * This creates a table with region_replica > 1, do a split, check
+ * that hbck will not report split replica parent as lingering split parent
+ */
+  @Test public void testHbckReportReplicaLingeringSplitParent() throws Exception {
+    TableName table = TableName.valueOf("testHbckReportReplicaLingeringSplitParent");
+
+    try {
+      setupTableWithRegionReplica(table, 2);
+      TEST_UTIL.getHBaseAdmin().flush(table.getName());
+
+      // disable catalog janitor
+      TEST_UTIL.getHBaseAdmin().enableCatalogJanitor(false);
+      admin.split(table, Bytes.toBytes("A1"));
+
+      Thread.sleep(1000);
+      // run hbck again to make sure we don't see any errors
+      assertNoErrors(doFsck(conf, false));
+    } finally {
+      cleanupTable(table);
+      // enable catalog janitor
+      TEST_UTIL.getHBaseAdmin().enableCatalogJanitor(true);
+    }
+  }
+
   @Test (timeout=180000)
   public void testHBaseFsck() throws Exception {
     assertNoErrors(doFsck(conf, false));