[ https://issues.apache.org/jira/browse/IGNITE-21213?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17809297#comment-17809297 ]
Denis Chudov commented on IGNITE-21213: --------------------------------------- There are 3 aspects of this problem: # Handling the events processing should be done within the replica stripe, will be covered in IGNITE-21258 # We shouldn't allow to process transactional requests and events handling simultaneously wrt async calls, so we should make something like read-write lock (but not literally, because simple read-write lock will lead to deadlocks). Can be done in this ticket. # We shouldn't allow to process new transactional requests until the event handling is done, PlacementDriver#previousPrimaryExpired future can be used for this. > Coordination of mechanisms of determination for primary on replicaside > ---------------------------------------------------------------------- > > Key: IGNITE-21213 > URL: https://issues.apache.org/jira/browse/IGNITE-21213 > Project: Ignite > Issue Type: Bug > Reporter: Vladislav Pyatkov > Priority: Major > Labels: ignite-3 > > h3. Motivation > In the replica listener, we have unconsidered mechanisms between each other > to determine primary rteplica. The first one is based on the placement driver > API (it is used in _PartitionReplicaListener#ensureReplicaIsPrimary_) and the > other one is based on the placement driver events (the events are hadeled by > two methods: _ReplicaManager#onPrimaryReplicaElected_, > _ReplicaManager#onPrimaryReplicaExpired_). > Because the replica messages and events are handled in different threads, any > variety of processing is possible. For example, the replica can release all > transaction locks (by > PRIMARY_REPLICA_EXPIRED event) and then handle a message for this transaction > (because ensureReplicaIsPrimary was done before), assuming that all the locks > are holding. > h3. Definition of done > The two mechanisms work in coordination. -- This message was sent by Atlassian Jira (v8.20.10#820010)