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 ay...@apache.org on 2021/12/02 13:41:04 UTC
[hadoop] branch trunk updated: HDFS-16359. RBF: RouterRpcServer#invokeAtAvailableNs does not take effect when retrying (#3731). Contributed by tomscut.
This is an automated email from the ASF dual-hosted git repository.
ayushsaxena 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 196935a HDFS-16359. RBF: RouterRpcServer#invokeAtAvailableNs does not take effect when retrying (#3731). Contributed by tomscut.
196935a is described below
commit 196935a8d2f3e776c3823b80af6bcbb8ed938ef2
Author: litao <to...@gmail.com>
AuthorDate: Thu Dec 2 21:40:35 2021 +0800
HDFS-16359. RBF: RouterRpcServer#invokeAtAvailableNs does not take effect when retrying (#3731). Contributed by tomscut.
Reviewed-by: Inigo Goiri <in...@apache.org>
Signed-off-by: Ayush Saxena <ay...@apache.org>
---
.../server/federation/router/RouterRpcServer.java | 10 +++---
...erRPCMultipleDestinationMountTableResolver.java | 36 ++++++++++++++++++++++
2 files changed, 42 insertions(+), 4 deletions(-)
diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcServer.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcServer.java
index b8405da..48d4ff0 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcServer.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcServer.java
@@ -696,7 +696,7 @@ public class RouterRpcServer extends AbstractService implements ClientProtocol,
ioe.getClass().getSimpleName());
throw ioe;
}
- Set<FederationNamespaceInfo> nssWithoutFailed = getNameSpaceInfo(nsId);
+ Set<FederationNamespaceInfo> nssWithoutFailed = getNameSpaceInfo(nss, nsId);
return invokeOnNs(method, clazz, ioe, nssWithoutFailed);
}
}
@@ -722,13 +722,15 @@ public class RouterRpcServer extends AbstractService implements ClientProtocol,
/**
* Get set of namespace info's removing the already invoked namespaceinfo.
- * @param nsId already invoked namespace id
+ * @param nss List of namespaces in the federation.
+ * @param nsId Already invoked namespace id.
* @return List of name spaces in the federation on
* removing the already invoked namespaceinfo.
*/
- private Set<FederationNamespaceInfo> getNameSpaceInfo(String nsId) {
+ private static Set<FederationNamespaceInfo> getNameSpaceInfo(
+ final Set<FederationNamespaceInfo> nss, final String nsId) {
Set<FederationNamespaceInfo> namespaceInfos = new HashSet<>();
- for (FederationNamespaceInfo ns : namespaceInfos) {
+ for (FederationNamespaceInfo ns : nss) {
if (!nsId.equals(ns.getNameserviceId())) {
namespaceInfos.add(ns);
}
diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterRPCMultipleDestinationMountTableResolver.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterRPCMultipleDestinationMountTableResolver.java
index 2887c08..ee92ec4 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterRPCMultipleDestinationMountTableResolver.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterRPCMultipleDestinationMountTableResolver.java
@@ -20,6 +20,7 @@ package org.apache.hadoop.hdfs.server.federation.router;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -39,6 +40,7 @@ import org.apache.hadoop.fs.ContentSummary;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FSDataOutputStream;
+import org.apache.hadoop.fs.FsServerDefaults;
import org.apache.hadoop.fs.Options.Rename;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.permission.AclEntry;
@@ -644,6 +646,40 @@ public class TestRouterRPCMultipleDestinationMountTableResolver {
}
/**
+ * Test RouterRpcServer#invokeAtAvailableNs on mount point with multiple destinations
+ * and making a one of the destination's subcluster unavailable.
+ */
+ @Test
+ public void testInvokeAtAvailableNs() throws IOException {
+ // Create a mount point with multiple destinations.
+ Path path = new Path("/testInvokeAtAvailableNs");
+ Map<String, String> destMap = new HashMap<>();
+ destMap.put("ns0", "/testInvokeAtAvailableNs");
+ destMap.put("ns1", "/testInvokeAtAvailableNs");
+ nnFs0.mkdirs(path);
+ nnFs1.mkdirs(path);
+ MountTable addEntry =
+ MountTable.newInstance("/testInvokeAtAvailableNs", destMap);
+ addEntry.setQuota(new RouterQuotaUsage.Builder().build());
+ addEntry.setDestOrder(DestinationOrder.RANDOM);
+ addEntry.setFaultTolerant(true);
+ assertTrue(addMountTable(addEntry));
+
+ // Make one subcluster unavailable.
+ MiniDFSCluster dfsCluster = cluster.getCluster();
+ dfsCluster.shutdownNameNode(0);
+ try {
+ // Verify that #invokeAtAvailableNs works by calling #getServerDefaults.
+ RemoteMethod method = new RemoteMethod("getServerDefaults");
+ FsServerDefaults serverDefaults =
+ rpcServer.invokeAtAvailableNs(method, FsServerDefaults.class);
+ assertNotNull(serverDefaults);
+ } finally {
+ dfsCluster.restartNameNode(0);
+ }
+ }
+
+ /**
* Test write on mount point with multiple destinations
* and making a one of the destination's subcluster unavailable.
*/
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org