HBASE-20006 TestRestoreSnapshotFromClientWithRegionReplicas is flakey Signed-off-by: Ted Yu <yuzhih...@gmail.com> Signed-off-by: Sean Busbey <bus...@apache.org>
Conflicts: hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientWithRegionReplicas.java hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.java Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/8a244e51 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/8a244e51 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/8a244e51 Branch: refs/heads/branch-1 Commit: 8a244e51d7c9e54c81c21930046d1758f306dfa0 Parents: 03eb3d2 Author: Toshihiro Suzuki <brfrn...@gmail.com> Authored: Sun Mar 4 14:30:07 2018 +0900 Committer: Sean Busbey <bus...@apache.org> Committed: Fri Apr 20 11:34:45 2018 -0500 ---------------------------------------------------------------------- .../hbase/regionserver/StoreFileInfo.java | 37 ++++++++++++++------ .../hbase/util/ServerRegionReplicaUtil.java | 27 ++++++++++---- .../regionserver/TestHRegionReplayEvents.java | 10 +++--- 3 files changed, 51 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/8a244e51/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileInfo.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileInfo.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileInfo.java index 12da6b7..76551e2 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileInfo.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileInfo.java @@ -145,13 +145,12 @@ public class StoreFileInfo { /** * Create a Store File Info from an HFileLink - * @param conf the {@link Configuration} to use - * @param fs The current file system to use. + * @param conf The {@link Configuration} to use + * @param fs The current file system to use * @param fileStatus The {@link FileStatus} of the file */ public StoreFileInfo(final Configuration conf, final FileSystem fs, final FileStatus fileStatus, - final HFileLink link) - throws IOException { + final HFileLink link) { this.fs = fs; this.conf = conf; // initialPath can be null only if we get a link. @@ -163,15 +162,13 @@ public class StoreFileInfo { /** * Create a Store File Info from an HFileLink - * @param conf - * @param fs - * @param fileStatus - * @param reference - * @throws IOException + * @param conf The {@link Configuration} to use + * @param fs The current file system to use + * @param fileStatus The {@link FileStatus} of the file + * @param reference The reference instance */ public StoreFileInfo(final Configuration conf, final FileSystem fs, final FileStatus fileStatus, - final Reference reference) - throws IOException { + final Reference reference) { this.fs = fs; this.conf = conf; this.initialPath = fileStatus.getPath(); @@ -181,6 +178,24 @@ public class StoreFileInfo { } /** + * Create a Store File Info from an HFileLink and a Reference + * @param conf The {@link Configuration} to use + * @param fs The current file system to use + * @param fileStatus The {@link FileStatus} of the file + * @param reference The reference instance + * @param link The link instance + */ + public StoreFileInfo(final Configuration conf, final FileSystem fs, final FileStatus fileStatus, + final Reference reference, final HFileLink link) { + this.fs = fs; + this.conf = conf; + this.initialPath = fileStatus.getPath(); + this.createdTimestamp = fileStatus.getModificationTime(); + this.reference = reference; + this.link = link; + } + + /** * Sets the region coprocessor env. * @param coprocessorHost */ http://git-wip-us.apache.org/repos/asf/hbase/blob/8a244e51/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.java index 2ba1b47..2f21712 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.java @@ -124,15 +124,28 @@ public class ServerRegionReplicaUtil extends RegionReplicaUtil { } // else create a store file link. The link file does not exists on filesystem though. - HFileLink link = HFileLink.build(conf, regionInfoForFs.getTable(), - regionInfoForFs.getEncodedName(), familyName, path.getName()); - - if (StoreFileInfo.isReference(path)) { + if (HFileLink.isHFileLink(path) || StoreFileInfo.isHFile(path)) { + HFileLink link = HFileLink + .build(conf, regionInfoForFs.getTable(), regionInfoForFs.getEncodedName(), familyName, + path.getName()); + return new StoreFileInfo(conf, fs, link.getFileStatus(fs), link); + } else if (StoreFileInfo.isReference(path)) { Reference reference = Reference.read(fs, path); - return new StoreFileInfo(conf, fs, link.getFileStatus(fs), reference); + Path referencePath = StoreFileInfo.getReferredToFile(path); + if (HFileLink.isHFileLink(referencePath)) { + // HFileLink Reference + HFileLink link = HFileLink.buildFromHFileLinkPattern(conf, referencePath); + return new StoreFileInfo(conf, fs, link.getFileStatus(fs), reference, link); + } else { + // Reference + HFileLink link = HFileLink + .build(conf, regionInfoForFs.getTable(), regionInfoForFs.getEncodedName(), familyName, + path.getName()); + return new StoreFileInfo(conf, fs, link.getFileStatus(fs), reference); + } + } else { + throw new IOException("path=" + path + " doesn't look like a valid StoreFile"); } - - return new StoreFileInfo(conf, fs, link.getFileStatus(fs), link); } /** http://git-wip-us.apache.org/repos/asf/hbase/blob/8a244e51/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.java index 3a8b557..397387a 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.java @@ -1538,7 +1538,7 @@ public class TestHRegionReplayEvents { .addStoreFlushes(StoreFlushDescriptor.newBuilder() .setFamilyName(ByteString.copyFrom(families[0])) .setStoreHomeDir("/store_home_dir") - .addFlushOutput("/foo/baz/bar") + .addFlushOutput("/foo/baz/123") .build()) .build()); } @@ -1552,8 +1552,8 @@ public class TestHRegionReplayEvents { .setEncodedRegionName( ByteString.copyFrom(primaryRegion.getRegionInfo().getEncodedNameAsBytes())) .setFamilyName(ByteString.copyFrom(families[0])) - .addCompactionInput("/foo") - .addCompactionOutput("/bar") + .addCompactionInput("/123") + .addCompactionOutput("/456") .setStoreHomeDir("/store_home_dir") .setRegionName(ByteString.copyFrom(primaryRegion.getRegionInfo().getRegionName())) .build() @@ -1575,7 +1575,7 @@ public class TestHRegionReplayEvents { .addStores(StoreDescriptor.newBuilder() .setFamilyName(ByteString.copyFrom(families[0])) .setStoreHomeDir("/store_home_dir") - .addStoreFile("/foo") + .addStoreFile("/123") .build()) .build()); } @@ -1592,7 +1592,7 @@ public class TestHRegionReplayEvents { .addStores(StoreDescriptor.newBuilder() .setFamilyName(ByteString.copyFrom(families[0])) .setStoreHomeDir("/store_home_dir") - .addStoreFile("/foo") + .addStoreFile("/123") .build()) .build()); }