НАЧАЛО >> Оглавление >> Общее описание >> История изменений >> Что нового в проекте I128 >> Версия 2026.2.4 >> [I128-2683] При одновременном создании записей могли смешиваться данные📄 Скачать в DOCX
| Тип | Версия | Статус | Приоритет | Исполнитель |
|---|---|---|---|---|
| ⚙️ Исправление ошибок | 2026.2.4 | 🔘 Завершено |
Средний | Ilya Mikhaylenko |
Компоненты: ИРБИС 128. Модуль Database - Управление базами данных, ИРБИС 128. Модуль General - Функции общего назначения, ИРБИС 128. Модуль he3 - Табличная форма ввода данных, ИРБИС 128. Модуль Record - Запись ИРБИС, ИРБИС 128. Модуль Security - Подсистема безопасности
Завершено: 14.07.2026 10:32
При параллельном создании новых библиографических записей разными пользователями временное состояние записи до присвоения MFN могло быть связано с общим ключом БД/MFN. В результате данные одной новой записи могли попасть в рабочую сессию другой новой записи, а сохранение завершалось ошибками ФЛК вида mfn=-1, отсутствует заглавие или отсутствуют сведения об экземплярах.
Исправлено: временное состояние новой записи теперь изолируется по SID до появления реального MFN. Генерация SID/GUID переведена на более надежный 128-битный генератор, а создание ID черновика получает повторную попытку при обнаруженной коллизии.
PR: https://bitbucket.irbis128.ru/projects/I128/repos/irbis128/pull-requests/994
-
I128-2683 исправляет системный риск смешивания данных при параллельном создании новых записей: SID/GUID теперь создаются надежнее, а временное состояние новой записи до присвоения MFN изолируется по SID. Целевая ветка PR: release/2026.2.
Куда смотреть:
Record::SetSid, Record::SidSave, Record::SidReload, Record::GetBySid, Database::SaveAndUpdateRecord, he3 DraftService. Эффект: временное содержимое новой записи больше не адресуется общим ключом Record*Content*<db>*-1/0, а получает ключ Record*Content*<db>*SID_<sid> до появления реального MFN.Изменения по файлам:
modules/Record/__call/SetSid.inc
random_bytes() с fallback для старого окружения.modules/Record/__call/SidSave.inc
contentKey теперь строится по SID.Record*Content*<db>_<mfn>.modules/Record/__call/SidReload.inc
contentKey из SID-map.DB/MFN ключи остаются совместимыми, небезопасные старые mfn <= 0 без contentKey не переиспользуются.modules/Record/__call/GetBySid.inc
contentKey.Record*Content*<db>_<mfn> и дополняет map явным contentKey.modules/Database/__call/SaveAndUpdateRecord.inc
Record*Content*<db>_<mfn>, но и новый временный contentKey, если он был в SID-map.modules/General/api.php
GenGUID() переведен на random_bytes(16) с fallback.modules/Record/api.php
Record::GenGUID() переведен на random_bytes(16) с fallback.classes/GUIDFiles.php
GUIDFiles::GenGUID() переведен на random_bytes(16) с fallback.modules/Security/api.php
CreateNewObject() использует общий General::GenGUID() для нового SID; старый random_bytes() оставлен только fallback на пустой результат.modules/he3/classes/DraftService.php
draft_id создается через INSERT OR IGNORE с повторными попытками, чтобы коллизия primary key не приводила к тихой потере черновика.-
There was a merge conflict automatically merging this branch
[SD-874] не сохранилась книга и менялись местами данные книг двух пользователей
Статус: Ведется работа над ошибкой | Автор: KashirinaTV