Dimas Shidqi Parikesit created HDFS-17922:
---------------------------------------------

             Summary: rename2 in the router asynchronous RPC is missing an 
async path
                 Key: HDFS-17922
                 URL: https://issues.apache.org/jira/browse/HDFS-17922
             Project: Hadoop HDFS
          Issue Type: Bug
            Reporter: Dimas Shidqi Parikesit


In RouterAsyncClientProtocol:rename2, there is a path that returns 
synchronously if we have empty locations `if (locs.isEmpty)`.
{code:java}
@Override
  public void rename2(
      final String src, final String dst,
      final Options.Rename... options) throws IOException {
    ...
    if (locs.isEmpty()) {
      rbfRename.routerFedRename(src, dst, srcLocations, dstLocations);
      // Missing async handling
      return;
    }
    ...
    asyncApply((AsyncApplyFunction<Boolean, Boolean>) isMultiDestDirectory -> {
      if (isMultiDestDirectory) {
        ...
        rpcClient.invokeConcurrent(locs, method);
      } else {
        rpcClient.invokeSequential(locs, method, null, null);
      }
    });
  }{code}
 

There are other paths that behave similarly, such as msync()
{code:java}
@Override
  public void msync() throws IOException {
    rpcServer.checkOperation(NameNode.OperationCategory.READ, true);
    ...
    if (namespacesEligibleForObserverReads.isEmpty()) {
      asyncCompleteWith(CompletableFuture.completedFuture(null));
      return;
    }
    rpcClient.invokeConcurrent(namespacesEligibleForObserverReads, method);
  } {code}
 

We propose to add a patch to add `asyncComplete(null);` before the return.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to