docs: private CompletableFuture<Void> completeCache(ByteString cacheName) throws Throwable {
        TxState state = globalTxTable.getState(new CacheXid(cacheName, xid));
        HotRodServer.CacheInfo cacheInfo =
           server.getCacheInfo(cacheName.toString(), header.getVersion(), header.getMessageId(), true);
        AdvancedCache<?, ?> cache = server.cache(cacheInfo, header, subject);
        RpcManager rpcManager = cache.getRpcManager();
        if (rpcManager == null || rpcManager.getAddress().equals(state.getOriginator())) {
           if (isTraceEnabled()) {
              log().tracef("[%s] Completing local executed transaction.", xid);
           }
           return asyncCompleteLocalTransaction(cache, state.getTimeout());
        } else if (rpcManager.getMembers().contains(state.getOriginator())) {
           if (isTraceEnabled()) {
              log().tracef("[%s] Forward remotely executed transaction to %s.", xid, state.getOriginator());
           }
           return forwardCompleteCommand(cacheName, rpcManager, state);
        } else {
           if (isTraceEnabled()) {
              log().tracef("[%s] Originator, %s, left the cluster.", xid, state.getOriginator());
           }
           return completeWithRemoteCommand(cache, rpcManager, state);
        }
     }