Dimas Shidqi Parikesit created HBASE-30164:
----------------------------------------------
Summary: rename2 in the router asynchronous RPC is missing an
async path
Key: HBASE-30164
URL: https://issues.apache.org/jira/browse/HBASE-30164
Project: HBase
Issue Type: Bug
Reporter: Dimas Shidqi Parikesit
Attachments: image-2026-05-15-14-19-12-358.png
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)