diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirStatAndListingOp.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirStatAndListingOp.java index 7e22ae1c7cb..01de2360fa8 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirStatAndListingOp.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirStatAndListingOp.java @@ -565,6 +565,10 @@ class FSDirStatAndListingOp { fsd.readLock(); try { INode targetNode = iip.getLastINode(); + if (targetNode == null) { + throw new FileNotFoundException( + "File/Directory does not exist: " + iip.getPath()); + } QuotaUsage usage = null; if (targetNode.isDirectory()) { DirectoryWithQuotaFeature feature = diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestQuota.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestQuota.java index b16782cec0b..1c4855fc701 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestQuota.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestQuota.java @@ -28,6 +28,7 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.ByteArrayOutputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; @@ -332,6 +333,13 @@ public class TestQuota { // 14a: set quota on a non-existent directory Path nonExistentPath = new Path(dir, "test1"); assertFalse(dfs.exists(nonExistentPath)); + try { + compareQuotaUsage(null, dfs, nonExistentPath); + fail("Expected FileNotFoundException"); + } catch (FileNotFoundException fnfe) { + GenericTestUtils.assertExceptionContains( + "File/Directory does not exist: " + nonExistentPath, fnfe); + } args = new String[]{"-setQuota", "1", nonExistentPath.toString()}; runCommand(admin, args, true); runCommand(admin, true, "-setSpaceQuota", "1g", // for space quota