hadoop git commit: HDFS-12614. FSPermissionChecker#getINodeAttrs() throws NPE when INodeAttributesProvider configured. Contributed by Manoj Govindassamy.
Repository: hadoop Updated Branches: refs/heads/branch-2.8 4b0b466f8 -> f4621e022 HDFS-12614. FSPermissionChecker#getINodeAttrs() throws NPE when INodeAttributesProvider configured. Contributed by Manoj Govindassamy. (cherry picked from commit 0aa52d4085f8c77dbfd9d913011c347882573ad9) Conflicts: hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestINodeAttributeProvider.java Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/f4621e02 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/f4621e02 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/f4621e02 Branch: refs/heads/branch-2.8 Commit: f4621e0221ef14291ac616dc43c673b50a6d1550 Parents: 4b0b466 Author: Kihwal LeeAuthored: Thu Mar 8 14:38:47 2018 -0600 Committer: Kihwal Lee Committed: Thu Mar 8 14:38:47 2018 -0600 -- .../server/namenode/FSPermissionChecker.java| 12 +++- .../namenode/TestINodeAttributeProvider.java| 60 ++-- 2 files changed, 54 insertions(+), 18 deletions(-) -- http://git-wip-us.apache.org/repos/asf/hadoop/blob/f4621e02/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java -- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java index 107d563..46d0959 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java @@ -239,8 +239,16 @@ class FSPermissionChecker implements AccessControlEnforcer { INodeAttributes inodeAttrs = inode.getSnapshotINode(snapshotId); if (getAttributesProvider() != null) { String[] elements = new String[pathIdx + 1]; - for (int i = 0; i < elements.length; i++) { -elements[i] = DFSUtil.bytes2String(pathByNameArr[i]); + /** + * {@link INode#getPathComponents(String)} returns a null component + * for the root only path "/". Assign an empty string if so. + */ + if (pathByNameArr.length == 1 && pathByNameArr[0] == null) { +elements[0] = ""; + } else { +for (int i = 0; i < elements.length; i++) { + elements[i] = DFSUtil.bytes2String(pathByNameArr[i]); +} } inodeAttrs = getAttributesProvider().getAttributes(elements, inodeAttrs); } http://git-wip-us.apache.org/repos/asf/hadoop/blob/f4621e02/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestINodeAttributeProvider.java -- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestINodeAttributeProvider.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestINodeAttributeProvider.java index ffdc535..1837525 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestINodeAttributeProvider.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestINodeAttributeProvider.java @@ -222,31 +222,59 @@ public class TestINodeAttributeProvider { }); } - @Test - public void testCustomProvider() throws Exception { + private void verifyFileStatus(UserGroupInformation ugi) throws IOException { FileSystem fs = FileSystem.get(miniDFS.getConfiguration(0)); -fs.mkdirs(new Path("/user/xxx")); -FileStatus status = fs.getFileStatus(new Path("/user/xxx")); -Assert.assertEquals(System.getProperty("user.name"), status.getOwner()); + +FileStatus status = fs.getFileStatus(new Path("/")); +Path userDir = new Path("/user/" + ugi.getShortUserName()); +fs.mkdirs(userDir); +status = fs.getFileStatus(userDir); +Assert.assertEquals(ugi.getShortUserName(), status.getOwner()); Assert.assertEquals("supergroup", status.getGroup()); Assert.assertEquals(new FsPermission((short) 0755), status.getPermission()); -fs.mkdirs(new Path("/user/authz")); -Path p = new Path("/user/authz"); -status = fs.getFileStatus(p); + +Path authzDir = new Path("/user/authz"); +fs.mkdirs(authzDir); +status = fs.getFileStatus(authzDir); Assert.assertEquals("foo", status.getOwner()); Assert.assertEquals("bar", status.getGroup()); Assert.assertEquals(new FsPermission((short) 0770), status.getPermission()); -AclStatus aclStatus =
hadoop git commit: HDFS-12614. FSPermissionChecker#getINodeAttrs() throws NPE when INodeAttributesProvider configured. Contributed by Manoj Govindassamy.
Repository: hadoop Updated Branches: refs/heads/branch-2.9 44abf77d9 -> 6fafaa7b7 HDFS-12614. FSPermissionChecker#getINodeAttrs() throws NPE when INodeAttributesProvider configured. Contributed by Manoj Govindassamy. (cherry picked from commit 0aa52d4085f8c77dbfd9d913011c347882573ad9) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/6fafaa7b Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/6fafaa7b Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/6fafaa7b Branch: refs/heads/branch-2.9 Commit: 6fafaa7b7fafa2005386779fb4c92750f256c336 Parents: 44abf77 Author: Kihwal LeeAuthored: Thu Mar 8 14:26:42 2018 -0600 Committer: Kihwal Lee Committed: Thu Mar 8 14:26:42 2018 -0600 -- .../server/namenode/FSPermissionChecker.java| 12 +++- .../namenode/TestINodeAttributeProvider.java| 63 +++- 2 files changed, 57 insertions(+), 18 deletions(-) -- http://git-wip-us.apache.org/repos/asf/hadoop/blob/6fafaa7b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java -- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java index 388e91f..ec82ab7 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java @@ -271,8 +271,16 @@ public class FSPermissionChecker implements AccessControlEnforcer { INodeAttributes inodeAttrs = inode.getSnapshotINode(snapshotId); if (getAttributesProvider() != null) { String[] elements = new String[pathIdx + 1]; - for (int i = 0; i < elements.length; i++) { -elements[i] = DFSUtil.bytes2String(pathByNameArr[i]); + /** + * {@link INode#getPathComponents(String)} returns a null component + * for the root only path "/". Assign an empty string if so. + */ + if (pathByNameArr.length == 1 && pathByNameArr[0] == null) { +elements[0] = ""; + } else { +for (int i = 0; i < elements.length; i++) { + elements[i] = DFSUtil.bytes2String(pathByNameArr[i]); +} } inodeAttrs = getAttributesProvider().getAttributes(elements, inodeAttrs); } http://git-wip-us.apache.org/repos/asf/hadoop/blob/6fafaa7b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestINodeAttributeProvider.java -- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestINodeAttributeProvider.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestINodeAttributeProvider.java index bbc5fa0..5495692 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestINodeAttributeProvider.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestINodeAttributeProvider.java @@ -313,31 +313,62 @@ public class TestINodeAttributeProvider { testBypassProviderHelper(users, HDFS_PERMISSION, true); } - @Test - public void testCustomProvider() throws Exception { + private void verifyFileStatus(UserGroupInformation ugi) throws IOException { FileSystem fs = FileSystem.get(miniDFS.getConfiguration(0)); -fs.mkdirs(new Path("/user/xxx")); -FileStatus status = fs.getFileStatus(new Path("/user/xxx")); -Assert.assertEquals(System.getProperty("user.name"), status.getOwner()); + +FileStatus status = fs.getFileStatus(new Path("/")); +LOG.info("Path '/' is owned by: " ++ status.getOwner() + ":" + status.getGroup()); + +Path userDir = new Path("/user/" + ugi.getShortUserName()); +fs.mkdirs(userDir); +status = fs.getFileStatus(userDir); +Assert.assertEquals(ugi.getShortUserName(), status.getOwner()); Assert.assertEquals("supergroup", status.getGroup()); Assert.assertEquals(new FsPermission((short) 0755), status.getPermission()); -fs.mkdirs(new Path("/user/authz")); -Path p = new Path("/user/authz"); -status = fs.getFileStatus(p); + +Path authzDir = new Path("/user/authz"); +fs.mkdirs(authzDir); +status = fs.getFileStatus(authzDir); Assert.assertEquals("foo", status.getOwner()); Assert.assertEquals("bar", status.getGroup()); Assert.assertEquals(new FsPermission((short) 0770), status.getPermission()); -AclStatus
hadoop git commit: HDFS-12614. FSPermissionChecker#getINodeAttrs() throws NPE when INodeAttributesProvider configured. Contributed by Manoj Govindassamy.
Repository: hadoop Updated Branches: refs/heads/branch-2 95f34ce46 -> 0aa52d408 HDFS-12614. FSPermissionChecker#getINodeAttrs() throws NPE when INodeAttributesProvider configured. Contributed by Manoj Govindassamy. Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/0aa52d40 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/0aa52d40 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/0aa52d40 Branch: refs/heads/branch-2 Commit: 0aa52d4085f8c77dbfd9d913011c347882573ad9 Parents: 95f34ce Author: Kihwal LeeAuthored: Thu Mar 8 14:20:09 2018 -0600 Committer: Kihwal Lee Committed: Thu Mar 8 14:22:17 2018 -0600 -- .../server/namenode/FSPermissionChecker.java| 12 +++- .../namenode/TestINodeAttributeProvider.java| 63 +++- 2 files changed, 57 insertions(+), 18 deletions(-) -- http://git-wip-us.apache.org/repos/asf/hadoop/blob/0aa52d40/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java -- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java index 22f9b99..8c53308 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java @@ -271,8 +271,16 @@ public class FSPermissionChecker implements AccessControlEnforcer { INodeAttributes inodeAttrs = inode.getSnapshotINode(snapshotId); if (getAttributesProvider() != null) { String[] elements = new String[pathIdx + 1]; - for (int i = 0; i < elements.length; i++) { -elements[i] = DFSUtil.bytes2String(pathByNameArr[i]); + /** + * {@link INode#getPathComponents(String)} returns a null component + * for the root only path "/". Assign an empty string if so. + */ + if (pathByNameArr.length == 1 && pathByNameArr[0] == null) { +elements[0] = ""; + } else { +for (int i = 0; i < elements.length; i++) { + elements[i] = DFSUtil.bytes2String(pathByNameArr[i]); +} } inodeAttrs = getAttributesProvider().getAttributes(elements, inodeAttrs); } http://git-wip-us.apache.org/repos/asf/hadoop/blob/0aa52d40/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestINodeAttributeProvider.java -- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestINodeAttributeProvider.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestINodeAttributeProvider.java index bbc5fa0..5495692 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestINodeAttributeProvider.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestINodeAttributeProvider.java @@ -313,31 +313,62 @@ public class TestINodeAttributeProvider { testBypassProviderHelper(users, HDFS_PERMISSION, true); } - @Test - public void testCustomProvider() throws Exception { + private void verifyFileStatus(UserGroupInformation ugi) throws IOException { FileSystem fs = FileSystem.get(miniDFS.getConfiguration(0)); -fs.mkdirs(new Path("/user/xxx")); -FileStatus status = fs.getFileStatus(new Path("/user/xxx")); -Assert.assertEquals(System.getProperty("user.name"), status.getOwner()); + +FileStatus status = fs.getFileStatus(new Path("/")); +LOG.info("Path '/' is owned by: " ++ status.getOwner() + ":" + status.getGroup()); + +Path userDir = new Path("/user/" + ugi.getShortUserName()); +fs.mkdirs(userDir); +status = fs.getFileStatus(userDir); +Assert.assertEquals(ugi.getShortUserName(), status.getOwner()); Assert.assertEquals("supergroup", status.getGroup()); Assert.assertEquals(new FsPermission((short) 0755), status.getPermission()); -fs.mkdirs(new Path("/user/authz")); -Path p = new Path("/user/authz"); -status = fs.getFileStatus(p); + +Path authzDir = new Path("/user/authz"); +fs.mkdirs(authzDir); +status = fs.getFileStatus(authzDir); Assert.assertEquals("foo", status.getOwner()); Assert.assertEquals("bar", status.getGroup()); Assert.assertEquals(new FsPermission((short) 0770), status.getPermission()); -AclStatus aclStatus = fs.getAclStatus(p); + +AclStatus aclStatus =