zhiwang created HBASE-27093:
-------------------------------

             Summary: AsyncNonMetaRegionLocator:Complete CompletableFuture in a 
lock may cause a deadlock
                 Key: HBASE-27093
                 URL: https://issues.apache.org/jira/browse/HBASE-27093
             Project: HBase
          Issue Type: Improvement
          Components: asyncclient, Client
    Affects Versions: 2.4.12, 3.0.0-alpha-2
         Environment: 2.4.12
            Reporter: zhiwang


 
{code:java}
synchronized (tableCache) {
  tableCache.pendingRequests.remove(req);
  // fail the request itself, no matter whether it is a DoNotRetryIOException, 
as we have
  // already retried several times
  CompletableFuture<?> future = tableCache.allRequests.remove(req);
  if (future != null) {
    future.completeExceptionally(error);
  }
  tableCache.clearCompletedRequests(null);
  // Remove a complete locate request in a synchronized block, so the table 
cache must have
  // quota to send a candidate request.
  toSend = tableCache.getCandidate();
  toSend.ifPresent(r -> tableCache.send(r));
}

{code}
Complete or completeExceptionally in a lock block may cause deadlock. We can 
put this action outside the lock block to avoid deadlock.

 



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to