Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
3.0.0-alpha-2, 2.4.12
-
2.4.12
-
Reviewed
Description
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)); }
Complete or completeExceptionally in a lock block may cause deadlock. We can put this action outside the lock block to avoid deadlock.
Attachments
Issue Links
- links to