[
https://issues.apache.org/jira/browse/IGNITE-21293?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Denis Chudov updated IGNITE-21293:
----------------------------------
Summary: Scan cursors should be closed if the tx coordinator is absent
(was: Scan cursors do not close on transaction recovery)
> Scan cursors should be closed if the tx coordinator is absent
> -------------------------------------------------------------
>
> Key: IGNITE-21293
> URL: https://issues.apache.org/jira/browse/IGNITE-21293
> Project: Ignite
> Issue Type: Bug
> Reporter: Vladislav Pyatkov
> Assignee: Denis Chudov
> Priority: Major
> Labels: ignite-3
>
> h3. Motivation
> Open cursors required extra memory on the server side. Hence, resources
> cannot be stored for a long time.
> h3. Implementation notes
> During the recovery procedure, the server receives a cleanup message (the
> message releases locks). On the message processing, we update the local
> transaction state, and it should also close all the cursors related to this
> transaction.
> h3. Definition of done
> All cursors should be closed on the RW transaction recovery and if a
> coordinator of RO transaction leaves the cluster.
> h3. Possible solution
> The reason why the cursors are not being closed during the recovery is that
> the normal way of closing them is implemented in
> {{WriteIntentSwitchReplicaRequest}} handler, but for the recovery case we
> don't have the collection of enlisted partitions, thus no write intent switch
> is triggered.
> We could follow the same approach as the lock manager uses, but we need a
> node-wide access to all the cursors opened in the current transaction. There
> is another way - instead of closing the cursors directly we can shift the
> responsibility to the partition listener itself.
> Each node has an in-memory txnState map, tracking the state of the
> transactions. If we add listeners to this map, then on registering a new
> cursor a partition listener will be able to check current transaction state
> and add a listener for a terminal one.
> When the tx state is changed to a terminal one, the cursors will be closed.
> We can also create a cluanup thread which would check the coordinator node id
> assosiated with cursors and if they are absent then the cursor would have to
> be closed.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)