Repository: hbase Updated Branches: refs/heads/branch-1 03eb3d24b -> 8a244e51d refs/heads/branch-2 24eb141ba -> 22e7ae031 refs/heads/master 914de1141 -> 4e183748c
HBASE-20006 TestRestoreSnapshotFromClientWithRegionReplicas is flakey Signed-off-by: Ted Yu <yuzhih...@gmail.com> Signed-off-by: Sean Busbey <bus...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/4e183748 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/4e183748 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/4e183748 Branch: refs/heads/master Commit: 4e183748c7900da905fb3549634df614b471b3cb Parents: 914de11 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 10:51:11 2018 -0500 ---------------------------------------------------------------------- .../hbase/regionserver/StoreFileInfo.java | 37 ++++++++++++++------ .../hbase/util/ServerRegionReplicaUtil.java | 27 ++++++++++---- ...oreSnapshotFromClientWithRegionReplicas.java | 2 -- .../regionserver/TestHRegionReplayEvents.java | 10 +++--- 4 files changed, 51 insertions(+), 25 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/4e183748/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 e7419d5..c9f5f8d 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 @@ -157,13 +157,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. @@ -175,15 +174,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(); @@ -193,6 +190,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/4e183748/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 769d480..0609733 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 @@ -128,15 +128,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/4e183748/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientWithRegionReplicas.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientWithRegionReplicas.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientWithRegionReplicas.java index 839542a..d301098 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientWithRegionReplicas.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientWithRegionReplicas.java @@ -25,12 +25,10 @@ import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.testclassification.ClientTests; import org.apache.hadoop.hbase.testclassification.LargeTests; import org.junit.ClassRule; -import org.junit.Ignore; import org.junit.Test; import org.junit.experimental.categories.Category; -@Ignore // Disabled because flakey. See HBASE-20006. @Category({LargeTests.class, ClientTests.class}) public class TestRestoreSnapshotFromClientWithRegionReplicas extends TestRestoreSnapshotFromClient { http://git-wip-us.apache.org/repos/asf/hbase/blob/4e183748/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 6e39afd..d06c1af 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 @@ -1578,7 +1578,7 @@ public class TestHRegionReplayEvents { .addStoreFlushes(StoreFlushDescriptor.newBuilder() .setFamilyName(UnsafeByteOperations.unsafeWrap(families[0])) .setStoreHomeDir("/store_home_dir") - .addFlushOutput("/foo/baz/bar") + .addFlushOutput("/foo/baz/123") .build()) .build()); } @@ -1593,8 +1593,8 @@ public class TestHRegionReplayEvents { .setEncodedRegionName( UnsafeByteOperations.unsafeWrap(primaryRegion.getRegionInfo().getEncodedNameAsBytes())) .setFamilyName(UnsafeByteOperations.unsafeWrap(families[0])) - .addCompactionInput("/foo") - .addCompactionOutput("/bar") + .addCompactionInput("/123") + .addCompactionOutput("/456") .setStoreHomeDir("/store_home_dir") .setRegionName(UnsafeByteOperations.unsafeWrap(primaryRegion.getRegionInfo().getRegionName())) .build() @@ -1617,7 +1617,7 @@ public class TestHRegionReplayEvents { .addStores(StoreDescriptor.newBuilder() .setFamilyName(UnsafeByteOperations.unsafeWrap(families[0])) .setStoreHomeDir("/store_home_dir") - .addStoreFile("/foo") + .addStoreFile("/123") .build()) .build()); } @@ -1634,7 +1634,7 @@ public class TestHRegionReplayEvents { .addStores(StoreDescriptor.newBuilder() .setFamilyName(UnsafeByteOperations.unsafeWrap(families[0])) .setStoreHomeDir("/store_home_dir") - .addStoreFile("/foo") + .addStoreFile("/123") .build()) .build()); }