- половина потока (50 доставок из 104) не несёт metrics вовсе и до сих пор числилась parsed: ретеншен, поверив статусу, срезал бы тела stateOfMind, которых в экспорте Apple нет - разбор перечисляет верхнеуровневые ключи data, непокрытые проглатываются декодированием: тело 40 МиБ из непокрытой секции удерживает 0 МиБ - статус partial и колонка delivery.uncovered_sections; миграция переводит прежние parsed в pending — им верить нельзя - витрина не изменилась: отпечаток совпал с прогоном до изменения
40 lines
3.1 KiB
Markdown
40 lines
3.1 KiB
Markdown
# Ретеншен сырого архива
|
|
|
|
**Приоритет:** низкий
|
|
|
|
Срок жизни сырого архива объявлен (14 дней, `storage.raw_retention`), но
|
|
удаления нет: архив растёт бесконечно. Пока это 16 МБ и проблемой не является.
|
|
|
|
**Само правило изменилось.** Экспорт Apple — снапшот всей истории, доставки
|
|
после его даты — события поверх снапшота, и состояние всегда пересобираемо
|
|
свёрткой. Значит доставки должны жить **до следующего проверенного экспорта**,
|
|
а не фиксированные две недели: иначе между концом ретеншена и датой снапшота
|
|
образуется дыра в журнале, и пересобрать этот отрезок будет нечем.
|
|
|
|
Цена измерена: ~23 МБ архива в сутки, то есть ~2 ГБ за квартал между
|
|
экспортами. Дёшево за возможность пересобрать что угодно.
|
|
|
|
Отдельное исключение: `stateOfMind` в экспорт не попадает вовсе (проверено на
|
|
свежем архиве). Для него доставки — не хвост журнала, а единственный источник,
|
|
и под общее правило удаления он не подпадает.
|
|
|
|
Включать **после** того, как разбор устоится и пересборка докажет, что
|
|
хранилище действительно восстанавливается: иначе страховка исчезнет раньше, чем
|
|
перестанет быть нужна.
|
|
|
|
Готово, когда удаляются только доставки старше последнего проверенного
|
|
экспорта, записи `stateOfMind` не трогаются вовсе, а `/stats` показывает
|
|
глубину архива и дату снапшота, до которой он подрезан.
|
|
|
|
## Предусловие снято
|
|
|
|
Признак, без которого ретеншен был опасен, готов: доставка с непокрытой секцией
|
|
имеет статус `partial` и список непокрытых ключей
|
|
(change `2026-08-01-nerazobrannye-sekcii-dostavki`). Ретеншен обязан спрашивать
|
|
статус, а не считать `parsed` разрешением: тело `stateOfMind` восстановить
|
|
неоткуда — в экспорте Apple секции нет.
|
|
|
|
Вместе с этим действует правило: задача, которая начинает разбирать секцию, тем
|
|
же изменением переводит `partial`-строки с этим ключом в `pending`. Ретеншену
|
|
позволено смотреть на `partial` только пока правило соблюдается.
|