You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cn...@apache.org on 2014/03/22 06:21:34 UTC
svn commit: r1580172 - in
/hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common: ./
src/main/java/org/apache/hadoop/fs/viewfs/
src/test/java/org/apache/hadoop/fs/viewfs/
Author: cnauroth
Date: Sat Mar 22 05:21:33 2014
New Revision: 1580172
URL: http://svn.apache.org/r1580172
Log:
HADOOP-10191. Merging change r1580171 from branch-2 to branch-2.4
Modified:
hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/CHANGES.txt
hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/Constants.java
hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java
hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFs.java
hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/ViewFileSystemBaseTest.java
Modified: hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1580172&r1=1580171&r2=1580172&view=diff
==============================================================================
--- hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/CHANGES.txt (original)
+++ hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/CHANGES.txt Sat Mar 22 05:21:33 2014
@@ -109,6 +109,9 @@ Release 2.4.0 - UNRELEASED
HADOOP-10070. RPC client doesn't use per-connection conf to determine
server's expected Kerberos principal name. (atm)
+ HADOOP-10191. Missing executable permission on viewfs internal dirs.
+ (Gera Shegalov via cnauroth)
+
BREAKDOWN OF HADOOP-10184 SUBTASKS AND RELATED JIRAS
HADOOP-10185. FileSystem API for ACLs. (cnauroth)
Modified: hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/Constants.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/Constants.java?rev=1580172&r1=1580171&r2=1580172&view=diff
==============================================================================
--- hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/Constants.java (original)
+++ hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/Constants.java Sat Mar 22 05:21:33 2014
@@ -64,6 +64,6 @@ public interface Constants {
*/
public static final String CONFIG_VIEWFS_LINK_MERGE_SLASH = "linkMergeSlash";
- static public final FsPermission PERMISSION_RRR =
- new FsPermission((short) 0444);
+ static public final FsPermission PERMISSION_555 =
+ new FsPermission((short) 0555);
}
Modified: hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java?rev=1580172&r1=1580171&r2=1580172&view=diff
==============================================================================
--- hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java (original)
+++ hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java Sat Mar 22 05:21:33 2014
@@ -17,7 +17,7 @@
*/
package org.apache.hadoop.fs.viewfs;
-import static org.apache.hadoop.fs.viewfs.Constants.PERMISSION_RRR;
+import static org.apache.hadoop.fs.viewfs.Constants.PERMISSION_555;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -714,7 +714,7 @@ public class ViewFileSystem extends File
public FileStatus getFileStatus(Path f) throws IOException {
checkPathIsSlash(f);
return new FileStatus(0, true, 0, 0, creationTime, creationTime,
- PERMISSION_RRR, ugi.getUserName(), ugi.getGroupNames()[0],
+ PERMISSION_555, ugi.getUserName(), ugi.getGroupNames()[0],
new Path(theInternalDir.fullPath).makeQualified(
myUri, ROOT_PATH));
@@ -734,14 +734,14 @@ public class ViewFileSystem extends File
INodeLink<FileSystem> link = (INodeLink<FileSystem>) inode;
result[i++] = new FileStatus(0, false, 0, 0,
- creationTime, creationTime, PERMISSION_RRR,
+ creationTime, creationTime, PERMISSION_555,
ugi.getUserName(), ugi.getGroupNames()[0],
link.getTargetLink(),
new Path(inode.fullPath).makeQualified(
myUri, null));
} else {
result[i++] = new FileStatus(0, true, 0, 0,
- creationTime, creationTime, PERMISSION_RRR,
+ creationTime, creationTime, PERMISSION_555,
ugi.getUserName(), ugi.getGroupNames()[0],
new Path(inode.fullPath).makeQualified(
myUri, null));
Modified: hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFs.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFs.java?rev=1580172&r1=1580171&r2=1580172&view=diff
==============================================================================
--- hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFs.java (original)
+++ hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFs.java Sat Mar 22 05:21:33 2014
@@ -17,7 +17,7 @@
*/
package org.apache.hadoop.fs.viewfs;
-import static org.apache.hadoop.fs.viewfs.Constants.PERMISSION_RRR;
+import static org.apache.hadoop.fs.viewfs.Constants.PERMISSION_555;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -676,8 +676,8 @@ public class ViewFs extends AbstractFile
@Override
public FileStatus getFileStatus(final Path f) throws IOException {
checkPathIsSlash(f);
- return new FileStatus(0, true, 0, 0, creationTime, creationTime,
- PERMISSION_RRR, ugi.getUserName(), ugi.getGroupNames()[0],
+ return new FileStatus(0, true, 0, 0, creationTime, creationTime,
+ PERMISSION_555, ugi.getUserName(), ugi.getGroupNames()[0],
new Path(theInternalDir.fullPath).makeQualified(
myUri, null));
}
@@ -697,13 +697,13 @@ public class ViewFs extends AbstractFile
INodeLink<AbstractFileSystem> inodelink =
(INodeLink<AbstractFileSystem>) inode;
result = new FileStatus(0, false, 0, 0, creationTime, creationTime,
- PERMISSION_RRR, ugi.getUserName(), ugi.getGroupNames()[0],
+ PERMISSION_555, ugi.getUserName(), ugi.getGroupNames()[0],
inodelink.getTargetLink(),
new Path(inode.fullPath).makeQualified(
myUri, null));
} else {
result = new FileStatus(0, true, 0, 0, creationTime, creationTime,
- PERMISSION_RRR, ugi.getUserName(), ugi.getGroupNames()[0],
+ PERMISSION_555, ugi.getUserName(), ugi.getGroupNames()[0],
new Path(inode.fullPath).makeQualified(
myUri, null));
}
@@ -742,14 +742,14 @@ public class ViewFs extends AbstractFile
result[i++] = new FileStatus(0, false, 0, 0,
creationTime, creationTime,
- PERMISSION_RRR, ugi.getUserName(), ugi.getGroupNames()[0],
+ PERMISSION_555, ugi.getUserName(), ugi.getGroupNames()[0],
link.getTargetLink(),
new Path(inode.fullPath).makeQualified(
myUri, null));
} else {
result[i++] = new FileStatus(0, true, 0, 0,
creationTime, creationTime,
- PERMISSION_RRR, ugi.getUserName(), ugi.getGroupNames()[0],
+ PERMISSION_555, ugi.getUserName(), ugi.getGroupNames()[0],
new Path(inode.fullPath).makeQualified(
myUri, null));
}
Modified: hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/ViewFileSystemBaseTest.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/ViewFileSystemBaseTest.java?rev=1580172&r1=1580171&r2=1580172&view=diff
==============================================================================
--- hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/ViewFileSystemBaseTest.java (original)
+++ hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/ViewFileSystemBaseTest.java Sat Mar 22 05:21:33 2014
@@ -31,6 +31,8 @@ import static org.apache.hadoop.fs.FileS
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FsConstants;
import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.fs.permission.FsAction;
+import org.apache.hadoop.fs.permission.FsPermission;
import org.apache.hadoop.fs.viewfs.ConfigUtil;
import org.apache.hadoop.fs.viewfs.ViewFileSystem;
import org.apache.hadoop.fs.viewfs.ViewFileSystem.MountPoint;
@@ -401,38 +403,41 @@ public class ViewFileSystemBaseTest {
FileStatus[] dirPaths = fsView.listStatus(new Path("/"));
FileStatus fs;
- Assert.assertEquals(getExpectedDirPaths(), dirPaths.length);
- fs = fileSystemTestHelper.containsPath(fsView, "/user", dirPaths);
+ verifyRootChildren(dirPaths);
+
+ // list on internal dir
+ dirPaths = fsView.listStatus(new Path("/internalDir"));
+ Assert.assertEquals(2, dirPaths.length);
+
+ fs = fileSystemTestHelper.containsPath(fsView, "/internalDir/internalDir2", dirPaths);
Assert.assertNotNull(fs);
- Assert.assertTrue("A mount should appear as symlink", fs.isSymlink());
- fs = fileSystemTestHelper.containsPath(fsView, "/data", dirPaths);
+ Assert.assertTrue("A mount should appear as symlink", fs.isDirectory());
+ fs = fileSystemTestHelper.containsPath(fsView, "/internalDir/linkToDir2",
+ dirPaths);
Assert.assertNotNull(fs);
Assert.assertTrue("A mount should appear as symlink", fs.isSymlink());
+ }
+
+ private void verifyRootChildren(FileStatus[] dirPaths) throws IOException {
+ FileStatus fs;
+ Assert.assertEquals(getExpectedDirPaths(), dirPaths.length);
+ fs = fileSystemTestHelper.containsPath(fsView, "/user", dirPaths);
+ Assert.assertNotNull(fs);
+ Assert.assertTrue("A mount should appear as symlink", fs.isSymlink());
+ fs = fileSystemTestHelper.containsPath(fsView, "/data", dirPaths);
+ Assert.assertNotNull(fs);
+ Assert.assertTrue("A mount should appear as symlink", fs.isSymlink());
fs = fileSystemTestHelper.containsPath(fsView, "/internalDir", dirPaths);
- Assert.assertNotNull(fs);
- Assert.assertTrue("A mount should appear as symlink", fs.isDirectory());
+ Assert.assertNotNull(fs);
+ Assert.assertTrue("A mount should appear as symlink", fs.isDirectory());
fs = fileSystemTestHelper.containsPath(fsView, "/danglingLink", dirPaths);
- Assert.assertNotNull(fs);
- Assert.assertTrue("A mount should appear as symlink", fs.isSymlink());
+ Assert.assertNotNull(fs);
+ Assert.assertTrue("A mount should appear as symlink", fs.isSymlink());
fs = fileSystemTestHelper.containsPath(fsView, "/linkToAFile", dirPaths);
- Assert.assertNotNull(fs);
- Assert.assertTrue("A mount should appear as symlink", fs.isSymlink());
-
-
-
- // list on internal dir
- dirPaths = fsView.listStatus(new Path("/internalDir"));
- Assert.assertEquals(2, dirPaths.length);
-
- fs = fileSystemTestHelper.containsPath(fsView, "/internalDir/internalDir2", dirPaths);
- Assert.assertNotNull(fs);
- Assert.assertTrue("A mount should appear as symlink", fs.isDirectory());
- fs = fileSystemTestHelper.containsPath(fsView, "/internalDir/linkToDir2",
- dirPaths);
- Assert.assertNotNull(fs);
- Assert.assertTrue("A mount should appear as symlink", fs.isSymlink());
+ Assert.assertNotNull(fs);
+ Assert.assertTrue("A mount should appear as symlink", fs.isSymlink());
}
-
+
int getExpectedDirPaths() {
return 7;
}
@@ -681,4 +686,38 @@ public class ViewFileSystemBaseTest {
Assert.assertTrue("Target of created file should be type file",
fsTarget.isFile(new Path(targetTestRoot,"user/foo")));
}
+
+ @Test
+ public void testRootReadableExecutable() throws IOException {
+ // verify executable permission on root: cd /
+ //
+ Assert.assertFalse("In root before cd",
+ fsView.getWorkingDirectory().isRoot());
+ fsView.setWorkingDirectory(new Path("/"));
+ Assert.assertTrue("Not in root dir after cd",
+ fsView.getWorkingDirectory().isRoot());
+
+ // verify readable
+ //
+ verifyRootChildren(fsView.listStatus(fsView.getWorkingDirectory()));
+
+ // verify permissions
+ //
+ final FileStatus rootStatus =
+ fsView.getFileStatus(fsView.getWorkingDirectory());
+ final FsPermission perms = rootStatus.getPermission();
+
+ Assert.assertTrue("User-executable permission not set!",
+ perms.getUserAction().implies(FsAction.EXECUTE));
+ Assert.assertTrue("User-readable permission not set!",
+ perms.getUserAction().implies(FsAction.READ));
+ Assert.assertTrue("Group-executable permission not set!",
+ perms.getGroupAction().implies(FsAction.EXECUTE));
+ Assert.assertTrue("Group-readable permission not set!",
+ perms.getGroupAction().implies(FsAction.READ));
+ Assert.assertTrue("Other-executable permission not set!",
+ perms.getOtherAction().implies(FsAction.EXECUTE));
+ Assert.assertTrue("Other-readable permission not set!",
+ perms.getOtherAction().implies(FsAction.READ));
+ }
}