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)