From 80cccc5376cb56169451548fee39a0f707825766 Mon Sep 17 00:00:00 2001 From: GuoPhilipse <46367746+GuoPhilipse@users.noreply.github.com> Date: Tue, 7 Dec 2021 16:49:27 +0800 Subject: [PATCH] HDFS-16351. Add path exception information in FSNamesystem (#3713). Contributed by guophilipse. Reviewed-by: Viraj Jasani Signed-off-by: Ayush Saxena --- .../hadoop/hdfs/server/namenode/FSNamesystem.java | 2 +- .../org/apache/hadoop/hdfs/TestDFSPermission.java | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java index d856d6feb5..c07115efdf 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java @@ -8612,7 +8612,7 @@ void checkAccess(String src, FsAction mode) throws IOException { src = iip.getPath(); INode inode = iip.getLastINode(); if (inode == null) { - throw new FileNotFoundException("Path not found"); + throw new FileNotFoundException("Path not found: " + src); } if (isPermissionEnabled) { dir.checkPathAccess(pc, iip, mode); diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSPermission.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSPermission.java index 15ce06b69f..818f7568e9 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSPermission.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSPermission.java @@ -44,6 +44,7 @@ import org.apache.hadoop.fs.permission.FsAction; import org.apache.hadoop.security.AccessControlException; import org.apache.hadoop.security.UserGroupInformation; +import org.apache.hadoop.test.LambdaTestUtils; import org.apache.hadoop.util.Time; import org.junit.After; import org.junit.Before; @@ -260,6 +261,17 @@ private void createAndCheckPermission(OpType op, Path name, short umask, checkPermission(name, expectedPermission, delete); } + @Test + public void testFSNamesystemCheckAccess() throws Exception{ + Path testInvalidPath = new Path("/test2"); + fs = FileSystem.get(conf); + + LambdaTestUtils.intercept( + FileNotFoundException.class, + "Path not found: " + testInvalidPath, + () -> fs.access(testInvalidPath, FsAction.READ)); + } + /* Check if the permission of a file/directory is the same as the * expected permission; If the delete flag is true, delete the * file/directory afterwards.