Repository: hbase
Updated Branches:
  refs/heads/branch-1.3 22233a28c -> c23b7c9c8


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

Signed-off-by: Esteban Gutierrez <[email protected]>


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

Branch: refs/heads/branch-1.3
Commit: c23b7c9c80d7663741b598f221cca8b4eb74033c
Parents: 22233a2
Author: Esteban Gutierrez <[email protected]>
Authored: Thu Jul 27 15:59:07 2017 -0500
Committer: Esteban Gutierrez <[email protected]>
Committed: Thu Jul 27 16:00:03 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/c23b7c9c/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 a5b63ae..eae8a64 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
@@ -2311,6 +2311,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/c23b7c9c/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 98aecce..9b628ee 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));

Reply via email to