Блокировки и транзакции
Объектная команда
ObjectCommand передаёт законченную операцию над одним объектом. Этот API не содержит публичных begin/commit и команд записи отдельных физических таблиц. Ревизия объекта и контекст позволяют проверять актуальность изменения на границе runtime/провайдера.
Не переносите эти гарантии на любые одноимённые операции встроенного языка: их реализация требует отдельного контракта.
Файловый механизм DBF
FileTransaction координирует участвующие процессы, блокирует набор файлов и применяет подготовленные изменения. Поддерживаются полные образы и компактные undo/redo delta. LockedValidator выполняется после захвата набора блокировок и до создания журнала.
Ожидание задаётся через set_lock_wait_milliseconds. Повторяется только конфликт блокировки; ошибка записи не должна маскироваться бесконечным повтором. Код ограничивает ожидание значением 300 000 мс.
Logical и durable
| Режим | Гарантия из контракта |
|---|---|
durable |
Перед успехом сбрасываются WAL и затронутые файлы |
logical |
Изменения могут оставаться в кэше ОС до checkpoint |
При отключении питания до checkpoint logical-режим ограничен гарантиями кэша ОС. checkpoint(root) переводит накопленные logical commits в durable состояние. Это не основание обещать универсальные ACID-гарантии для любой файловой системы.
Восстановление и чтение
recover(root) должен отработать до выдачи файлов читателям: подготовленный незавершённый пакет восстанавливается, committed-пакет требует очистки. verify_readable_state(root) проверяет допустимость чтения без создания координационной блокировки; незавершённое состояние не разрешается молча.
Есть guard_reads для согласованного чтения агрегата и read-only scope begin_read_transaction. Это не готовая схема распределённых транзакций.
Неопределённый исход
Если committed установлен, а success не получен из-за чтения после записи, используйте reconciliation_required и восстановите состояние. Слепой повтор может создать второе изменение.
TODO: эксплуатационная инструкция поставки и таблица поведения будущих SQL-провайдеров.