HDFS-13622. mkdir should print the parent directory in the error message when parent directories do not exist. Contributed by Shweta.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/be150a17 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/be150a17 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/be150a17 Branch: refs/heads/HDFS-12943 Commit: be150a17b15d15f5de6d4839d5e805e8d6c57850 Parents: a192295 Author: Xiao Chen <x...@apache.org> Authored: Thu Jul 26 10:23:30 2018 -0700 Committer: Xiao Chen <x...@apache.org> Committed: Thu Jul 26 10:24:32 2018 -0700 ---------------------------------------------------------------------- .../main/java/org/apache/hadoop/fs/shell/Mkdir.java | 13 ++++++++----- .../test/java/org/apache/hadoop/hdfs/TestDFSShell.java | 8 ++++++++ .../hadoop-hdfs/src/test/resources/testHDFSConf.xml | 4 ++-- 3 files changed, 18 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/be150a17/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/Mkdir.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/Mkdir.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/Mkdir.java index 9f39da2..5828b0b 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/Mkdir.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/Mkdir.java @@ -68,11 +68,14 @@ class Mkdir extends FsCommand { @Override protected void processNonexistentPath(PathData item) throws IOException { - // check if parent exists. this is complicated because getParent(a/b/c/) returns a/b/c, but - // we want a/b - if (!createParents && - !item.fs.exists(new Path(item.path.toString()).getParent())) { - throw new PathNotFoundException(item.toString()); + if (!createParents) { + // check if parent exists. this is complicated because getParent(a/b/c/) returns a/b/c, but + // we want a/b + final Path itemPath = new Path(item.path.toString()); + final Path itemParentPath = itemPath.getParent(); + if (!item.fs.exists(itemParentPath)) { + throw new PathNotFoundException(itemParentPath.toString()); + } } if (!item.fs.mkdirs(item.path)) { throw new PathIOException(item.toString()); http://git-wip-us.apache.org/repos/asf/hadoop/blob/be150a17/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 b19bdea..1d2042e 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 @@ -721,6 +721,14 @@ public class TestDFSShell { assertTrue(" -mkdir returned this is a file ", (returned.lastIndexOf("not a directory") != -1)); out.reset(); + argv[0] = "-mkdir"; + argv[1] = "/testParent/testChild"; + ret = ToolRunner.run(shell, argv); + returned = out.toString(); + assertEquals(" -mkdir returned 1", 1, ret); + assertTrue(" -mkdir returned there is No file or directory but has testChild in the path", + (returned.lastIndexOf("testChild") == -1)); + out.reset(); argv = new String[3]; argv[0] = "-mv"; argv[1] = "/testfile"; http://git-wip-us.apache.org/repos/asf/hadoop/blob/be150a17/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testHDFSConf.xml ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testHDFSConf.xml b/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testHDFSConf.xml index a13c441..4ab093b 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testHDFSConf.xml +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testHDFSConf.xml @@ -6183,11 +6183,11 @@ <comparators> <comparator> <type>RegexpComparator</type> - <expected-output>mkdir: `dir0/dir1': No such file or directory</expected-output> + <expected-output>.*mkdir:.*dir0': No such file or directory$</expected-output> </comparator> </comparators> </test> - + <test> <!-- TESTED --> <description>mkdir: Test recreate of existing directory fails</description> <test-commands> --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org