You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Alexander Lapin (Jira)" <ji...@apache.org> on 2023/10/05 16:00:00 UTC
[jira] [Updated] (IGNITE-20445) Clean up write intents for RW transaction on replication group nodes
[ https://issues.apache.org/jira/browse/IGNITE-20445?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Alexander Lapin updated IGNITE-20445:
-------------------------------------
Reviewer: Alexander Lapin
> Clean up write intents for RW transaction on replication group nodes
> --------------------------------------------------------------------
>
> Key: IGNITE-20445
> URL: https://issues.apache.org/jira/browse/IGNITE-20445
> Project: Ignite
> Issue Type: Task
> Reporter: Kirill Sizov
> Assignee: Kirill Sizov
> Priority: Major
> Labels: ignite-3
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> If a transaction was committed/aborted and for any reason the cleanup operation was not performed on a node, the write intent entries would still be present in the storage.
> When an RO transaction sees write intents, no matter on primary or on any other node, it performs write intent resolution and returns the correct result.
> When an RW transaction sees write intents, we can get an exception.
> _Imagine the case where a finished transaction left its write intents in the storage of all nodes A, B and C. A is primary._
> _An RO transaction is executed on the primary A, it kicks off an async cleanup (IGNITE-20041)._
> _The cleanup is a local task (not distributed to the replication group), thus only the A's storage is cleaned. B and C storages still contain the same write intent._
> _Now an RW transaction starts. It sees no write intents on A, executes its action and the action is replicated to B and C. Execution of this task on B and C will result in a storage exception since it's not allowed to have more than one write intent per row._
> *Definition of Done*
> The nodes of the replication group should perform cleanup of their storages when they receive an UpdateCommand, before adding new write intents.
> *Implementation details*
> We can extend the update command with the timestamp of the latest commit on primary.
> If the nodes of the replication group see a write intent in their storage, they will:
> * +commit+ the write intent if the UpdateCommand`s latestCommitTimestamp is greater than the commit timestamp of latest committed entry.
> * +abort+ the write intent if he UpdateCommand`s latestCommitTimestamp is equal to the commit timestamp of latest committed entry.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)