[ 
https://issues.apache.org/jira/browse/HDFS-17601?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17888488#comment-17888488
 ] 

ASF GitHub Bot commented on HDFS-17601:
---------------------------------------

hfutatzhanghb commented on code in PR #7108:
URL: https://github.com/apache/hadoop/pull/7108#discussion_r1796318649


##########
hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcServer.java:
##########
@@ -791,6 +801,46 @@ <T> T invokeAtAvailableNs(RemoteMethod method, Class<T> 
clazz)
     return invokeOnNs(method, clazz, io, nss);
   }
 
+  /**
+   * Invokes the method at default namespace, if default namespace is not
+   * available then at the other available namespaces.
+   * If the namespace is unavailable, retry with other namespaces.
+   * Asynchronous version of invokeAtAvailableNs method.
+   * @param <T> expected return type.
+   * @param method the remote method.
+   * @return the response received after invoking method.
+   * @throws IOException
+   */
+  <T> T invokeAtAvailableNsAsync(RemoteMethod method, Class<T> clazz)
+      throws IOException {
+    String nsId = subclusterResolver.getDefaultNamespace();
+    // If default Ns is not present return result from first namespace.
+    Set<FederationNamespaceInfo> nss = namenodeResolver.getNamespaces();
+    // If no namespace is available, throw IOException.
+    IOException io = new IOException("No namespace available.");
+
+    asyncComplete(null);
+    if (!nsId.isEmpty()) {
+      asyncTry(() -> {
+        rpcClient.invokeSingle(nsId, method, clazz);
+      });
+
+      asyncCatch((AsyncCatchFunction<T, IOException>)(res, ioe) -> {
+        if (!clientProto.isUnavailableSubclusterException(ioe)) {
+          LOG.debug("{} exception cannot be retried",
+              ioe.getClass().getSimpleName());
+          throw ioe;
+        }
+        nss.removeIf(n -> n.getNameserviceId().equals(nsId));
+        invokeOnNs(method, clazz, io, nss);

Review Comment:
   Thanks, fixed.





> [ARR] RouterRpcServer supports asynchronous rpc.
> ------------------------------------------------
>
>                 Key: HDFS-17601
>                 URL: https://issues.apache.org/jira/browse/HDFS-17601
>             Project: Hadoop HDFS
>          Issue Type: Sub-task
>          Components: rbf
>            Reporter: farmmamba
>            Assignee: farmmamba
>            Priority: Major
>              Labels: pull-request-available
>
> RouterRpcServer supports asynchronous RPC, the following methods need to be 
> transformed to asynchronous versions:
>  * {{{color:#172b4d}invokeOnNsAsync{color}}}
>  * {{{color:#172b4d}invokeAtAvailableNsAsync {color}}}
>  * {{{color:#172b4d}getExistingLocationAsync{color}}}
>  * {{{color:#172b4d}getDatanodeReportAsync{color}}}
>  * {{{color:#172b4d}getDatanodeStorageReportMapAsync{color}}}
>  * {{{color:#172b4d}getSlowDatanodeReportAsync{color}}}
>  * {{{color:#172b4d}getCreateLocationAsync{color}}}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-h...@hadoop.apache.org

Reply via email to