From be26c1b9b0ae8fc138489498f40301cf3ee303a0 Mon Sep 17 00:00:00 2001 From: Steve Loughran Date: Thu, 14 Jul 2016 10:30:36 +0100 Subject: [PATCH] Revert "HADOOP-13073 RawLocalFileSystem does not react on changing umask. Contributed by Andras Bokor" This reverts commit 45af585e7ad23e7d5a5bc4dade00723d315ef6b2. --- .../apache/hadoop/fs/RawLocalFileSystem.java | 7 ++- .../fs/TestLocalFileSystemPermission.java | 56 +------------------ 2 files changed, 7 insertions(+), 56 deletions(-) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/RawLocalFileSystem.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/RawLocalFileSystem.java index 0fcddcf0986..cc41f4a41e8 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/RawLocalFileSystem.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/RawLocalFileSystem.java @@ -64,6 +64,8 @@ public class RawLocalFileSystem extends FileSystem { // Temporary workaround for HADOOP-9652. private static boolean useDeprecatedFileStatus = true; + private FsPermission umask; + @VisibleForTesting public static void useStatIfAvailable() { useDeprecatedFileStatus = !Stat.isAvailable(); @@ -97,6 +99,7 @@ public File pathToFile(Path path) { public void initialize(URI uri, Configuration conf) throws IOException { super.initialize(uri, conf); setConf(conf); + umask = FsPermission.getUMask(conf); } /******************************************************* @@ -230,7 +233,7 @@ private LocalFSFileOutputStream(Path f, boolean append, if (permission == null) { this.fos = new FileOutputStream(file, append); } else { - permission = permission.applyUMask(FsPermission.getUMask(getConf())); + permission = permission.applyUMask(umask); if (Shell.WINDOWS && NativeIO.isAvailable()) { this.fos = NativeIO.Windows.createFileOutputStreamWithMode(file, append, permission.toShort()); @@ -507,7 +510,7 @@ protected boolean mkOneDirWithMode(Path p, File p2f, FsPermission permission) if (permission == null) { permission = FsPermission.getDirDefault(); } - permission = permission.applyUMask(FsPermission.getUMask(getConf())); + permission = permission.applyUMask(umask); if (Shell.WINDOWS && NativeIO.isAvailable()) { try { NativeIO.Windows.createDirectoryWithMode(p2f, permission.toShort()); diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalFileSystemPermission.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalFileSystemPermission.java index 7252ab97cbb..e37de1957bb 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalFileSystemPermission.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalFileSystemPermission.java @@ -29,10 +29,6 @@ import junit.framework.*; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.not; -import static org.junit.Assert.assertThat; - /** * This class tests the local file system via the FileSystem abstraction. */ @@ -71,9 +67,9 @@ public void testLocalFSDirsetPermission() throws IOException { System.out.println("Cannot run test for Windows"); return; } - LocalFileSystem localfs = FileSystem.getLocal(new Configuration()); - Configuration conf = localfs.getConf(); + Configuration conf = new Configuration(); conf.set(CommonConfigurationKeys.FS_PERMISSIONS_UMASK_KEY, "044"); + LocalFileSystem localfs = FileSystem.getLocal(conf); Path dir = new Path(TEST_PATH_PREFIX + "dir"); localfs.mkdirs(dir); try { @@ -241,54 +237,6 @@ public void testLocalFSsetOwner() throws IOException { finally {cleanup(localfs, f);} } - /** - * Steps: - * 1. Create a directory with default permissions: 777 with umask 022 - * 2. Check the directory has good permissions: 755 - * 3. Set the umask to 062. - * 4. Create a new directory with default permissions. - * 5. For this directory we expect 715 as permission not 755 - * @throws Exception we can throw away all the exception. - */ - public void testSetUmaskInRealTime() throws Exception { - if (Path.WINDOWS) { - System.out.println("Cannot run test for Windows"); - return; - } - - LocalFileSystem localfs = FileSystem.getLocal(new Configuration()); - Configuration conf = localfs.getConf(); - conf.set(CommonConfigurationKeys.FS_PERMISSIONS_UMASK_KEY, "022"); - System.out.println( - conf.get(CommonConfigurationKeys.FS_PERMISSIONS_UMASK_KEY)); - Path dir = new Path(TEST_PATH_PREFIX + "dir"); - Path dir2 = new Path(TEST_PATH_PREFIX + "dir2"); - try { - assertTrue(localfs.mkdirs(dir)); - FsPermission initialPermission = getPermission(localfs, dir); - assertEquals( - "With umask 022 permission should be 755 since the default " + - "permission is 777", new FsPermission("755"), initialPermission); - - // Modify umask and create a new directory - // and check if new umask is applied - conf.set(CommonConfigurationKeys.FS_PERMISSIONS_UMASK_KEY, "062"); - assertTrue(localfs.mkdirs(dir2)); - FsPermission finalPermission = localfs.getFileStatus(dir2) - .getPermission(); - assertThat("With umask 062 permission should not be 755 since the " + - "default permission is 777", new FsPermission("755"), - is(not(finalPermission))); - assertEquals( - "With umask 062 we expect 715 since the default permission is 777", - new FsPermission("715"), finalPermission); - } finally { - conf.set(CommonConfigurationKeys.FS_PERMISSIONS_UMASK_KEY, "022"); - cleanup(localfs, dir); - cleanup(localfs, dir2); - } - } - static List getGroups() throws IOException { List a = new ArrayList(); String s = Shell.execCommand(Shell.getGroupsCommand());