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 2017/07/26 00:09:22 UTC
hbase git commit: HBASE-18247 Hbck to fix the case that replica
region shows as key in the meta table
Repository: hbase
Updated Branches:
refs/heads/branch-1 c7e1d67df -> 9427d6c73
HBASE-18247 Hbck to fix the case that replica region shows as key in the meta table
Change-Id: I2169290ec5a97a63747bc93ee37f36729c3ac916
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/9427d6c7
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/9427d6c7
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/9427d6c7
Branch: refs/heads/branch-1
Commit: 9427d6c73cffbd52fe6a057a126ef4e589e9db1e
Parents: c7e1d67
Author: huaxiang sun <hs...@cloudera.com>
Authored: Tue Jul 25 17:08:04 2017 -0700
Committer: Apekshit Sharma <ap...@apache.org>
Committed: Tue Jul 25 17:08:53 2017 -0700
----------------------------------------------------------------------
.../apache/hadoop/hbase/MetaTableAccessor.java | 10 +++++--
.../apache/hadoop/hbase/util/TestHBaseFsck.java | 30 ++++++++++++++++++++
2 files changed, 37 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/9427d6c7/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
index 9d32923..739291a 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
@@ -751,7 +751,7 @@ public class MetaTableAccessor {
List<HRegionLocation> locations = new ArrayList<HRegionLocation>(1);
NavigableMap<byte[],NavigableMap<byte[],byte[]>> familyMap = r.getNoVersionMap();
- locations.add(getRegionLocation(r, regionInfo, 0));
+ locations.add(getRegionLocation(r, regionInfo, regionInfo.getReplicaId()));
NavigableMap<byte[], byte[]> infoMap = familyMap.get(getFamily());
if (infoMap == null) return new RegionLocations(locations);
@@ -1461,10 +1461,14 @@ public class MetaTableAccessor {
// region replicas are kept in the primary region's row
Put put = new Put(getMetaKeyForRegion(regionInfo), time);
- addRegionInfo(put, regionInfo);
+ HRegionInfo defaultRegionInfo = regionInfo;
+ if (regionInfo.getReplicaId() != HRegionInfo.DEFAULT_REPLICA_ID) {
+ defaultRegionInfo = new HRegionInfo(regionInfo, HRegionInfo.DEFAULT_REPLICA_ID);
+ }
+ addRegionInfo(put, defaultRegionInfo);
addLocation(put, sn, openSeqNum, time, regionInfo.getReplicaId());
putToMetaTable(connection, put);
- LOG.info("Updated row " + regionInfo.getRegionNameAsString() +
+ LOG.info("Updated row " + defaultRegionInfo.getRegionNameAsString() +
" with server=" + sn);
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/9427d6c7/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 75f59f6..c0102de 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
@@ -879,6 +879,36 @@ public class TestHBaseFsck {
}
}
+ /*
+ * This creates a table with region_replica > 1 and verifies hbck can fix replica region showing
+ * up as key in meta table.
+ */
+ @Test
+ public void testHbckReplicaRegionAsKeyInMeta() throws Exception {
+ TableName table = TableName.valueOf("testHbckReplicaRegionAsKeyInMeta");
+ try {
+ setupTableWithRegionReplica(table, 2);
+ TEST_UTIL.getHBaseAdmin().flush(table.getName());
+
+ HTable meta = new HTable(conf, TableName.META_TABLE_NAME);
+ HRegionInfo hri = new HRegionInfo(table, SPLITS[0], SPLITS[2], false, 1500328224175L, 1);
+ Put put = MetaTableAccessor.makePutFromRegionInfo(hri);
+ meta.put(put);
+
+ assertErrors(doFsck(conf, false),
+ new HBaseFsck.ErrorReporter.ERROR_CODE[] {
+ HBaseFsck.ErrorReporter.ERROR_CODE.EMPTY_META_CELL });
+
+ // fix the problem
+ doFsck(conf, true);
+
+ // run hbck again to make sure we don't see any errors
+ assertNoErrors(doFsck(conf, false));
+ } finally {
+ cleanupTable(table);
+ }
+ }
+
@Test
public void testHbckWithFewerReplica() throws Exception {
TableName table =