-
Notifications
You must be signed in to change notification settings - Fork 403
Closed
Labels
3.2Target is 3.2 and all newer release/master branchesTarget is 3.2 and all newer release/master branchesddlfeatureA new functionalityA new functionalitymemtxmvcc
Description
Currently, any DDL operation aborts all yielding memtx transactions, even those that are not directly affected by it:
local fiber = require('fiber')
box.cfg{
log_level = 'warn',
memtx_use_mvcc_engine = true,
}
local s = box.schema.space.create('test')
s:create_index('pk')
box.begin()
s:insert({1})
local f = fiber.new(box.schema.space.create, 'test2')
f:set_joinable(true)
f:join()
box.commit()
os.exit(0)Output:
2024-08-07 12:49:27.531 [143562] main/114/lua memtx_tx.c:700 W> Transaction committing DDL (id=392) has aborted another TX (id=391)
2024-08-07 12:49:27.532 [143562] main test.lua:18 E> ER_TRANSACTION_CONFLICT: Transaction has been aborted by conflict
2024-08-07 12:49:27.532 [143562] main F> fatal error, exiting the event loop
This is caused by the following code:
tarantool/src/box/memtx_engine.cc
Lines 623 to 624 in 625afe4
| if (txn->is_schema_changed) | |
| memtx_tx_abort_all_for_ddl(txn); |
In contrast to memtx, Vinyl aborts only affected transactions when a DDL operation is committed, see commit d3e1236. We should do something similar in memtx.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
3.2Target is 3.2 and all newer release/master branchesTarget is 3.2 and all newer release/master branchesddlfeatureA new functionalityA new functionalitymemtxmvcc