From f2768568d36efcec1bd154bb201a7b0a4082be3e Mon Sep 17 00:00:00 2001 From: Repinoid Date: Wed, 7 Oct 2026 07:41:22 +0300 Subject: [PATCH] =?UTF-8?q?doc(HISTORY):=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF.1=20(retryable/permanen?= =?UTF-8?q?t)=20=D0=B8=20=D0=BF.3=20(DLQ)=20=D0=B7=D0=B0=D1=84=D0=B8=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HISTORY/2026-10-07-session-log.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/HISTORY/2026-10-07-session-log.md b/HISTORY/2026-10-07-session-log.md index 6bc10ee..8610576 100644 --- a/HISTORY/2026-10-07-session-log.md +++ b/HISTORY/2026-10-07-session-log.md @@ -111,7 +111,23 @@ permanent (нарушение constraint → не вешать namespace, выброс в лог/DLQ). ### Статус -Реализация п.1 (разделение ошибок flush) и п.3 (ббитые → DLQ) — см. ниже. +Реализация п.1 (разделение ошибок flush) и п.3 (битые → DLQ) — см. ниже. + +### Реализовано (п.3) — битые envelope → DLQ (`42f0045`) +- `processor.go`: `processTelemetry` возвращает sentinel `errInvalidEnvelope` + при битом JSON (вместо молчаливого nil, из-за которого мусор подтверждался и + исчезал навсегда). +- `consumer.go`: при `errInvalidEnvelope` тело кладётся в DLQ + (`SQS_DLQ_NAME`, дефолт `iot-telemetry-dlq`) и основное сообщение подтверждается; + без DLQ — только лог (НЕ подтверждаем). Реальные ошибки PG — по-прежнему ретрай. +- `config.go`/`defaults.go`: добавлен `SQSDLQName` + `DefaultSQSDLQName`. + +### Реализовано (п.1) — разделение retryable/permanent ошибок flush (`f1a7266`) +- `iot_telemetry_store.go`: `isRetryableFlushErr` — `'08'` (connection) и + 57P01/02/03 (shutdown/crash) retryable (возврат в буфер); `'22'` (data exception) + и `'23'` (integrity violation) permanent (батч выбрасывается с логом, НЕ в буфер). +- Закрыто замеченное залипание: один «ядовитый» payload больше не зацикливает + flush namespace навсегда. ## Проверки - `go build ./...` и `go vet ./internal/...` — зелёные на каждом шаге.