[I128-2527] DP_Irbis64Native должен блокировать параллельные транзакции записи


НАЧАЛО >> Оглавление >> Общее описание >> История изменений >> Что нового в проекте I128 >> Версия 2026.2.3 >> [I128-2527] DP_Irbis64Native должен блокировать параллельные транзакции записи📄 Скачать в DOCX


Тип Версия Статус Приоритет Исполнитель
⚙️ Исправление ошибок 2026.2.3 🔘 Завершено Средний Ilya Mikhaylenko

Компоненты: ИРБИС 128. Модуль DP_Irbis64Native - Нативный провайдер данных к файлам СУБД ИРБИС 64/64+

Завершено: 29.06.2026 14:28

Проблема: Менеджер транзакций DP_Irbis64Native фиксирует исходные размеры файлов и ведет журнал отката, но не удерживает общую файловую блокировку на время активной транзакции записи.

При параллельных операциях записи две транзакции могут одновременно изменить MST/XRF/словарные файлы и затем зафиксироваться или откатиться независимо. Это повышает риск несогласованного состояния файлов БД.

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

Ожидаемое поведение: На время активной транзакции записи native-провайдер должен удерживать эксклюзивную файловую блокировку БД. Перед commit должны быть сброшены буферы всех файлов, переданных в транзакцию.

Что изменяется: В IrbisTransactionManager добавляется отдельный lock-файл .lock рядом с БД. begin() получает эксклюзивную блокировку до создания журнала транзакции.

Если журнал транзакции создать не удалось, блокировка освобождается сразу.

commit() перед закрытием журнала сбрасывает все файловые дескрипторы транзакции, очищает список дескрипторов и освобождает блокировку.

rollback() после восстановления размеров файлов также очищает состояние транзакции и освобождает блокировку.

После изменения: Параллельные транзакции записи по одной БД сериализуются через lock-файл, а commit фиксирует данные после явного сброса файловых буферов.