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:
parent
a601f15ebe
commit
8eab891bff
|
@ -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.
|
||||||
|
|
|
@ -144,35 +144,35 @@ class FSPermissionChecker {
|
||||||
+ ", 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()} */
|
||||||
|
|
Loading…
Reference in New Issue