hadoop git commit: HDFS-12614. FSPermissionChecker#getINodeAttrs() throws NPE when INodeAttributesProvider configured. Contributed by Manoj Govindassamy.

2018-03-08 Thread kihwal
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 Lee 
Authored: 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.

2018-03-08 Thread kihwal
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 Lee 
Authored: 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.

2018-03-08 Thread kihwal
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 Lee 
Authored: 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 =