HBASE-10362. HBCK changes for supporting region replicas

git-svn-id: https://svn.apache.org/repos/asf/hbase/branches/hbase-10070@1571884 
13f79535-47bb-0310-9956-ffa450edef68


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

Branch: refs/heads/master
Commit: 87b2b923e229e335b7e81b79656b5259b5a0d1b1
Parents: d7d9f8d
Author: Devaraj Das <[email protected]>
Authored: Wed Feb 26 00:38:15 2014 +0000
Committer: Enis Soztutar <[email protected]>
Committed: Fri Jun 27 16:39:37 2014 -0700

----------------------------------------------------------------------
 .../org/apache/hadoop/hbase/util/HBaseFsck.java |  5 ++--
 .../apache/hadoop/hbase/util/TestHBaseFsck.java | 29 ++++++++++++++++++++
 2 files changed, 32 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/87b2b923/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 d0c84b3..c7d89cf 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
@@ -80,6 +80,7 @@ import org.apache.hadoop.hbase.client.HConnection;
 import org.apache.hadoop.hbase.client.HConnectionManager;
 import org.apache.hadoop.hbase.client.HTable;
 import org.apache.hadoop.hbase.client.MetaScanner;
+import org.apache.hadoop.hbase.client.RegionReplicaUtil;
 import org.apache.hadoop.hbase.client.MetaScanner.MetaScannerVisitor;
 import org.apache.hadoop.hbase.client.MetaScanner.MetaScannerVisitorBase;
 import org.apache.hadoop.hbase.client.Put;
@@ -1763,6 +1764,7 @@ public class HBaseFsck extends Configured {
     if (hbi.containsOnlyHdfsEdits()) {
       return;
     }
+    if (hbi.isSkipChecks()) return;
     if (inMeta && inHdfs && isDeployed && deploymentMatchesMeta && 
shouldBeDeployed) {
       return;
     } else if (inMeta && inHdfs && !shouldBeDeployed && !isDeployed) {
@@ -1927,13 +1929,11 @@ public class HBaseFsck extends Configured {
    */
   SortedMap<TableName, TableInfo> checkIntegrity() throws IOException {
     tablesInfo = new TreeMap<TableName,TableInfo> ();
-    List<HbckInfo> noHDFSRegionInfos = new ArrayList<HbckInfo>();
     LOG.debug("There are " + regionInfoMap.size() + " region info entries");
     for (HbckInfo hbi : regionInfoMap.values()) {
       // Check only valid, working regions
       if (hbi.metaEntry == null) {
         // this assumes that consistency check has run loadMetaEntry
-        noHDFSRegionInfos.add(hbi);
         Path p = hbi.getHdfsRegionDir();
         if (p == null) {
           errors.report("No regioninfo in Meta or HDFS. " + hbi);
@@ -3399,6 +3399,7 @@ public class HBaseFsck extends Configured {
         // check to see if the existence of this region matches the region in 
META
         for (HRegionInfo r:regions) {
           HbckInfo hbi = hbck.getOrCreateInfo(r.getEncodedName());
+          if (!RegionReplicaUtil.isDefaultReplica(r)) hbi.setSkipChecks(true);
           hbi.addServer(r, rsinfo);
         }
       } catch (IOException e) {          // unable to connect to the region 
server.

http://git-wip-us.apache.org/repos/asf/hbase/blob/87b2b923/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 bd0fbd3..b235256 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
@@ -357,7 +357,19 @@ public class TestHBaseFsck {
    * @throws KeeperException
    */
   HTable setupTable(TableName tablename) throws Exception {
+    return setupTableWithRegionReplica(tablename, 1);
+  }
+
+  /**
+   * Setup a clean table with a certain region_replica count
+   * @param tableName
+   * @param replicaCount
+   * @return
+   * @throws Exception
+   */
+  HTable setupTableWithRegionReplica(TableName tablename, int replicaCount) 
throws Exception {
     HTableDescriptor desc = new HTableDescriptor(tablename);
+    desc.setRegionReplication(replicaCount);
     HColumnDescriptor hcd = new HColumnDescriptor(Bytes.toString(FAM));
     desc.addFamily(hcd); // If a table has no CF's it doesn't get checked
     TEST_UTIL.getHBaseAdmin().createTable(desc, SPLITS);
@@ -553,6 +565,23 @@ public class TestHBaseFsck {
     }
   }
 
+  /*
+   * This creates a table with region_replica > 1 and verifies hbck runs
+   * successfully
+   */
+  @Test
+  public void testHbckWithRegionReplica() throws Exception {
+    TableName table =
+        TableName.valueOf("tableWithReplica");
+    try {
+      setupTableWithRegionReplica(table, 2);
+      assertNoErrors(doFsck(conf, false));
+      assertEquals(ROWKEYS.length, countRows());
+    } finally {
+      deleteTable(table);
+    }
+  }
+
   /**
    * Get region info from local cluster.
    */

Reply via email to