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.