Могу ли я уступить при транзакции в Tarantool?

Мне любопытно уступить во время транзакции. Будет ли он немедленно прерван? Или другие волокна смогут читать изменения, которые еще не были зафиксированы?

Я пропустил документацию, но не увидел ее.


person Artur Barsegyan    schedule 01.10.2020    source источник


Ответы (1)


В настоящее время существует способ получения прибыли в транзакции. Это связано с тем, что теперь есть полнофункциональный менеджер транзакций как для движков memtx, так и для виниловых движков.

Вот рабочий пример:

local fiber = require('fiber')

-- If you just use box.cfg{}, this app will fail
box.cfg{memtx_use_mvcc_engine=true}
--box.cfg{}

box.schema.space.create('account', {if_not_exists=true})
box.space.account:format({ {name='id',type='unsigned'},
      {name='first_name',type='string'},
      {name='last_name',type='string'},
})

box.begin()
box.space.account:put({2, "John", "Doe"})

print("sleeping")
fiber.sleep(1)
print("woke up")

box.space.account:put({3, "Ivan", "Ivanov"})

box.commit()

os.exit(0)

Обратите внимание на параметр memtx_use_mvcc_engine. Это включает механизм транзакций. Без этой опции доходность внутри транзакции приведет к немедленному откату.

Новый диспетчер транзакций также внесет изменения внутри транзакции, чтобы они были невидимы для других волокон и транзакций, прежде чем она будет зафиксирована. А в случае конфликта (параллельное изменение одних и тех же данных) транзакция будет отменена.

person Konstantin Nazarov    schedule 01.10.2020