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. */
