HDFS-13816. dfs.getQuotaUsage() throws NPE on non-existent dir instead of FileNotFoundException. Contributed by Vinayakumar B.

This commit is contained in:
Vinayakumar B 2018-11-26 18:22:32 +05:30
parent 23b441c225
commit b098281454
2 changed files with 12 additions and 0 deletions

View File

@ -565,6 +565,10 @@ private static QuotaUsage getQuotaUsageInt(FSDirectory fsd, INodesInPath iip)
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 =

View File

@ -28,6 +28,7 @@
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 void testQuotaCommands() throws Exception {
// 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