From d14a7c6ee5e881235d18d4cf9241197a1817d745 Mon Sep 17 00:00:00 2001 From: Chentao Yu Date: Thu, 15 Apr 2021 17:46:40 -0700 Subject: [PATCH] HADOOP-18109. Ensure that default permissions of directories under internal ViewFS directories are the same as directories on target filesystems. Contributed by Chentao Yu. (3953) (cherry picked from commit 19d90e62fb28539f8c79bbb24f703301489825a6) --- .../hadoop/fs/viewfs/ViewFileSystem.java | 5 ----- .../fs/viewfs/TestViewFileSystemHdfs.java | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java index 7503edd45f..8f333d1506 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java @@ -1579,11 +1579,6 @@ public boolean mkdirs(Path dir, FsPermission permission) throw readOnlyMountTable("mkdirs", dir); } - @Override - public boolean mkdirs(Path dir) throws IOException { - return mkdirs(dir, null); - } - @Override public FSDataInputStream open(Path f, int bufferSize) throws AccessControlException, FileNotFoundException, IOException { diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFileSystemHdfs.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFileSystemHdfs.java index fcb52577d9..fdc746464f 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFileSystemHdfs.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFileSystemHdfs.java @@ -479,4 +479,23 @@ public Object run() throws IOException { assertEquals("The owner did not match ", owner, userUgi.getShortUserName()); otherfs.delete(user1Path, false); } + + @Test + public void testInternalDirectoryPermissions() throws IOException { + LOG.info("Starting testInternalDirectoryPermissions!"); + Configuration localConf = new Configuration(conf); + ConfigUtil.addLinkFallback( + localConf, new Path(targetTestRoot, "fallbackDir").toUri()); + FileSystem fs = FileSystem.get(FsConstants.VIEWFS_URI, localConf); + // check that the default permissions on a sub-folder of an internal + // directory are the same as those created on non-internal directories. + Path subDirOfInternalDir = new Path("/internalDir/dir1"); + fs.mkdirs(subDirOfInternalDir); + + Path subDirOfRealDir = new Path("/internalDir/linkToDir2/dir1"); + fs.mkdirs(subDirOfRealDir); + + assertEquals(fs.getFileStatus(subDirOfInternalDir).getPermission(), + fs.getFileStatus(subDirOfRealDir).getPermission()); + } }