diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/JobSubmissionFiles.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/JobSubmissionFiles.java index f6e66db2369..fffcb896091 100644 --- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/JobSubmissionFiles.java +++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/JobSubmissionFiles.java @@ -159,7 +159,7 @@ public static Path getStagingDir(Cluster cluster, Configuration conf, fs.setPermission(stagingArea, JOB_DIR_PERMISSION); } } catch (FileNotFoundException e) { - fs.mkdirs(stagingArea, new FsPermission(JOB_DIR_PERMISSION)); + FileSystem.mkdirs(fs, stagingArea, new FsPermission(JOB_DIR_PERMISSION)); } return stagingArea; } diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/test/java/org/apache/hadoop/mapreduce/TestJobSubmissionFiles.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/test/java/org/apache/hadoop/mapreduce/TestJobSubmissionFiles.java index ab3f7a0a937..6e9c80813fc 100644 --- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/test/java/org/apache/hadoop/mapreduce/TestJobSubmissionFiles.java +++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/test/java/org/apache/hadoop/mapreduce/TestJobSubmissionFiles.java @@ -19,6 +19,7 @@ package org.apache.hadoop.mapreduce; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.CommonConfigurationKeys; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FileSystemTestHelper; @@ -33,6 +34,8 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import org.apache.hadoop.hdfs.MiniDFSCluster; +import org.apache.hadoop.hdfs.HdfsConfiguration; /** * Tests for JobSubmissionFiles Utility class. */ @@ -139,4 +142,26 @@ public void testGetStagingDirWhenShortFileOwnerNameAndShortUserName() assertEquals(stagingPath, JobSubmissionFiles.getStagingDir(cluster, conf, user)); } + + @Test + public void testDirPermission() throws Exception { + Cluster cluster = mock(Cluster.class); + HdfsConfiguration conf = new HdfsConfiguration(); + conf.set(CommonConfigurationKeys.FS_PERMISSIONS_UMASK_KEY, "700"); + MiniDFSCluster dfsCluster = null; + try { + dfsCluster = new MiniDFSCluster.Builder(conf).numDataNodes(2).build(); + FileSystem fs = dfsCluster.getFileSystem(); + UserGroupInformation user = UserGroupInformation + .createUserForTesting(USER_1_SHORT_NAME, GROUP_NAMES); + Path stagingPath = new Path(fs.getUri().toString() + "/testDirPermission"); + when(cluster.getStagingAreaDir()).thenReturn(stagingPath); + Path res = JobSubmissionFiles.getStagingDir(cluster, conf, user); + assertEquals(new FsPermission(0700), fs.getFileStatus(res).getPermission()); + } finally { + if (dfsCluster != null) { + dfsCluster.shutdown(); + } + } + } }