Repository: hadoop Updated Branches: refs/heads/branch-3.0 68cff8c23 -> f879504fe
HDFS-13233. RBF: MountTableResolver doesn't return the correct mount point of the given path. Contributed by wangzhiyuan. Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/f879504f Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/f879504f Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/f879504f Branch: refs/heads/branch-3.0 Commit: f879504fe13267690e4306160210536c1b21b8e3 Parents: 68cff8c Author: Yiqun Lin <yq...@apache.org> Authored: Fri Mar 9 15:48:36 2018 +0800 Committer: Yiqun Lin <yq...@apache.org> Committed: Fri Mar 9 15:48:36 2018 +0800 ---------------------------------------------------------------------- .../federation/resolver/MountTableResolver.java | 13 ++++++++++- .../resolver/TestMountTableResolver.java | 23 ++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/f879504f/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MountTableResolver.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MountTableResolver.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MountTableResolver.java index 374e3ba..dac6f7f 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MountTableResolver.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MountTableResolver.java @@ -521,6 +521,17 @@ public class MountTableResolver return this.defaultNameService; } + private boolean isParentEntry(final String path, final String parent) { + if (!path.startsWith(parent)) { + return false; + } + if (path.equals(parent)) { + return true; + } + return path.charAt(parent.length()) == Path.SEPARATOR_CHAR + || parent.equals(Path.SEPARATOR); + } + /** * Find the deepest mount point for a path. * @param path Path to look for. @@ -530,7 +541,7 @@ public class MountTableResolver readLock.lock(); try { Entry<String, MountTable> entry = this.tree.floorEntry(path); - while (entry != null && !path.startsWith(entry.getKey())) { + while (entry != null && !isParentEntry(path, entry.getKey())) { entry = this.tree.lowerEntry(entry.getKey()); } if (entry == null) { http://git-wip-us.apache.org/repos/asf/hadoop/blob/f879504f/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/federation/resolver/TestMountTableResolver.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/federation/resolver/TestMountTableResolver.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/federation/resolver/TestMountTableResolver.java index fa2f89c..a09daf0 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/federation/resolver/TestMountTableResolver.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/federation/resolver/TestMountTableResolver.java @@ -179,6 +179,29 @@ public class TestMountTableResolver { } @Test + public void testGetMountPoint() throws IOException { + // Check get the mount table entry for a path + MountTable mtEntry; + mtEntry = mountTable.getMountPoint("/"); + assertTrue(mtEntry.getSourcePath().equals("/")); + + mtEntry = mountTable.getMountPoint("/user"); + assertTrue(mtEntry.getSourcePath().equals("/user")); + + mtEntry = mountTable.getMountPoint("/user/a"); + assertTrue(mtEntry.getSourcePath().equals("/user/a")); + + mtEntry = mountTable.getMountPoint("/user/a/"); + assertTrue(mtEntry.getSourcePath().equals("/user/a")); + + mtEntry = mountTable.getMountPoint("/user/a/11"); + assertTrue(mtEntry.getSourcePath().equals("/user/a")); + + mtEntry = mountTable.getMountPoint("/user/a1"); + assertTrue(mtEntry.getSourcePath().equals("/user")); + } + + @Test public void testGetMountPoints() throws IOException { // Check getting all mount points (virtual and real) beneath a path --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org