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
+}