From 59ed2d59d00b7784eab9fa26a165708b8b09956e Mon Sep 17 00:00:00 2001 From: Repinoid Date: Wed, 7 Oct 2026 07:47:36 +0300 Subject: [PATCH] =?UTF-8?q?doc(HISTORY):=20=D0=BF.2=20=D1=81=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D0=BD;=20=D0=BF.4=20=E2=80=94=20=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D1=80=D1=8B=D1=82=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B7=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=D0=BA=D0=B0=20(NOT=20NULL=20vs=20nullable+=D1=83=D0=B4?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D1=82=D1=8C=20legacy)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HISTORY/2026-10-07-session-log.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/HISTORY/2026-10-07-session-log.md b/HISTORY/2026-10-07-session-log.md index 8610576..e435404 100644 --- a/HISTORY/2026-10-07-session-log.md +++ b/HISTORY/2026-10-07-session-log.md @@ -129,5 +129,24 @@ - Закрыто замеченное залипание: один «ядовитый» payload больше не зацикливает flush namespace навсегда. +### Реализовано (п.2) — `ts` = время приёма (`a386d22`) +- `iot_telemetry_store.go`: `telemetryInsert` получил `ts`; `flushTenant` пишет + `ts` явно из `ReceivedAt` (серверное время приёма, ставит bridge), а не `now()` + БД. Zero → `now()`. Схема не менялась (существующая колонка `ts`). +- Callers обновлены: `consumer/processor.go` (парсит `ReceivedAt`), legacy + `cmd/sqs-consumer`. + +### ОТКРЫТО (п.4) — `message_id NOT NULL` / дедуп legacy +- Проблема: `UNIQUE(device_id, message_id)` не ловит NULL → legacy + `cmd/sqs-consumer` (передаёт `""`) не дедуплицируется; возможны дубли. +- Развилка, где я не уверен (ОСТАНОВКА, без догадок): + 1. Сделать `message_id NOT NULL`: нужна миграция (backfill `legacy-'||id` + + `SET NOT NULL`). Безопасна, но legacy-консьюмер тогда должен передавать + SQS `MessageId` (иначе его строки не пройдут NOT NULL и будут «дропнуты» + как permanent). Legacy и так идёт под удаление (P2-14). + 2. Оставить nullable, задокументировать отсутствие дедупа для legacy и + удалить legacy (P2-14). Минимальный риск, но формально «не NOT NULL». +- Нужно решение владельца. + ## Проверки - `go build ./...` и `go vet ./internal/...` — зелёные на каждом шаге.