This is an automated email from the ASF dual-hosted git repository. wwei pushed a commit to branch branch-2 in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/branch-2 by this push: new 70fd950 HADOOP-16840. AliyunOSS: getFileStatus throws FileNotFoundException in versioning bucket. Contributed by wujinhu. 70fd950 is described below commit 70fd9501aecde4f51bed739b4549dc163d1b66f4 Author: Weiwei Yang <w...@apache.org> AuthorDate: Sun Mar 8 21:01:34 2020 -0700 HADOOP-16840. AliyunOSS: getFileStatus throws FileNotFoundException in versioning bucket. Contributed by wujinhu. (cherry picked from commit 6dfe00c71eb3721e9be3fc42349a81c4b013ada1) --- .../hadoop/fs/aliyun/oss/AliyunOSSFileSystem.java | 18 +++++++++++------ .../oss/TestAliyunOSSFileSystemContract.java | 23 ++++++++++++++++++++++ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/hadoop-tools/hadoop-aliyun/src/main/java/org/apache/hadoop/fs/aliyun/oss/AliyunOSSFileSystem.java b/hadoop-tools/hadoop-aliyun/src/main/java/org/apache/hadoop/fs/aliyun/oss/AliyunOSSFileSystem.java index 414eafa..02088c8 100644 --- a/hadoop-tools/hadoop-aliyun/src/main/java/org/apache/hadoop/fs/aliyun/oss/AliyunOSSFileSystem.java +++ b/hadoop-tools/hadoop-aliyun/src/main/java/org/apache/hadoop/fs/aliyun/oss/AliyunOSSFileSystem.java @@ -273,12 +273,18 @@ public class AliyunOSSFileSystem extends FileSystem { } if (meta == null) { ObjectListing listing = store.listObjects(key, 1, null, false); - if (CollectionUtils.isNotEmpty(listing.getObjectSummaries()) || - CollectionUtils.isNotEmpty(listing.getCommonPrefixes())) { - return new OSSFileStatus(0, true, 1, 0, 0, qualifiedPath, username); - } else { - throw new FileNotFoundException(path + ": No such file or directory!"); - } + do { + if (CollectionUtils.isNotEmpty(listing.getObjectSummaries()) || + CollectionUtils.isNotEmpty(listing.getCommonPrefixes())) { + return new OSSFileStatus(0, true, 1, 0, 0, qualifiedPath, username); + } else if (listing.isTruncated()) { + listing = store.listObjects(key, 1000, listing.getNextMarker(), + false); + } else { + throw new FileNotFoundException( + path + ": No such file or directory!"); + } + } while (true); } else if (objectRepresentsDirectory(key, meta.getContentLength())) { return new OSSFileStatus(0, true, 1, 0, meta.getLastModified().getTime(), qualifiedPath, username); diff --git a/hadoop-tools/hadoop-aliyun/src/test/java/org/apache/hadoop/fs/aliyun/oss/TestAliyunOSSFileSystemContract.java b/hadoop-tools/hadoop-aliyun/src/test/java/org/apache/hadoop/fs/aliyun/oss/TestAliyunOSSFileSystemContract.java index a83c6da..e6467f4 100644 --- a/hadoop-tools/hadoop-aliyun/src/test/java/org/apache/hadoop/fs/aliyun/oss/TestAliyunOSSFileSystemContract.java +++ b/hadoop-tools/hadoop-aliyun/src/test/java/org/apache/hadoop/fs/aliyun/oss/TestAliyunOSSFileSystemContract.java @@ -31,6 +31,7 @@ import org.junit.Test; import java.io.FileNotFoundException; import java.io.IOException; +import java.util.Arrays; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -97,6 +98,28 @@ public class TestAliyunOSSFileSystemContract } @Test + public void testGetFileStatusInVersioningBucket() throws Exception { + Path file = this.path("/test/hadoop/file"); + for (int i = 1; i <= 30; ++i) { + this.createFile(new Path(file, "sub" + i)); + } + assertTrue("File exists", this.fs.exists(file)); + FileStatus fs = this.fs.getFileStatus(file); + assertEquals(fs.getOwner(), + UserGroupInformation.getCurrentUser().getShortUserName()); + assertEquals(fs.getGroup(), + UserGroupInformation.getCurrentUser().getShortUserName()); + + AliyunOSSFileSystemStore store = ((AliyunOSSFileSystem)this.fs).getStore(); + for (int i = 0; i < 29; ++i) { + store.deleteObjects(Arrays.asList("test/hadoop/file/sub" + i)); + } + + // HADOOP-16840, will throw FileNotFoundException without this fix + this.fs.getFileStatus(file); + } + + @Test public void testDeleteSubdir() throws IOException { Path parentDir = this.path("/test/hadoop"); Path file = this.path("/test/hadoop/file"); --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org