AMashenkov commented on code in PR #1579:
URL: https://github.com/apache/ignite-3/pull/1579#discussion_r1087590114
##########
modules/replicator/src/main/java/org/apache/ignite/internal/replicator/ReplicaManager.java:
##########
@@ -217,20 +217,24 @@ private Replica startReplicaInternal(
ReplicationGroupId replicaGrpId,
ReplicaListener listener
) {
+ Replica newReplica = new Replica(replicaGrpId, listener);
+
replicas.compute(replicaGrpId, (replicationGroupId, replicaFut) -> {
if (replicaFut == null) {
- replicaFut = CompletableFuture.completedFuture(new
Replica(replicaGrpId, listener));
-
- return replicaFut;
+ return CompletableFuture.completedFuture(newReplica);
} else {
- replicaFut.complete(new Replica(replicaGrpId, listener));
+ if (replicaFut.isDone() && !replicaFut.isCancelled() &&
!replicaFut.isCompletedExceptionally()) {
+ return CompletableFuture.completedFuture(newReplica);
+ }
+
+ replicaFut.complete(newReplica);
Review Comment:
Here we can complete the future inside the synchronized block.
Should the future be completed in the current thread? or completeAsync
should be used instead?
I see the same issue in constructor, where we call
`sendAwaitReplicaResponse` in thenCompose without a thread pool specified.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]