НАЧАЛО >> Оглавление >> Общее описание >> История изменений >> Что нового в проекте 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 фиксирует данные после явного сброса файловых буферов.