瀏覽代碼

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
Chris Nauroth 12 年之前
父節點
當前提交
8eab891bff

+ 2 - 0
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt

@@ -386,6 +386,8 @@ Release 2.1.0-beta - UNRELEASED
     HDFS-4845. FSNamesystem.deleteInternal should acquire write-lock before
     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
 
     HDFS-4353. Encapsulate connections to peers in Peer and PeerServer classes.

+ 28 - 28
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java

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