Author: tucu Date: Mon Jun 25 21:37:14 2012 New Revision: 1353751 URL: http://svn.apache.org/viewvc?rev=1353751&view=rev Log: Merge -r 1353749:1353750 from trunk to branch. FIXES: MAPREDUCE-2289
Modified: hadoop/common/branches/branch-2/hadoop-mapreduce-project/CHANGES.txt hadoop/common/branches/branch-2/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/JobSubmissionFiles.java Modified: hadoop/common/branches/branch-2/hadoop-mapreduce-project/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-mapreduce-project/CHANGES.txt?rev=1353751&r1=1353750&r2=1353751&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-mapreduce-project/CHANGES.txt (original) +++ hadoop/common/branches/branch-2/hadoop-mapreduce-project/CHANGES.txt Mon Jun 25 21:37:14 2012 @@ -66,6 +66,9 @@ Release 2.0.1-alpha - UNRELEASED MAPREDUCE-4290. Fix Yarn Applicaiton Status to MR JobState conversion. (Devaraj K via sseth) + MAPREDUCE-2289. Permissions race can make getStagingDir fail on local filesystem + (ahmed via tucu) + Release 2.0.0-alpha - 05-23-2012 INCOMPATIBLE CHANGES Modified: hadoop/common/branches/branch-2/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/JobSubmissionFiles.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/JobSubmissionFiles.java?rev=1353751&r1=1353750&r2=1353751&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/JobSubmissionFiles.java (original) +++ hadoop/common/branches/branch-2/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/JobSubmissionFiles.java Mon Jun 25 21:37:14 2012 @@ -27,12 +27,18 @@ import org.apache.hadoop.fs.permission.F import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.conf.Configuration; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + /** * A utility to manage job submission files. */ @InterfaceAudience.Private public class JobSubmissionFiles { + private final static Log LOG = LogFactory.getLog(JobSubmissionFiles.class); + // job submission directory is private! final public static FsPermission JOB_DIR_PERMISSION = FsPermission.createImmutable((short) 0700); // rwx-------- @@ -102,14 +108,18 @@ public class JobSubmissionFiles { if (fs.exists(stagingArea)) { FileStatus fsStatus = fs.getFileStatus(stagingArea); String owner = fsStatus.getOwner(); - if (!(owner.equals(currentUser) || owner.equals(realUser)) || - !fsStatus.getPermission().equals(JOB_DIR_PERMISSION)) { - throw new IOException("The ownership/permissions on the staging " + - "directory " + stagingArea + " is not as expected. " + - "It is owned by " + owner + " and permissions are "+ - fsStatus.getPermission() + ". The directory must " + + if (!(owner.equals(currentUser) || owner.equals(realUser))) { + throw new IOException("The ownership on the staging directory " + + stagingArea + " is not as expected. " + + "It is owned by " + owner + ". The directory must " + "be owned by the submitter " + currentUser + " or " + - "by " + realUser + " and permissions must be rwx------"); + "by " + realUser); + } + if (!fsStatus.getPermission().equals(JOB_DIR_PERMISSION)) { + LOG.info("Permissions on staging directory " + stagingArea + " are " + + "incorrect: " + fsStatus.getPermission() + ". Fixing permissions " + + "to correct value " + JOB_DIR_PERMISSION); + fs.setPermission(stagingArea, JOB_DIR_PERMISSION); } } else { fs.mkdirs(stagingArea, @@ -118,4 +128,4 @@ public class JobSubmissionFiles { return stagingArea; } -} \ No newline at end of file +}