You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by " Kirill Sizov (Jira)" <ji...@apache.org> on 2023/10/06 08:22:00 UTC
[jira] [Updated] (IGNITE-20002) Implement durable unlock on primary partition re-election
[ https://issues.apache.org/jira/browse/IGNITE-20002?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kirill Sizov updated IGNITE-20002:
-----------------------------------
Description:
h3. Motivation
It's required to release all acquired locks on transaction finish in a durable way. Such durability consists of two parts:
* Durable unlock within same primary.
* Durable unlock on primary change.
This ticket is about second part only. There's a counterpart ticket for the first part IGNITE-20004
h3. Definition of Done
* All unreleased locks for the transactions that were finished are released in case of primary re-election, including old primary failure and cluster restart.
h3. Implementation Notes
* We may start with adding onPrimaryElected callback.
* Within this callback, it's required to scan `org.apache.ignite.internal.tx.storage.state.TxStateStorage#scan` local TxStateStorage and call `org.apache.ignite.internal.tx.TxManager#cleanup` for all transactions that have false in TxMeta.locksReleased. TxManager#cleanup is an idempotent operation, thus it's safe to run it multiple time, even from different nodes, e.g. old primary and new primary.
* It's required to add locksReleased field to TxMeta with default value false.
* It's required to set locksReleases to true when all cleanup txCleanupReplicaRequest returns successfully. That extra "updateTxnState(locksReleased == true) should be asynchronous.
* Tests will be non-trivial here, because it'll be required to kill old primary after txnStateChanged but before sending cleanup request.
was:
h3. Motivation
It's required to release all acquired locks on transaction finish in a durable way. Such durability consists of two parts:
* Durable unlock within same primary.
* Durable unlock on primary change.
This ticket is about second part only. There's a counterpart ticket for the first part https://issues.apache.org/jira/browse/IGNITE-20004
h3. Definition of Done
* All unreleased locks for the transactions that were finished are released in case of primary re-election, including old primary failure and cluster restart.
h3. Implementation Notes
* We may start with adding onPrimaryElected callback.
* Within this callback, it's required to scan `org.apache.ignite.internal.tx.storage.state.TxStateStorage#scan` local TxStateStorage and call `org.apache.ignite.internal.tx.TxManager#cleanup` for all transactions that have false in TxMeta.locksReleased. TxManager#cleanup is an idempotent operation, thus it's safe to run it multiple time, even from different nodes, e.g. old primary and new primary.
* It's required to add locksReleased field to TxMeta with default value false.
* It's required to set locksReleases to true when all cleanup txCleanupReplicaRequest returns successfully. That extra "updateTxnState(locksReleased == true) should be asynchronous.
* Tests will be non-trivial here, because it'll be required to kill old primary after txnStateChanged but before sending cleanup request.
> Implement durable unlock on primary partition re-election
> ---------------------------------------------------------
>
> Key: IGNITE-20002
> URL: https://issues.apache.org/jira/browse/IGNITE-20002
> Project: Ignite
> Issue Type: Improvement
> Reporter: Alexander Lapin
> Priority: Major
> Labels: ignite-3, transaction, transaction3_recovery
>
> h3. Motivation
> It's required to release all acquired locks on transaction finish in a durable way. Such durability consists of two parts:
> * Durable unlock within same primary.
> * Durable unlock on primary change.
> This ticket is about second part only. There's a counterpart ticket for the first part IGNITE-20004
> h3. Definition of Done
> * All unreleased locks for the transactions that were finished are released in case of primary re-election, including old primary failure and cluster restart.
> h3. Implementation Notes
> * We may start with adding onPrimaryElected callback.
> * Within this callback, it's required to scan `org.apache.ignite.internal.tx.storage.state.TxStateStorage#scan` local TxStateStorage and call `org.apache.ignite.internal.tx.TxManager#cleanup` for all transactions that have false in TxMeta.locksReleased. TxManager#cleanup is an idempotent operation, thus it's safe to run it multiple time, even from different nodes, e.g. old primary and new primary.
> * It's required to add locksReleased field to TxMeta with default value false.
> * It's required to set locksReleases to true when all cleanup txCleanupReplicaRequest returns successfully. That extra "updateTxnState(locksReleased == true) should be asynchronous.
> * Tests will be non-trivial here, because it'll be required to kill old primary after txnStateChanged but before sending cleanup request.
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)