You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by in...@apache.org on 2019/08/23 21:54:09 UTC

[hadoop] branch trunk updated: HDFS-14766. RBF: MountTableStoreImpl#getMountTableEntries returns extra entry. Contributed by Chen Zhang.

This is an automated email from the ASF dual-hosted git repository.

inigoiri pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 0b79675  HDFS-14766. RBF: MountTableStoreImpl#getMountTableEntries returns extra entry. Contributed by Chen Zhang.
0b79675 is described below

commit 0b796754b9d746c0389782f1a5e3ee9ef673e54c
Author: Inigo Goiri <in...@apache.org>
AuthorDate: Fri Aug 23 14:53:57 2019 -0700

    HDFS-14766. RBF: MountTableStoreImpl#getMountTableEntries returns extra entry. Contributed by Chen Zhang.
---
 .../federation/store/impl/MountTableStoreImpl.java |  3 +-
 .../federation/router/TestRouterAdminCLI.java      | 35 ++++++++++++++++++++++
 2 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/impl/MountTableStoreImpl.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/impl/MountTableStoreImpl.java
index 8761038..8682a3d 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/impl/MountTableStoreImpl.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/impl/MountTableStoreImpl.java
@@ -25,6 +25,7 @@ import java.util.List;
 import org.apache.hadoop.classification.InterfaceAudience;
 import org.apache.hadoop.classification.InterfaceStability;
 import org.apache.hadoop.fs.permission.FsAction;
+import org.apache.hadoop.hdfs.server.federation.router.FederationUtil;
 import org.apache.hadoop.hdfs.server.federation.router.RouterAdminServer;
 import org.apache.hadoop.hdfs.server.federation.router.RouterPermissionChecker;
 import org.apache.hadoop.hdfs.server.federation.store.MountTableStore;
@@ -139,7 +140,7 @@ public class MountTableStoreImpl extends MountTableStore {
       while (it.hasNext()) {
         MountTable record = it.next();
         String srcPath = record.getSourcePath();
-        if (!srcPath.startsWith(reqSrcPath)) {
+        if (!FederationUtil.isParentEntry(srcPath, reqSrcPath)) {
           it.remove();
         } else if (pc != null) {
           // do the READ permission check
diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterAdminCLI.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterAdminCLI.java
index 731d5d4..6de74c2 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterAdminCLI.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterAdminCLI.java
@@ -333,6 +333,39 @@ public class TestRouterAdminCLI {
   }
 
   @Test
+  public void testListNestedMountTable() throws Exception {
+    String dir1 = "/test-ls";
+    String dir2 = "/test-ls-longger";
+    String[] nsIdList = {"ns0", "ns1", "ns2", "ns3", "ns3"};
+    String[] sourceList =
+        {dir1, dir1 + "/subdir1", dir2, dir2 + "/subdir1", dir2 + "/subdir2"};
+    String[] destList =
+        {"/test-ls", "/test-ls/subdir1", "/ls", "/ls/subdir1", "/ls/subdir2"};
+    for (int i = 0; i < nsIdList.length; i++) {
+      String[] argv =
+          new String[] {"-add", sourceList[i], nsIdList[i], destList[i]};
+      assertEquals(0, ToolRunner.run(admin, argv));
+    }
+
+    // prepare for test
+    System.setOut(new PrintStream(out));
+    stateStore.loadCache(MountTableStoreImpl.class, true);
+
+    // Test ls dir1
+    String[] argv = new String[] {"-ls", dir1};
+    assertEquals(0, ToolRunner.run(admin, argv));
+    String outStr = out.toString();
+    assertTrue(out.toString().contains(dir1 + "/subdir1"));
+    assertFalse(out.toString().contains(dir2));
+
+    // Test ls dir2
+    argv = new String[] {"-ls", dir2};
+    assertEquals(0, ToolRunner.run(admin, argv));
+    assertTrue(out.toString().contains(dir2 + "/subdir1"));
+    assertTrue(out.toString().contains(dir2 + "/subdir2"));
+  }
+
+  @Test
   public void testRemoveMountTable() throws Exception {
     String nsId = "ns0";
     String src = "/test-rmmounttable";
@@ -699,6 +732,8 @@ public class TestRouterAdminCLI {
     assertEquals(0, ToolRunner.run(admin, argv));
 
     stateStore.loadCache(MountTableStoreImpl.class, true);
+
+    getRequest = GetMountTableEntriesRequest.newInstance("/");
     getResponse =
         client.getMountTableManager().getMountTableEntries(getRequest);
 


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org