Description
https://www.tarantool.io/ru/doc/2.5/book/box/atomic/
Сегодня три раза прочитал, но так и не стало понятно какая модель изоляции транзакций в Тарантуле. Сначала думаешь, что serialized, но потом оказывается, что нет — если есть вызовы, прерывающие файбер (винил, сеть, работа с файлами и т.п.), то уже read commited. И то я до конца не уверен, что правильно понял.
При этом на самой страничке привычные термины из «теории» и описания других БД нет. Возможно стоит переосмыслить страничку. Про кооперативную многозадачность написано более-менее ясно, если понимаешь как устроены всякие async/await в других языках, но про транзакции все равно странно.
На этой же страничке есть такое:
Если задача интерактивная – отправка запроса на сервер и получение ответа – то она включает в себя сетевой ввод-вывод, поэтому наблюдается неявная передача управления, даже если отправляемый на сервер запрос не представляет собой запрос с неявной передачей управления. Таким образом, последовательность:
select select select
приводит к блокировке (в memtx’е), если находится внутри функции или Lua-программы, которая выполняется на экземпляре сервера. Однако она вызывает передачу управления (и в memtx’е, и в vinyl’е), если выполняется как серия передач от клиента, включая клиентов, работающих по telnet, по одному из коннекторов или модулей MySQL и PostgreSQL или в интерактивном режиме при использовании Tarantool’а как клиента.
Такое впечатление, что в примере не хватает еще каких-то вызовов api, иначе непонятно почему три последовательных селекта вызывают локи.