- экспорт Apple это снапшот всей истории, доставки после его даты — события поверх; состояние пересобирается как import(экспорт) + replay(доставки) - отсюда ретеншен архива меняется с произвольных 14 дней на «до следующего проверенного экспорта» (~2 ГБ за квартал, измерено), а свёртка обязана быть детерминированной — воспроизведение строго по received_at - названы границы модели: stateOfMind в экспорт не попадает вовсе, а верхние слои за периоды с удалёнными доставками не воскресают и досчитываться не должны — каталог обязан говорить это честно
29 lines
2.2 KiB
Markdown
29 lines
2.2 KiB
Markdown
# Ретеншен сырого архива
|
|
|
|
**Приоритет:** низкий
|
|
|
|
Срок жизни сырого архива объявлен (14 дней, `storage.raw_retention`), но
|
|
удаления нет: архив растёт бесконечно. Пока это 16 МБ и проблемой не является.
|
|
|
|
**Само правило изменилось.** Экспорт Apple — снапшот всей истории, доставки
|
|
после его даты — события поверх снапшота, и состояние всегда пересобираемо
|
|
свёрткой. Значит доставки должны жить **до следующего проверенного экспорта**,
|
|
а не фиксированные две недели: иначе между концом ретеншена и датой снапшота
|
|
образуется дыра в журнале, и пересобрать этот отрезок будет нечем.
|
|
|
|
Цена измерена: ~23 МБ архива в сутки, то есть ~2 ГБ за квартал между
|
|
экспортами. Дёшево за возможность пересобрать что угодно.
|
|
|
|
Отдельное исключение: `stateOfMind` в экспорт не попадает вовсе (проверено на
|
|
свежем архиве). Для него доставки — не хвост журнала, а единственный источник,
|
|
и под общее правило удаления он не подпадает.
|
|
|
|
Включать **после** того, как разбор устоится и пересборка докажет, что
|
|
хранилище действительно восстанавливается: иначе страховка исчезнет раньше, чем
|
|
перестанет быть нужна.
|
|
|
|
Готово, когда удаляются только доставки старше последнего проверенного
|
|
экспорта, записи `stateOfMind` не трогаются вовсе, а `/stats` показывает
|
|
глубину архива и дату снапшота, до которой он подрезан.
|
|
|