HDFS-8335. FSNamesystem should construct FSPermissionChecker only if permission is enabled. Contributed by Gabor Liptak.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/977e0b3c Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/977e0b3c Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/977e0b3c Branch: refs/heads/yarn-2877 Commit: 977e0b3c4ce76746a3d8590d2d790fdc96c86ca5 Parents: fe5624b Author: Haohui Mai <whe...@apache.org> Authored: Tue Nov 24 13:07:26 2015 -0800 Committer: Haohui Mai <whe...@apache.org> Committed: Tue Nov 24 13:14:49 2015 -0800 ---------------------------------------------------------------------- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 6 +++++ .../server/namenode/FSDirStatAndListingOp.java | 25 +++++++++++++------- 2 files changed, 23 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/977e0b3c/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 7d9df2e..92897b9 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -1734,6 +1734,9 @@ Release 2.8.0 - UNRELEASED HDFS-9318. considerLoad factor can be improved. (Kuhu Shukla via kihwal) + HDFS-8335. FSNamesystem should construct FSPermissionChecker only if + permission is enabled. (Gabor Liptak via wheat9) + BUG FIXES HDFS-7501. TransactionsSinceLastCheckpoint can be negative on SBNs. @@ -2376,6 +2379,9 @@ Release 2.8.0 - UNRELEASED HDFS-8855. Webhdfs client leaks active NameNode connections. (Xiaobing Zhou via xyao) + HDFS-8335. FSNamesystem should construct FSPermissionChecker only if + permission is enabled. (Gabor Liptak via wheat9) + Release 2.7.3 - UNRELEASED INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/977e0b3c/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirStatAndListingOp.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirStatAndListingOp.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirStatAndListingOp.java index a1ac1a7..d8baa6b 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirStatAndListingOp.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirStatAndListingOp.java @@ -52,12 +52,17 @@ import static org.apache.hadoop.util.Time.now; class FSDirStatAndListingOp { static DirectoryListing getListingInt(FSDirectory fsd, final String srcArg, byte[] startAfter, boolean needLocation) throws IOException { - FSPermissionChecker pc = fsd.getPermissionChecker(); byte[][] pathComponents = FSDirectory .getPathComponentsForReservedPath(srcArg); final String startAfterString = new String(startAfter, Charsets.UTF_8); - final String src = fsd.resolvePath(pc, srcArg, pathComponents); - final INodesInPath iip = fsd.getINodesInPath(src, true); + String src = null; + + if (fsd.isPermissionEnabled()) { + FSPermissionChecker pc = fsd.getPermissionChecker(); + src = fsd.resolvePath(pc, srcArg, pathComponents); + } else { + src = FSDirectory.resolvePath(srcArg, pathComponents, fsd); + } // Get file name when startAfter is an INodePath if (FSDirectory.isReservedName(startAfterString)) { @@ -74,8 +79,10 @@ class FSDirStatAndListingOp { } } + final INodesInPath iip = fsd.getINodesInPath(src, true); boolean isSuperUser = true; if (fsd.isPermissionEnabled()) { + FSPermissionChecker pc = fsd.getPermissionChecker(); if (iip.getLastINode() != null && iip.getLastINode().isDirectory()) { fsd.checkPathAccess(pc, iip, FsAction.READ_EXECUTE); } else { @@ -103,15 +110,17 @@ class FSDirStatAndListingOp { if (!DFSUtil.isValidName(src)) { throw new InvalidPathException("Invalid file name: " + src); } - FSPermissionChecker pc = fsd.getPermissionChecker(); byte[][] pathComponents = FSDirectory.getPathComponentsForReservedPath(src); - src = fsd.resolvePath(pc, src, pathComponents); - final INodesInPath iip = fsd.getINodesInPath(src, resolveLink); if (fsd.isPermissionEnabled()) { + FSPermissionChecker pc = fsd.getPermissionChecker(); + src = fsd.resolvePath(pc, src, pathComponents); + final INodesInPath iip = fsd.getINodesInPath(src, resolveLink); fsd.checkPermission(pc, iip, false, null, null, null, null, false); + } else { + src = FSDirectory.resolvePath(src, pathComponents, fsd); } - return getFileInfo(fsd, src, resolveLink, - FSDirectory.isReservedRawName(srcArg)); + return getFileInfo(fsd, src, FSDirectory.isReservedRawName(srcArg), + resolveLink); } /**