You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by aa...@apache.org on 2016/03/02 06:46:05 UTC
hadoop git commit: HDFS-9851. NameNode throws NPE when setPermission
is called on a path that does not exist. Contributed by Brahma Reddy Battula.
Repository: hadoop
Updated Branches:
refs/heads/trunk e2ddf8246 -> 27e0681f2
HDFS-9851. NameNode throws NPE when setPermission is called on a path that does not exist. Contributed by Brahma Reddy Battula.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/27e0681f
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/27e0681f
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/27e0681f
Branch: refs/heads/trunk
Commit: 27e0681f28ee896ada163bbbc08fd44d113e7d15
Parents: e2ddf82
Author: Akira Ajisaka <aa...@apache.org>
Authored: Wed Mar 2 14:43:03 2016 +0900
Committer: Akira Ajisaka <aa...@apache.org>
Committed: Wed Mar 2 14:43:03 2016 +0900
----------------------------------------------------------------------
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++
.../hadoop/hdfs/server/namenode/FSDirXAttrOp.java | 3 ++-
.../hadoop/hdfs/server/namenode/FSDirectory.java | 6 +++++-
.../test/java/org/apache/hadoop/hdfs/TestDFSShell.java | 2 +-
.../org/apache/hadoop/security/TestPermission.java | 13 +++++++++++++
5 files changed, 24 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/27e0681f/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 a87ffe0..8be05bf 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
@@ -2974,6 +2974,9 @@ Release 2.7.3 - UNRELEASED
HDFS-9766. TestDataNodeMetrics#testDataNodeTimeSpend fails intermittently.
(Xiao Chen via aajisaka)
+ HDFS-9851. NameNode throws NPE when setPermission is called on a path that
+ does not exist. (Brahma Reddy Battula via aajisaka)
+
Release 2.7.2 - 2016-01-25
INCOMPATIBLE CHANGES
http://git-wip-us.apache.org/repos/asf/hadoop/blob/27e0681f/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirXAttrOp.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirXAttrOp.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirXAttrOp.java
index 24d3360..d27cec5 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirXAttrOp.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirXAttrOp.java
@@ -32,6 +32,7 @@ import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos;
import org.apache.hadoop.hdfs.protocolPB.PBHelperClient;
import org.apache.hadoop.security.AccessControlException;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.EnumSet;
import java.util.List;
@@ -388,7 +389,7 @@ class FSDirXAttrOp {
private static void checkXAttrChangeAccess(
FSDirectory fsd, INodesInPath iip, XAttr xAttr,
FSPermissionChecker pc)
- throws AccessControlException {
+ throws AccessControlException, FileNotFoundException {
if (fsd.isPermissionEnabled() && xAttr.getNameSpace() == XAttr.NameSpace
.USER) {
final INode inode = iip.getLastINode();
http://git-wip-us.apache.org/repos/asf/hadoop/blob/27e0681f/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java
index a00591f..51b7747 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java
@@ -1547,7 +1547,11 @@ public class FSDirectory implements Closeable {
}
void checkOwner(FSPermissionChecker pc, INodesInPath iip)
- throws AccessControlException {
+ throws AccessControlException, FileNotFoundException {
+ if (iip.getLastINode() == null) {
+ throw new FileNotFoundException(
+ "Directory/File does not exist " + iip.getPath());
+ }
checkPermission(pc, iip, true, null, null, null, null);
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/27e0681f/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSShell.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSShell.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSShell.java
index 0753ab8..41cd5c0 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSShell.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSShell.java
@@ -3344,7 +3344,7 @@ public class TestDFSShell {
fs.createSnapshot(reserved, "snap");
fail("Can't create snapshot on /.reserved");
} catch (FileNotFoundException e) {
- assertTrue(e.getMessage().contains("Directory does not exist"));
+ assertTrue(e.getMessage().contains("Directory/File does not exist"));
}
cluster.shutdown();
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/27e0681f/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/security/TestPermission.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/security/TestPermission.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/security/TestPermission.java
index 27af49c..5a17bbc 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/security/TestPermission.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/security/TestPermission.java
@@ -51,6 +51,7 @@ public class TestPermission {
final private static Path CHILD_DIR2 = new Path(ROOT_PATH, "child2");
final private static Path CHILD_FILE1 = new Path(ROOT_PATH, "file1");
final private static Path CHILD_FILE2 = new Path(ROOT_PATH, "file2");
+ final private static Path CHILD_FILE3 = new Path(ROOT_PATH, "file3");
final private static int FILE_LEN = 100;
final private static Random RAN = new Random();
@@ -270,6 +271,18 @@ public class TestPermission {
final Path RENAME_PATH = new Path("/foo/bar");
userfs.mkdirs(RENAME_PATH);
assertTrue(canRename(userfs, RENAME_PATH, CHILD_DIR1));
+ // test permissions on files that do not exist
+ assertFalse(userfs.exists(CHILD_FILE3));
+ try {
+ userfs.setOwner(CHILD_FILE3, "foo", "bar");
+ fail("setOwner should fail for non-exist file");
+ } catch (java.io.FileNotFoundException ignored) {
+ }
+ try {
+ userfs.setPermission(CHILD_FILE3, new FsPermission((short) 0777));
+ fail("setPermission should fail for non-exist file");
+ } catch (java.io.FileNotFoundException ignored) {
+ }
} finally {
cluster.shutdown();
}