хранилище описано как свёртка по журналу событий
- экспорт Apple это снапшот всей истории, доставки после его даты — события поверх; состояние пересобирается как import(экспорт) + replay(доставки) - отсюда ретеншен архива меняется с произвольных 14 дней на «до следующего проверенного экспорта» (~2 ГБ за квартал, измерено), а свёртка обязана быть детерминированной — воспроизведение строго по received_at - названы границы модели: stateOfMind в экспорт не попадает вовсе, а верхние слои за периоды с удалёнными доставками не воскресают и досчитываться не должны — каталог обязан говорить это честно
This commit is contained in:
@@ -24,9 +24,15 @@ Module path — `git.vakhrushev.me/av/healthlog`.
|
||||
## Инварианты
|
||||
|
||||
- **Точки хранятся дословно.** Часовой объект держит точки ровно в том виде,
|
||||
в каком их прислал HAE. На этом инварианте держится всё остальное: сырой
|
||||
архив живёт лишь 14 дней, дальше истина — сами объекты. Начнём что-то
|
||||
отбрасывать внутри точки — срок хранения архива станет сроком жизни данных.
|
||||
в каком их прислал HAE. Начнём что-то отбрасывать внутри точки — потеряем
|
||||
безвозвратно.
|
||||
- **Хранилище — свёртка по журналу.** Экспорт Apple это снапшот всей истории,
|
||||
доставки HAE после его даты — события поверх. Состояние всегда пересобираемо:
|
||||
`import(экспорт) + replay(доставки по received_at)`. Поэтому сырой архив
|
||||
живёт до следующего проверенного экспорта (~2 ГБ за квартал), а свёртка
|
||||
обязана быть детерминированной. Что не восстанавливается — `stateOfMind`
|
||||
(его в экспорте нет) и верхние слои за периоды с удалёнными доставками;
|
||||
каталог обязан говорить об этом честно, а не досчитывать молча.
|
||||
- **Сохранили — значит приняли.** Код ответа отражает доставку, а не разбор:
|
||||
битый JSON — 400, непонятое содержимое — 200.
|
||||
- **Ничего не теряем молча.** Идентичность — координаты
|
||||
@@ -82,7 +88,8 @@ Module path — `git.vakhrushev.me/av/healthlog`.
|
||||
запускаются.
|
||||
|
||||
**Поток не останавливается.** Телефон шлёт непрерывно и молча. Сломанный приём,
|
||||
оставленный работать, теряет данные необратимо — сырой архив живёт 14 дней.
|
||||
оставленный работать, теряет данные необратимо: доставка, не попавшая в
|
||||
архив, в журнал не попадает вовсе — телефон её не перешлёт.
|
||||
Ничего из `./data` не попадает ни в git, ни в логи выше `DEBUG`, ни в вывод
|
||||
агента.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user