[ 
https://issues.apache.org/jira/browse/IGNITE-17615?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexander Lapin updated IGNITE-17615:
-------------------------------------
    Description: 
h3. Motivation

According to our tx protocol, it’s impossible to commit a transaction if any of 
the enlisted primary replicas have expired. It also means that there’s no sense 
in preserving tx related volatile state such as locks and cursors. Pay 
attention, that it’s still useful to preserve txnState in the txnStateLocalMap 
because it will ease write intent resolution procedure. Locks release on 
primary replica expiration was already implemented, so this ticket is only 
about closing cursors on primary expiration.
h3. Definition of Done
 * On primary replica expiration all RW-scoped cursors are closed.

h3. Implementation Notes

1.In 
org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener#onPrimaryExpired
 we release all tx locks
{code:java}
futs.add(allOf(txFuts).whenComplete((unused, throwable) -> 
releaseTxLocks(txId)));
{code}
Seems reasonable to reuse same event to close the cursors. Worth mentioning 
that given action should be asynchronous. I believe that we may do the cursors 
close in partition striped pool. See StripedThreadPoolExecutor for more 
details. Another option here is to introduce special dedicated cleanup thread 
and use it instead. That will be a part of TX Resourse Cleanup design.

2. So, that was about when to close, let’s clarify what to close. Seems that 
it’s trivial. We have 
org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener#cursors
 right in partition replica listeners. We even have corresponding helper method.

  was:
h3. Motivation

According to our tx protocol, it’s impossible to commit a transaction if any of 
the enlisted primary replicas have expired. It also means that there’s no sense 
in preserving tx related volatile state such as locks and cursors. Pay 
attention, that it’s still useful to preserve txnState in the txnStateLocalMap 
because it will ease write intent resolution procedure. Locks release on 
primary replica expiration was already implemented, so this ticket is only 
about closing cursors on primary expiration.
h3. Definition of Done
 * On primary replica expiration all RW-scoped cursors are closed.

h3. Implementation Notes

1.In 
org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener#onPrimaryExpired
 we release all tx locks

{{}}
{code:java}
futs.add(allOf(txFuts).whenComplete((unused, throwable) -> 
releaseTxLocks(txId)));
{code}
{{}}

{{}}

Seems reasonable to reuse same event to close the cursors. Worth mentioning 
that given action should be asynchronous. I believe that we may do the cursors 
close in partition striped pool. See StripedThreadPoolExecutor for more 
details. Another option here is to introduce special dedicated cleanup thread 
and use it instead. That will be a part of TX Resourse Cleanup design.

2. So, that was about when to close, let’s clarify what to close. Seems that 
it’s trivial. We have 
org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener#cursors
 right in partition replica listeners. We even have corresponding helper method.


> Handling primary replica changes on TxFinishReplicaRequest  and 
> TxCleanupReplicaRequest
> ---------------------------------------------------------------------------------------
>
>                 Key: IGNITE-17615
>                 URL: https://issues.apache.org/jira/browse/IGNITE-17615
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Sergey Uttsel
>            Priority: Major
>              Labels: ignite-3
>
> h3. Motivation
> According to our tx protocol, it’s impossible to commit a transaction if any 
> of the enlisted primary replicas have expired. It also means that there’s no 
> sense in preserving tx related volatile state such as locks and cursors. Pay 
> attention, that it’s still useful to preserve txnState in the 
> txnStateLocalMap because it will ease write intent resolution procedure. 
> Locks release on primary replica expiration was already implemented, so this 
> ticket is only about closing cursors on primary expiration.
> h3. Definition of Done
>  * On primary replica expiration all RW-scoped cursors are closed.
> h3. Implementation Notes
> 1.In 
> org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener#onPrimaryExpired
>  we release all tx locks
> {code:java}
> futs.add(allOf(txFuts).whenComplete((unused, throwable) -> 
> releaseTxLocks(txId)));
> {code}
> Seems reasonable to reuse same event to close the cursors. Worth mentioning 
> that given action should be asynchronous. I believe that we may do the 
> cursors close in partition striped pool. See StripedThreadPoolExecutor for 
> more details. Another option here is to introduce special dedicated cleanup 
> thread and use it instead. That will be a part of TX Resourse Cleanup design.
> 2. So, that was about when to close, let’s clarify what to close. Seems that 
> it’s trivial. We have 
> org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener#cursors
>  right in partition replica listeners. We even have corresponding helper 
> method.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to