- роадмап отвечает «что умеет и чего не умеет»: PLAN.md → ROADMAP.md, четыре канонические секции, достигнутые звенья строками в «Готово», цели переформулированы возможностями приложения - задачи: род работы и «Затрагивает» набору спринта, 34 заголовка в форму действия, «Завершение» целей перечнями со ссылкой из каждой задачи - вычитка проходами task-form и doc-wording, починены протухшие факты в README, паспорте и review.md
47 lines
3.4 KiB
Markdown
47 lines
3.4 KiB
Markdown
# Хранить счётчики слияния вне логов
|
||
|
||
- **Секция:** Инфра
|
||
- **Зачем:** Единственный след несравнимых наборов — строка WARN в docker-логе с ротацией 3×10 МБ: событие может произойти и не оставить ничего
|
||
- **Теги:** goal:observability
|
||
|
||
Вынуто ревью кода задачи `pravilo-sliyaniya-tochek` (профиль `deep`, проход
|
||
негативного пространства, подтверждено эксплуатационным).
|
||
|
||
Двигает строку «Завершения» цели: «Счётчики слияния переживают ротацию логов».
|
||
|
||
## Что не так
|
||
|
||
Решение не реализовывать объединение полей при несравнимых наборах стоит на
|
||
одном аргументе: «вместо реализации — счётчик, который скажет, если событие
|
||
наступит». Сказать он может только в одну сторону — строкой `WARN` в stdout
|
||
контейнера.
|
||
|
||
`docker-compose.yml` держит `json-file` с `max-size: 10m, max-file: 3`. При
|
||
~288 доставках в сутки это порядка кварталов, а ожидаемая частота события —
|
||
«ни разу за 99 доставок». Штатный сценарий: событие происходит ночью, логи
|
||
никто не грепал в этот месяц, строка уходит в ротацию, и в системе не остаётся
|
||
ни одного свидетельства. Ни колонки в `delivery`, ни `/stats`, ни файла.
|
||
|
||
То есть обещание «событие будет видно, а не додумано» на практике не
|
||
выполняется.
|
||
|
||
## Что делать
|
||
|
||
Положить `overwrites` и `incomparable` в строку `delivery` — миграция плюс
|
||
запись в `FinishParse`, которая эту строку всё равно трогает. Тогда «было ли
|
||
когда-нибудь несравнимо» это один `SELECT`, живущий столько же, сколько
|
||
витрина.
|
||
|
||
Заодно стоит решить смежное, найденное тем же проходом: сегодня в логе
|
||
неразличимы «правило полноты сработало» и «всё ушло в тай-брейк». Два разных
|
||
состояния мира дают одинаковую картину `overwrites=N, incomparable=0`, то есть
|
||
отказ правила выглядит как здоровая работа. Отдельный счётчик исходов
|
||
`Superset`/`Subset` рядом с `Overwrites` это закрывает.
|
||
|
||
## Связано
|
||
|
||
- [stats-endpoint](stats-endpoint.md) — то же наблюдение нужно и там.
|
||
- [rod-agregacii-i-katalog](rod-agregacii-i-katalog.md) — придёт к вопросу о
|
||
тай-брейке и потребует эксплуатационной истории, которой без этой задачи не
|
||
будет: мерить придётся снова по архиву, а он к тому моменту подрезан.
|