НАЧАЛО >> Оглавление >> Общее описание >> История изменений >> Что нового в проекте I128 >> Версия 2026.3 >> [I128-2847] Record: устаревшее содержимое SID-кеша при разном регистре имени БД📄 Скачать в DOCX
| Тип | Версия | Статус | Приоритет | Исполнитель |
|---|---|---|---|---|
| ⚙️ Исправление ошибок | 2026.3 | 🔘 Завершено |
Средний | Ilya Mikhaylenko |
Компоненты: ИРБИС 128. Модуль Record - Запись ИРБИС
Завершено: 09.09.2026 06:53
Проблема: При сохранении записи с SID устаревшее содержимое записи могло оставаться в системном кеше, если запись ранее была закеширована с тем же именем БД в другом регистре. Из-за этого последующее чтение записи по SID могло вернуть прежнее содержимое до очистки кеша.
Ожидаемое поведение:
После сохранения или удаления записи чтение по SID должно видеть актуальное состояние записи независимо от регистра имени БД, использованного при создании старой cache map и ключей Record*Content**.
Решение:
Ключи Record*Content** для новых записей формируются с нормализованным именем БД. При сохранении и удалении записи система очищает Record*SidMap*<sid>, explicit contentKey из карты SID и legacy-варианты Record*Content*<db>_<mfn> для текущей пары БД/MFN.
Результат для пользователя: Изменения записей с SID становятся видны сразу после сохранения без ручной очистки системного кеша.
-
PR по I128~~2847 исправляет системную инвалидацию SIDкеша записей в модуле 2847Record. Ветка `hotfix/I128создана отdevelop; изменение затрагивает только ключиRecord*Content*, картуRecordSidMap`, операции сохранения/удаления записи и regression~~сценарий TestA.
Куда смотреть:
Record::GetBySid, Record::SidReload, Record::SidSave, Database::RecRead, Database::SaveAndUpdateRecord, Database::DeleteRec. Эффект: после сохранения или удаления записи с SID система очищает SID map, explicit contentKey и legacy-варианты Record*Content*<db>_<mfn> независимо от регистра имени БД; новые content keys формируются с нормализованным именем БД.Record*SidMap*<sid> и Record*Content*<db>*<mfn>, затем сохраняется через Database::SaveAndUpdateRecord. Chrome: не подтверждено, потому что изменение системное и не имеет отдельного UIRecord*Content_* мог остаться и чтение по SID возвращало прежнее содержимое. Стало: stale cache удаляется, следующее чтение получает актуальную запись.Record, база с записью SID, операции RecRead, SaveAndUpdateRecord, DeleteRec.modules/Record/Help/SidCache.md; Help применим как техническая документация поведения SID-кеша.develop (004940d49a934ec9fc18bd2ab8bea258dfe25fa6), дополнительных зависимостей в diff нет.Изменения по файлам:
modules/Database/__call/SaveAndUpdateRecord.inc
contentKey.Record*Content*<db>_<mfn>, чтобы старый кеш с другим регистром имени БД не переживал сохранение.modules/Database/__call/DeleteRec.inc
Record*SidMap*<sid>.modules/Database/__call/RecRead.inc
Record*Content** cache keys с нормализованным именем БД.modules/Record/__call/GetBySid.inc
contentKey.Record*Content** и карту с explicit contentKey.modules/Record/__call/SidReload.inc
contentKey.modules/Record/__call/SidSave.inc
modules/Database/Tests/Scenarios/ProviderMatrixRecordCacheIterationEdgeContracts.inc
CheckSidRecordCacheInvalidationDbNameCaseMismatch для случая, когда старая SID map и content key используют другой регистр имени БД.modules/Record/Help/SidCache.md
Record*Content** ключах.SaveAndUpdateRecord и DeleteRec удаляют explicit contentKey и legacy-варианты ключей для совместимости со старым кешем.[I128-2721] Record: не возвращать чужую запись из SID-кеша
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2846] Bookland: настройка порядка видов поиска в форме «Выдача без заказа»
Статус: Завершено | Автор: Ilya Mikhaylenko