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

@ -88,7 +88,10 @@ Release 0.23.4 - UNRELEASED
IMPROVEMENTS
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

View File

@ -82,6 +82,13 @@ public class FSDownload implements Callable<Path> {
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 {
FileSystem sourceFs = sCopy.getFileSystem(conf);
Path dCopy = new Path(dstdir, sCopy.getName() + ".tmp");
@ -144,9 +151,9 @@ public class FSDownload implements Callable<Path> {
} while (files.util().exists(tmp));
destDirPath = tmp;
files.mkdir(destDirPath, cachePerms, false);
createDir(destDirPath, cachePerms);
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()));
try {

View File

@ -42,6 +42,7 @@ import junit.framework.Assert;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.CommonConfigurationKeys;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileContext;
import org.apache.hadoop.fs.FileStatus;
@ -115,6 +116,7 @@ public class TestFSDownload {
public void testDownload() throws IOException, URISyntaxException,
InterruptedException {
Configuration conf = new Configuration();
conf.set(CommonConfigurationKeys.FS_PERMISSIONS_UMASK_KEY, "077");
FileContext files = FileContext.getLocalFSFileContext(conf);
final Path basedir = files.makeQualified(new Path("target",
TestFSDownload.class.getSimpleName()));
@ -162,8 +164,14 @@ public class TestFSDownload {
Path localized = p.getValue().get();
assertEquals(sizes[Integer.valueOf(localized.getName())], p.getKey()
.getSize());
FileStatus status = files.getFileStatus(localized);
FileStatus status = files.getFileStatus(localized.getParent());
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 +
" for rsrc vis " + p.getKey().getVisibility().name());
assert(rsrcVis.containsKey(p.getKey()));