You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Восстанавливать повреждённые thumbnails без ручной очистки #68
Писать во временный файл в том же каталоге и атомарно публиковать готовый результат. На decode failure локального thumbnail удалять повреждённую запись и допускать один контролируемый refetch.
Контекст и результат для пользователя
Процесс завершается или заканчивается место во время File.writeBytes в конечный путь thumbnail. На диске остаётся пустой или частично записанный файл; до успешного upsert в Room выполнение могло не дойти.
resolveThumbnailFile сначала проверяет только isFile и сразу возвращает путь, не вызывая ensureAvailable. Decode ломается, но файл не удаляется и не перезагружается. Следующие запросы снова выбирают тот же повреждённый файл до внешней очистки.
Критерии приёмки
Неоконченная запись не публикуется в конечный thumbnail path; выбран механизм атомарной публикации в том же каталоге.
Decode failure существующего повреждённого thumbnail инвалидирует файл и согласует DAO state, после чего допускается ограниченный refetch.
Повторно невалидный server response приводит к состоянию ошибки, а не бесконечному циклу.
Тесты покрывают write failure после части bytes, пустой файл, повторный decode failure и отсутствие успешной DAO записи.
После восстановления сети/валидного ответа изображение загружается без logout или ручного удаления cache.
Ограничения и компромиссы
Atomic rename защищает от частичной записи, но не от корректно записанного невалидного ответа сервера. Нужны ограниченный retry и согласование файлов с DAO; полноценная гарантия offline durability здесь не требуется.
Проверка
Инъекция write failure после части bytes и повторный fetch: восстановление без ручного logout. Дополнительно пустой файл, ошибка decode и отсутствие бесконечного повторения.
Зависимости
Блокирующих задач нет; можно выполнять самостоятельно. Связанные исправления общего cache следует координировать при параллельной реализации.
Основание
Аудит 08.09.2026, пункт I2, commit c49d4b1. Приоритет аудита P2; высокая по пути повреждения · аварийное завершение процесса не моделировалось. Это не обещание измеренного ускорения.
Activity