From 1c0fa25dc1c4bc787fe4d2809f162bea475a8b76 Mon Sep 17 00:00:00 2001 From: Brahma Reddy Battula Date: Fri, 25 Nov 2016 19:54:50 +0530 Subject: [PATCH] HADOOP-13820. Replace ugi.getUsername() with ugi.getShortUserName() in viewFS. Contributed By Brahma Reddy Battula. (cherry picked from commit ee3d437a33c2106ea416078e722ff6184106a0bc) --- .../hadoop/fs/viewfs/ViewFileSystem.java | 8 +++---- .../org/apache/hadoop/fs/viewfs/ViewFs.java | 12 +++++----- .../fs/viewfs/ViewFileSystemBaseTest.java | 22 ++++++++++++++++++- .../hadoop/fs/viewfs/ViewFsBaseTest.java | 22 +++++++++++++++++++ 4 files changed, 53 insertions(+), 11 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 0f090a59c17..c315dc5242c 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 @@ -862,7 +862,7 @@ public class ViewFileSystem extends FileSystem { public FileStatus getFileStatus(Path f) throws IOException { checkPathIsSlash(f); return new FileStatus(0, true, 0, 0, creationTime, creationTime, - PERMISSION_555, ugi.getUserName(), ugi.getPrimaryGroupName(), + PERMISSION_555, ugi.getShortUserName(), ugi.getPrimaryGroupName(), new Path(theInternalDir.fullPath).makeQualified( myUri, ROOT_PATH)); @@ -883,14 +883,14 @@ public class ViewFileSystem extends FileSystem { result[i++] = new FileStatus(0, false, 0, 0, creationTime, creationTime, PERMISSION_555, - ugi.getUserName(), ugi.getPrimaryGroupName(), + ugi.getShortUserName(), ugi.getPrimaryGroupName(), link.getTargetLink(), new Path(inode.fullPath).makeQualified( myUri, null)); } else { result[i++] = new FileStatus(0, true, 0, 0, creationTime, creationTime, PERMISSION_555, - ugi.getUserName(), ugi.getGroupNames()[0], + ugi.getShortUserName(), ugi.getGroupNames()[0], new Path(inode.fullPath).makeQualified( myUri, null)); } @@ -1014,7 +1014,7 @@ public class ViewFileSystem extends FileSystem { @Override public AclStatus getAclStatus(Path path) throws IOException { checkPathIsSlash(path); - return new AclStatus.Builder().owner(ugi.getUserName()) + return new AclStatus.Builder().owner(ugi.getShortUserName()) .group(ugi.getPrimaryGroupName()) .addEntries(AclUtil.getMinimalAcl(PERMISSION_555)) .stickyBit(false).build(); diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFs.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFs.java index 6195540f3e1..d5f8e81f26d 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFs.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFs.java @@ -845,7 +845,7 @@ public class ViewFs extends AbstractFileSystem { public FileStatus getFileStatus(final Path f) throws IOException { checkPathIsSlash(f); return new FileStatus(0, true, 0, 0, creationTime, creationTime, - PERMISSION_555, ugi.getUserName(), ugi.getPrimaryGroupName(), + PERMISSION_555, ugi.getShortUserName(), ugi.getPrimaryGroupName(), new Path(theInternalDir.fullPath).makeQualified( myUri, null)); } @@ -865,13 +865,13 @@ public class ViewFs extends AbstractFileSystem { INodeLink inodelink = (INodeLink) inode; result = new FileStatus(0, false, 0, 0, creationTime, creationTime, - PERMISSION_555, ugi.getUserName(), ugi.getPrimaryGroupName(), + PERMISSION_555, ugi.getShortUserName(), ugi.getPrimaryGroupName(), inodelink.getTargetLink(), new Path(inode.fullPath).makeQualified( myUri, null)); } else { result = new FileStatus(0, true, 0, 0, creationTime, creationTime, - PERMISSION_555, ugi.getUserName(), ugi.getPrimaryGroupName(), + PERMISSION_555, ugi.getShortUserName(), ugi.getPrimaryGroupName(), new Path(inode.fullPath).makeQualified( myUri, null)); } @@ -910,14 +910,14 @@ public class ViewFs extends AbstractFileSystem { result[i++] = new FileStatus(0, false, 0, 0, creationTime, creationTime, - PERMISSION_555, ugi.getUserName(), ugi.getPrimaryGroupName(), + PERMISSION_555, ugi.getShortUserName(), ugi.getPrimaryGroupName(), link.getTargetLink(), new Path(inode.fullPath).makeQualified( myUri, null)); } else { result[i++] = new FileStatus(0, true, 0, 0, creationTime, creationTime, - PERMISSION_555, ugi.getUserName(), ugi.getGroupNames()[0], + PERMISSION_555, ugi.getShortUserName(), ugi.getGroupNames()[0], new Path(inode.fullPath).makeQualified( myUri, null)); } @@ -1043,7 +1043,7 @@ public class ViewFs extends AbstractFileSystem { @Override public AclStatus getAclStatus(Path path) throws IOException { checkPathIsSlash(path); - return new AclStatus.Builder().owner(ugi.getUserName()) + return new AclStatus.Builder().owner(ugi.getShortUserName()) .group(ugi.getPrimaryGroupName()) .addEntries(AclUtil.getMinimalAcl(PERMISSION_555)) .stickyBit(false).build(); diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/ViewFileSystemBaseTest.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/ViewFileSystemBaseTest.java index ea4d9b1548c..8c4ddc3771c 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/ViewFileSystemBaseTest.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/ViewFileSystemBaseTest.java @@ -20,8 +20,8 @@ package org.apache.hadoop.fs.viewfs; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; +import java.security.PrivilegedExceptionAction; import java.util.Arrays; -import java.util.ArrayList; import java.util.List; @@ -885,4 +885,24 @@ abstract public class ViewFileSystemBaseTest { public void testInternalDeleteSnapshot() throws IOException { fsView.deleteSnapshot(new Path("/internalDir"), "snap1"); } + + @Test + public void testCheckOwnerWithFileStatus() + throws IOException, InterruptedException { + final UserGroupInformation userUgi = UserGroupInformation + .createUserForTesting("user@HADOOP.COM", new String[]{"hadoop"}); + userUgi.doAs(new PrivilegedExceptionAction() { + @Override + public Object run() throws IOException { + UserGroupInformation ugi = UserGroupInformation.getCurrentUser(); + String doAsUserName = ugi.getUserName(); + assertEquals(doAsUserName, "user@HADOOP.COM"); + FileSystem vfs = FileSystem.get(FsConstants.VIEWFS_URI, conf); + FileStatus stat = vfs.getFileStatus(new Path("/internalDir")); + assertEquals(userUgi.getShortUserName(), stat.getOwner()); + return null; + } + }); + } + } diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/ViewFsBaseTest.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/ViewFsBaseTest.java index ceebb26cb6e..16d26442d14 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/ViewFsBaseTest.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/ViewFsBaseTest.java @@ -29,6 +29,8 @@ import static org.junit.Assert.assertFalse; import java.io.FileNotFoundException; import java.io.IOException; import java.net.URI; +import java.net.URISyntaxException; +import java.security.PrivilegedExceptionAction; import java.util.ArrayList; import java.util.List; @@ -798,4 +800,24 @@ abstract public class ViewFsBaseTest { public void testInternalDeleteSnapshot() throws IOException { fcView.deleteSnapshot(new Path("/internalDir"), "snap1"); } + + @Test + public void testOwnerForInternalDir() + throws IOException, InterruptedException, URISyntaxException { + final UserGroupInformation userUgi = UserGroupInformation + .createUserForTesting("user@HADOOP.COM", new String[]{"hadoop"}); + userUgi.doAs(new PrivilegedExceptionAction() { + @Override + public Object run() throws IOException, URISyntaxException { + UserGroupInformation ugi = UserGroupInformation.getCurrentUser(); + String doAsUserName = ugi.getUserName(); + assertEquals(doAsUserName, "user@HADOOP.COM"); + FileContext + viewFS = FileContext.getFileContext(FsConstants.VIEWFS_URI, conf); + FileStatus stat = viewFS.getFileStatus(new Path("/internalDir")); + assertEquals(userUgi.getShortUserName(), stat.getOwner()); + return null; + } + }); + } }