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/05/02 14:21:00 UTC

[jira] [Created] (IGNITE-19400) Design Schema Synchronization relation with transactional DDL

Roman Puchkovskiy created IGNITE-19400:
------------------------------------------

             Summary: Design Schema Synchronization relation with transactional DDL
                 Key: IGNITE-19400
                 URL: https://issues.apache.org/jira/browse/IGNITE-19400
             Project: Ignite
          Issue Type: Task
            Reporter: Roman Puchkovskiy


Currently, DDL is not transactional by design (meaning that a DDL command is not added to a transaction scope if run inside an explicit transaction: it is either forbidden in such context, or it becomes visible to other transactions immediately and is not rolled back when its transction gets aborted), but it is possible that it will be made transactional later.

The idea is that, if a DDL is transactional, we install the corresponding update as usual (assigning it some activation moment Tu in the future), but we also assign a transaction ID to it.
 # If a transaction sees such an update that has not yet activated, it ignores it
 # If a transaction sees such an update, and the update has already activated, and the tx corresponding to the schema update is finished, then the current transction either treats the update as installed and active or ignores it, depending on whether the update's transaction has been committed or aborted
 # If a transaction T sees such an update, and the update activation moment has passed, but the tx of the update is not yet finished, then the update is still pending, and
 ## If the InitialSchema of T is compatible with the pending update schema, then T goes on ignoring the pending update (as the pending update activation would not influence the outcome of T)
 ## If the InitialSchema of T is not compatible with the pending update schema, then we can
 ### abort T immediately
 ### wait till update's tx finishes and only abort T if tx commits, otherwise just ignore the update
 ### wait for some bounded time and abort either if the update's tx commits or if it does not finish in time



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