Files
healthlog/docs/tasks/items/delivery-header-limits.md
T
avandClaude Opus 5 a53d0f0f2f задачи: мета переехала в блок, поле «Хук» стало «Зачем»
49 файлов, миграция сделана командой tasks.py check --fix — той самой, ради
которой в скрипте оставлена читаемость старой формы. Побочно тот же прогон
проставил тег decomposed целям, у которых есть задачи: это его штатная работа.

check после миграции зелёный, индексы согласованы.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-03 17:31:29 +03:00

2.5 KiB
Raw Blame History

Предел на размер и число заголовков доставки

  • Секция: ядро
  • Зачем: MaxHeaderBytes не задан, в базу заголовки пишутся целиком: дефект спит до деплоя, а просыпается вместе с ним
  • Теги: goal:limits-and-load

У тела доставки предел есть (max_body), у заголовков — нет ни одного: MaxHeaderBytes серверу не задан, а delivery.headers пишутся в базу целиком, сколько бы их ни пришло. В лог они с недавних пор обрезаются, в базу — нет.

Сегодня отправитель один и он свой, поэтому дефект спит. Просыпается он вместе с деплоем: у приёма, торчащего наружу, отправитель перестаёт быть своим по определению. Оценка сверху при доставке раз в пять минут — сотни мегабайт в сутки в таблице, которую никто не подчищает; а растёт вместе с ней и стоимость пересборки, которая учёт материализует целиком.

Чинится дёшево и в двух местах сразу: MaxHeaderBytes у http.Server и предел на то, что уходит в колонку. Разумно делать одной правкой с управлением токенами — оба пункта про одно и то же: приём перестаёт доверять тому, кто с ним говорит.

Осторожно: это путь приёма, а доставка, не попавшая в архив, теряется навсегда. Отказ по превышению обязан наступать до записи тела, а не после, и быть отличим в логе от отказа обстоятельств.

Готово, когда доставка с заведомо раздутыми заголовками получает внятный отказ, не оставляя следа в базе, а обычная доставка проходит как раньше.

Связано: internal/httpapi, internal/ingest, docs/architecture.md → «Приём».