Vladislav Pyatkov created IGNITE-22207: ------------------------------------------
Summary: Handling of AwaitPrimaryReplica request maight lead to the dedalock Key: IGNITE-22207 URL: https://issues.apache.org/jira/browse/IGNITE-22207 Project: Ignite Issue Type: Bug Reporter: Vladislav Pyatkov h3. Motivation We handle ReplicaUnavailableException in ReplicaService to handle request transparency even if the replica had not been read at the time the request was sent. To do this, we send AwaitReplicaRequest as a handling of the exception and then process the origin request when the replica is guaranteed ready. In the event that the AwaitReplicaRequest is handled locally, we will do it synchronously in pendingInvokes.computeIfAbsent: {code} CompletableFuture<NetworkMessage> awaitReplicaFut = pendingInvokes.computeIfAbsent( targetNodeConsistentId, consistentId -> { AwaitReplicaRequest awaitReplicaReq = REPLICA_MESSAGES_FACTORY.awaitReplicaRequest() .groupId(req.groupId()) .build(); return messagingService.invoke( targetNodeConsistentId, awaitReplicaReq, replicationConfiguration.rpcTimeout().value() ); } ); {code} and then hands on handling of AwaitReplicaRequest, due to removing from pendingInvokes: {code} awaitReplicaFut.handle((response0, throwable0) -> { pendingInvokes.remove(targetNodeConsistentId, awaitReplicaFut); ... {code} h3. Definition of doe Take out of the network invokation from the map compute closure. -- This message was sent by Atlassian Jira (v8.20.10#820010)