YARN-108. FSDownload can create cache directories with the wrong permissions (Jason Lowe via bobby)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1386838 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Robert Joseph Evans 2012-09-17 21:05:11 +00:00
parent d720ebc2d9
commit 2526a96aaa
3 changed files with 22 additions and 4 deletions

View File

@ -90,6 +90,9 @@ Release 0.23.4 - UNRELEASED
Change package of YarnClient to org.apache.hadoop. (Bikas Saha via vinodkv) Change package of YarnClient to org.apache.hadoop. (Bikas Saha via vinodkv)
YARN-108. FSDownload can create cache directories with the wrong
permissions (Jason Lowe via bobby)
OPTIMIZATIONS OPTIMIZATIONS
BUG FIXES BUG FIXES

View File

@ -82,6 +82,13 @@ LocalResource getResource() {
return resource; return resource;
} }
private void createDir(Path path, FsPermission perm) throws IOException {
files.mkdir(path, perm, false);
if (!perm.equals(files.getUMask().applyUMask(perm))) {
files.setPermission(path, perm);
}
}
private Path copy(Path sCopy, Path dstdir) throws IOException { private Path copy(Path sCopy, Path dstdir) throws IOException {
FileSystem sourceFs = sCopy.getFileSystem(conf); FileSystem sourceFs = sCopy.getFileSystem(conf);
Path dCopy = new Path(dstdir, sCopy.getName() + ".tmp"); Path dCopy = new Path(dstdir, sCopy.getName() + ".tmp");
@ -144,9 +151,9 @@ public Path call() throws Exception {
} while (files.util().exists(tmp)); } while (files.util().exists(tmp));
destDirPath = tmp; destDirPath = tmp;
files.mkdir(destDirPath, cachePerms, false); createDir(destDirPath, cachePerms);
final Path dst_work = new Path(destDirPath + "_tmp"); final Path dst_work = new Path(destDirPath + "_tmp");
files.mkdir(dst_work, cachePerms, false); createDir(dst_work, cachePerms);
Path dFinal = files.makeQualified(new Path(dst_work, sCopy.getName())); Path dFinal = files.makeQualified(new Path(dst_work, sCopy.getName()));
try { try {

View File

@ -42,6 +42,7 @@
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.CommonConfigurationKeys;
import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileContext; import org.apache.hadoop.fs.FileContext;
import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileStatus;
@ -115,6 +116,7 @@ static LocalResource createJar(FileContext files, Path p,
public void testDownload() throws IOException, URISyntaxException, public void testDownload() throws IOException, URISyntaxException,
InterruptedException { InterruptedException {
Configuration conf = new Configuration(); Configuration conf = new Configuration();
conf.set(CommonConfigurationKeys.FS_PERMISSIONS_UMASK_KEY, "077");
FileContext files = FileContext.getLocalFSFileContext(conf); FileContext files = FileContext.getLocalFSFileContext(conf);
final Path basedir = files.makeQualified(new Path("target", final Path basedir = files.makeQualified(new Path("target",
TestFSDownload.class.getSimpleName())); TestFSDownload.class.getSimpleName()));
@ -162,8 +164,14 @@ public void testDownload() throws IOException, URISyntaxException,
Path localized = p.getValue().get(); Path localized = p.getValue().get();
assertEquals(sizes[Integer.valueOf(localized.getName())], p.getKey() assertEquals(sizes[Integer.valueOf(localized.getName())], p.getKey()
.getSize()); .getSize());
FileStatus status = files.getFileStatus(localized);
FileStatus status = files.getFileStatus(localized.getParent());
FsPermission perm = status.getPermission(); FsPermission perm = status.getPermission();
assertEquals("Cache directory permissions are incorrect",
new FsPermission((short)0755), perm);
status = files.getFileStatus(localized);
perm = status.getPermission();
System.out.println("File permission " + perm + System.out.println("File permission " + perm +
" for rsrc vis " + p.getKey().getVisibility().name()); " for rsrc vis " + p.getKey().getVisibility().name());
assert(rsrcVis.containsKey(p.getKey())); assert(rsrcVis.containsKey(p.getKey()));