HDFS-4910. TestPermission failed in branch-2. Contributed by Chuan Liu.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1493932 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Chris Nauroth 2013-06-17 20:54:34 +00:00
parent a601f15ebe
commit 8eab891bff
2 changed files with 30 additions and 28 deletions

View File

@ -386,6 +386,8 @@ Release 2.1.0-beta - UNRELEASED
HDFS-4845. FSNamesystem.deleteInternal should acquire write-lock before HDFS-4845. FSNamesystem.deleteInternal should acquire write-lock before
changing the inode map. (Arpit Agarwal via szetszwo) changing the inode map. (Arpit Agarwal via szetszwo)
HDFS-4910. TestPermission failed in branch-2. (Chuan Liu via cnauroth)
BREAKDOWN OF HDFS-347 SUBTASKS AND RELATED JIRAS BREAKDOWN OF HDFS-347 SUBTASKS AND RELATED JIRAS
HDFS-4353. Encapsulate connections to peers in Peer and PeerServer classes. HDFS-4353. Encapsulate connections to peers in Peer and PeerServer classes.

View File

@ -144,35 +144,35 @@ void checkPermission(String path, INodeDirectory root, boolean doCheckOwner,
+ ", resolveLink=" + resolveLink); + ", resolveLink=" + resolveLink);
} }
// check if (parentAccess != null) && file exists, then check sb // check if (parentAccess != null) && file exists, then check sb
// Resolve symlinks, the check is performed on the link target. // If resolveLink, the check is performed on the link target.
final INodesInPath inodesInPath = root.getINodesInPath(path, true); final INodesInPath inodesInPath = root.getINodesInPath(path, resolveLink);
final Snapshot snapshot = inodesInPath.getPathSnapshot(); final Snapshot snapshot = inodesInPath.getPathSnapshot();
final INode[] inodes = inodesInPath.getINodes(); final INode[] inodes = inodesInPath.getINodes();
int ancestorIndex = inodes.length - 2; int ancestorIndex = inodes.length - 2;
for(; ancestorIndex >= 0 && inodes[ancestorIndex] == null; for(; ancestorIndex >= 0 && inodes[ancestorIndex] == null;
ancestorIndex--); ancestorIndex--);
checkTraverse(inodes, ancestorIndex, snapshot); checkTraverse(inodes, ancestorIndex, snapshot);
final INode last = inodes[inodes.length - 1]; final INode last = inodes[inodes.length - 1];
if (parentAccess != null && parentAccess.implies(FsAction.WRITE) if (parentAccess != null && parentAccess.implies(FsAction.WRITE)
&& inodes.length > 1 && last != null) { && inodes.length > 1 && last != null) {
checkStickyBit(inodes[inodes.length - 2], last, snapshot); checkStickyBit(inodes[inodes.length - 2], last, snapshot);
} }
if (ancestorAccess != null && inodes.length > 1) { if (ancestorAccess != null && inodes.length > 1) {
check(inodes, ancestorIndex, snapshot, ancestorAccess); check(inodes, ancestorIndex, snapshot, ancestorAccess);
} }
if (parentAccess != null && inodes.length > 1) { if (parentAccess != null && inodes.length > 1) {
check(inodes, inodes.length - 2, snapshot, parentAccess); check(inodes, inodes.length - 2, snapshot, parentAccess);
} }
if (access != null) { if (access != null) {
check(last, snapshot, access); check(last, snapshot, access);
} }
if (subAccess != null) { if (subAccess != null) {
checkSubAccess(last, snapshot, subAccess); checkSubAccess(last, snapshot, subAccess);
} }
if (doCheckOwner) { if (doCheckOwner) {
checkOwner(last, snapshot); checkOwner(last, snapshot);
} }
} }
/** Guarded by {@link FSNamesystem#readLock()} */ /** Guarded by {@link FSNamesystem#readLock()} */