doc(HISTORY): реализация п.1 (retryable/permanent) и п.3 (DLQ) зафиксирована

This commit is contained in:
Repinoid
2026-10-07 07:41:22 +03:00
parent 4ee0fc3b61
commit f2768568d3
+17 -1
View File
@@ -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/...` — зелёные на каждом шаге.