From common-commits-return-93484-archive-asf-public=cust-asf.ponee.io@hadoop.apache.org Sun Mar 3 18:36:51 2019 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx-eu-01.ponee.io (Postfix) with SMTP id DCD76180771 for ; Sun, 3 Mar 2019 19:36:50 +0100 (CET) Received: (qmail 7801 invoked by uid 500); 3 Mar 2019 18:36:42 -0000 Mailing-List: contact common-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Delivered-To: mailing list common-commits@hadoop.apache.org Received: (qmail 6799 invoked by uid 99); 3 Mar 2019 18:36:42 -0000 Received: from ec2-52-202-80-70.compute-1.amazonaws.com (HELO gitbox.apache.org) (52.202.80.70) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 03 Mar 2019 18:36:42 +0000 Received: by gitbox.apache.org (ASF Mail Server at gitbox.apache.org, from userid 33) id 5528387792; Sun, 3 Mar 2019 18:36:41 +0000 (UTC) Date: Sun, 03 Mar 2019 18:37:15 +0000 To: "common-commits@hadoop.apache.org" Subject: [hadoop] 36/45: HDFS-14252. RBF : Exceptions are exposing the actual sub cluster path. Contributed by Ayush Saxena. MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit From: inigoiri@apache.org In-Reply-To: <155163819973.5680.12332846326910439125@gitbox.apache.org> References: <155163819973.5680.12332846326910439125@gitbox.apache.org> X-Git-Host: gitbox.apache.org X-Git-Repo: hadoop X-Git-Refname: refs/heads/HDFS-13891 X-Git-Reftype: branch X-Git-Rev: 1edeaa54267cb006fb4284c18f985be196983c28 X-Git-NotificationType: diff X-Git-Multimail-Version: 1.5.dev Auto-Submitted: auto-generated Message-Id: <20190303183641.5528387792@gitbox.apache.org> This is an automated email from the ASF dual-hosted git repository. inigoiri pushed a commit to branch HDFS-13891 in repository https://gitbox.apache.org/repos/asf/hadoop.git commit 1edeaa54267cb006fb4284c18f985be196983c28 Author: Giovanni Matteo Fumarola AuthorDate: Tue Feb 5 10:40:28 2019 -0800 HDFS-14252. RBF : Exceptions are exposing the actual sub cluster path. Contributed by Ayush Saxena. --- .../server/federation/router/RouterRpcClient.java | 13 ++++--- .../federation/router/TestRouterMountTable.java | 41 ++++++++++++++-------- 2 files changed, 36 insertions(+), 18 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java index 0b15333..f5985ee 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java @@ -1042,10 +1042,15 @@ public class RouterRpcClient { String ns = location.getNameserviceId(); final List namenodes = getNamenodesForNameservice(ns); - Class proto = method.getProtocol(); - Object[] paramList = method.getParams(location); - Object result = invokeMethod(ugi, namenodes, proto, m, paramList); - return Collections.singletonMap(location, (R) result); + try { + Class proto = method.getProtocol(); + Object[] paramList = method.getParams(location); + Object result = invokeMethod(ugi, namenodes, proto, m, paramList); + return Collections.singletonMap(location, (R) result); + } catch (IOException ioe) { + // Localize the exception + throw processException(ioe, location); + } } List orderedLocations = new LinkedList<>(); diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterMountTable.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterMountTable.java index 9538d71..4f6f702 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterMountTable.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterMountTable.java @@ -21,6 +21,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import java.io.FileNotFoundException; import java.io.IOException; import java.util.Collections; import java.util.HashMap; @@ -43,12 +44,14 @@ import org.apache.hadoop.hdfs.server.federation.RouterConfigBuilder; import org.apache.hadoop.hdfs.server.federation.StateStoreDFSCluster; import org.apache.hadoop.hdfs.server.federation.resolver.MountTableManager; import org.apache.hadoop.hdfs.server.federation.resolver.MountTableResolver; +import org.apache.hadoop.hdfs.server.federation.resolver.order.DestinationOrder; import org.apache.hadoop.hdfs.server.federation.store.protocol.AddMountTableEntryRequest; import org.apache.hadoop.hdfs.server.federation.store.protocol.AddMountTableEntryResponse; import org.apache.hadoop.hdfs.server.federation.store.protocol.GetMountTableEntriesRequest; import org.apache.hadoop.hdfs.server.federation.store.protocol.GetMountTableEntriesResponse; import org.apache.hadoop.hdfs.server.federation.store.protocol.RemoveMountTableEntryRequest; import org.apache.hadoop.hdfs.server.federation.store.records.MountTable; +import org.apache.hadoop.test.LambdaTestUtils; import org.apache.hadoop.util.Time; import org.junit.After; import org.junit.AfterClass; @@ -69,6 +72,7 @@ public class TestRouterMountTable { private static long startTime; private static FileSystem nnFs0; private static FileSystem nnFs1; + private static FileSystem routerFs; @BeforeClass public static void globalSetUp() throws Exception { @@ -92,6 +96,7 @@ public class TestRouterMountTable { nnFs0 = nnContext0.getFileSystem(); nnFs1 = nnContext1.getFileSystem(); routerContext = cluster.getRandomRouter(); + routerFs = routerContext.getFileSystem(); Router router = routerContext.getRouter(); routerProtocol = routerContext.getClient().getNamenode(); mountTable = (MountTableResolver) router.getSubclusterResolver(); @@ -136,7 +141,6 @@ public class TestRouterMountTable { assertTrue(addMountTable(regularEntry)); // Create a folder which should show in all locations - final FileSystem routerFs = routerContext.getFileSystem(); assertTrue(routerFs.mkdirs(new Path("/regular/newdir"))); FileStatus dirStatusNn = @@ -261,7 +265,7 @@ public class TestRouterMountTable { addEntry.setOwnerName("owner1"); addEntry.setMode(FsPermission.createImmutable((short) 0775)); assertTrue(addMountTable(addEntry)); - FileStatus[] list = routerContext.getFileSystem().listStatus(new Path("/")); + FileStatus[] list = routerFs.listStatus(new Path("/")); assertEquals("group1", list[0].getGroup()); assertEquals("owner1", list[0].getOwner()); assertEquals((short) 0775, list[0].getPermission().toShort()); @@ -282,8 +286,7 @@ public class TestRouterMountTable { nnFs0.setOwner(new Path("/tmp/testdir"), "Aowner", "Agroup"); nnFs0.setPermission(new Path("/tmp/testdir"), FsPermission.createImmutable((short) 775)); - FileStatus[] list = - routerContext.getFileSystem().listStatus(new Path("/")); + FileStatus[] list = routerFs.listStatus(new Path("/")); assertEquals("Agroup", list[0].getGroup()); assertEquals("Aowner", list[0].getOwner()); assertEquals((short) 775, list[0].getPermission().toShort()); @@ -313,8 +316,7 @@ public class TestRouterMountTable { nnFs1.setOwner(new Path("/tmp/testdir01"), "Aowner", "Agroup"); nnFs1.setPermission(new Path("/tmp/testdir01"), FsPermission.createImmutable((short) 775)); - FileStatus[] list = - routerContext.getFileSystem().listStatus(new Path("/")); + FileStatus[] list = routerFs.listStatus(new Path("/")); assertEquals("Agroup", list[0].getGroup()); assertEquals("Aowner", list[0].getOwner()); assertEquals((short) 775, list[0].getPermission().toShort()); @@ -347,8 +349,7 @@ public class TestRouterMountTable { nnFs1.setOwner(new Path("/tmp/testdir01"), "Aowner01", "Agroup01"); nnFs1.setPermission(new Path("/tmp/testdir01"), FsPermission.createImmutable((short) 755)); - FileStatus[] list = - routerContext.getFileSystem().listStatus(new Path("/")); + FileStatus[] list = routerFs.listStatus(new Path("/")); assertTrue("Agroup".equals(list[0].getGroup()) || "Agroup01".equals(list[0].getGroup())); assertTrue("Aowner".equals(list[0].getOwner()) @@ -374,8 +375,7 @@ public class TestRouterMountTable { addEntry.setOwnerName("owner1"); assertTrue(addMountTable(addEntry)); HdfsFileStatus finfo = routerProtocol.getFileInfo("/testdir"); - FileStatus[] finfo1 = - routerContext.getFileSystem().listStatus(new Path("/")); + FileStatus[] finfo1 = routerFs.listStatus(new Path("/")); assertEquals("owner1", finfo.getOwner()); assertEquals("owner1", finfo1[0].getOwner()); assertEquals("group1", finfo.getGroup()); @@ -395,8 +395,7 @@ public class TestRouterMountTable { nnFs0.mkdirs(new Path("/tmp/testdir")); nnFs0.mkdirs(new Path("/tmp/testdir/1")); nnFs0.mkdirs(new Path("/tmp/testdir/2")); - FileStatus[] finfo1 = - routerContext.getFileSystem().listStatus(new Path("/")); + FileStatus[] finfo1 = routerFs.listStatus(new Path("/")); assertEquals(2, ((HdfsFileStatus) finfo1[0]).getChildrenNum()); } finally { nnFs0.delete(new Path("/tmp"), true); @@ -421,12 +420,26 @@ public class TestRouterMountTable { nnFs1.mkdirs(new Path("/tmp/testdir01")); nnFs0.mkdirs(new Path("/tmp/testdir/1")); nnFs1.mkdirs(new Path("/tmp/testdir01/1")); - FileStatus[] finfo1 = - routerContext.getFileSystem().listStatus(new Path("/")); + FileStatus[] finfo1 = routerFs.listStatus(new Path("/")); assertEquals(2, ((HdfsFileStatus) finfo1[0]).getChildrenNum()); } finally { nnFs0.delete(new Path("/tmp"), true); nnFs0.delete(new Path("/tmp"), true); } } + + /** + * Validates the path in the exception. The path should be with respect to the + * mount not with respect to the sub cluster. + */ + @Test + public void testPathInException() throws Exception { + MountTable addEntry = MountTable.newInstance("/mount", + Collections.singletonMap("ns0", "/tmp/testdir")); + addEntry.setDestOrder(DestinationOrder.HASH_ALL); + assertTrue(addMountTable(addEntry)); + LambdaTestUtils.intercept(FileNotFoundException.class, + "Directory/File does not exist /mount/file", + () -> routerFs.setOwner(new Path("/mount/file"), "user", "group")); + } } \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org For additional commands, e-mail: common-commits-help@hadoop.apache.org