You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Roman Puchkovskiy (Jira)" <ji...@apache.org> on 2023/12/19 10:18:00 UTC
[jira] [Updated] (IGNITE-21112) Mechanism to wait for completion of transactions started on schema versions preceding a target schema version
[ https://issues.apache.org/jira/browse/IGNITE-21112?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Roman Puchkovskiy updated IGNITE-21112:
---------------------------------------
Summary: Mechanism to wait for completion of transactions started on schema versions preceding a target schema version (was: Mechanism to wait for finish of transactions started on schema versions preceding a target schema version)
> Mechanism to wait for completion of transactions started on schema versions preceding a target schema version
> -------------------------------------------------------------------------------------------------------------
>
> Key: IGNITE-21112
> URL: https://issues.apache.org/jira/browse/IGNITE-21112
> Project: Ignite
> Issue Type: Improvement
> Reporter: Roman Puchkovskiy
> Priority: Major
> Labels: ignite-3
>
> A. Each node should handle the following message: RwTransactionsFinishedRequest; it will have targetSchemaVersion field of type int (which represents a Catalog version). The response will be RwTransactionsFinishedResponse containing the only field: finished (of type boolean).
> B. When the node gets such a request, it should (1) first check whether the target version has activated on the node. If not, (2) it should return false. If it has already been activated on the node, then the node should atomically query its TxManager whether it has any non-finished RW transactions that started on schema versions preceding the target version (this is determined by the beginTs of the transaction).
> C. To avoid a race between starting an RW transaction and checking for non-finished transactions, we need to start RW transactions in the following way:
> # beginTs = HLC.now()
> # {*}Withing doing a schema sync{*}, find the Catalog version active at beginTs, assign it to TxCatalogVersion
> # Atomically wrt checking for transactions existence on schemas before X (see B.2), wrt finishing RW transactions and wrt raising the 'latest activated Catalog version' (used in B.1), add the new transaction with beginTs to the map of the currently active transactions (only if the 'latest activated Catalog version' is not higher than TxCatalogVersion)
> # If on item 3 it turned out that TxCatalogVersion is already lower than the 'latest activated Catalog version', goto step 1
--
This message was sent by Atlassian Jira
(v8.20.10#820010)