Repinoid
4d4ebb3a7a
chore: update ignore rules
2026-10-27 14:08:53 +03:00
Repinoid
716f931544
docs(history): деплой на 213, smoke 22/22, образы в Gitea
2026-10-11 10:05:51 +03:00
Repinoid
7860c7c3f2
build: registry → gitea.services.ngcloud.ru/nail (вместо Docker Hub)
2026-10-11 09:51:08 +03:00
Repinoid
4e648f690e
docs(history): зафиксировать решения по оставленным пунктам (34/37/28=A)
2026-10-11 09:19:50 +03:00
Repinoid
b864cab5be
docs(history): внешнее ревью Claude Sonnet и исправления 2026-10-11
2026-10-11 09:14:12 +03:00
Repinoid
f99f49bd8e
persistence: порядковая нумерация async SaveMessage (старое состояние не перезапишет новое) + очистка при удалении
2026-10-11 09:12:42 +03:00
Repinoid
fa47026400
SQS: dedup внутри цикла SendMessageBatch (NextSequenceNumber только для не-дубликата, откат dedup при ошибке персиста, per-entry DelaySeconds)
2026-10-11 08:58:30 +03:00
Repinoid
a08d58cba1
SQS: DeletePersist возвращает ошибку (500 при сбое Redis), fail-fast загрузка очередей, дефолты атрибутов при CreateQueue, защита SqsErrors от nil-deref
2026-10-11 08:56:49 +03:00
Repinoid
5284a56f7a
SQS: delete batch ключ по Id, валидация DelaySeconds 0-900
2026-10-11 08:54:21 +03:00
Repinoid
120a44cb6a
SQS: sendMessageToQueue лимиты+sync persist, Reset чистит FIFO, nil-map Duplicates, ApproximateReceiveCount без +1, billing.Close после Shutdown, запрет ':' в access_key, recover в PeriodicTasks
2026-10-11 08:54:21 +03:00
Repinoid
e8e0879914
SQS: ValidateQueueName в createTenantQueue, JWT требует exp, leader сбрасывает лидерство при длительном сбое refresh
2026-10-11 08:50:12 +03:00
Repinoid
582ad4a832
auth: сверять X-Amz-Content-Sha256 с фактическим хэшем тела
2026-10-11 08:35:57 +03:00
Repinoid
0512ea2389
billing: потокобезопасный db + корректный Close (остановка воркера до db.Close)
2026-10-11 08:35:56 +03:00
Repinoid
dd9acb3705
gosqs: персистить перенос в DLQ (SaveMessage в DLQ + DeleteMessagePersist исходной)
2026-10-11 08:34:01 +03:00
Repinoid
e720f1ffcb
gosqs: запретить self/cyclic RedrivePolicy (иначе deadlock при переносе в DLQ)
2026-10-11 08:34:01 +03:00
Repinoid
b179ec6de7
persistence: Client → atomic.Pointer (устранение data race при reconnect)
2026-10-11 08:30:58 +03:00
Repinoid
9e0ad2c0a4
persistence: DeleteTenant чистит и tenant_ak (отзыв access key)
2026-10-11 08:27:22 +03:00
Repinoid
09fe0f7e66
config: разблокировать SyncQueues при ошибке setQueueRedrivePolicy
2026-10-11 08:26:16 +03:00
Repinoid
24dbdaa766
admin: jwtMiddleware сравнивает точный путь /ui/api/auth (не суффикс /auth)
2026-10-11 08:26:16 +03:00
Repinoid
84ef8f1fc9
docs(history): AWS-compatibility work for Terraform provider (2.20)
2026-10-10 17:31:02 +03:00
Repinoid
ccd070200a
fix(fifo): ContentBasedDeduplication + dedup window survives delete (AWS semantics)
...
- ContentBasedDeduplication=true: dedupId computed from body SHA-256 when not provided
- do NOT drop dedupId on message delete: AWS keeps the 5-minute window regardless
(previously re-send after delete delivered the message again)
- utils: GetSHA256Hash
2026-10-10 17:30:02 +03:00
Repinoid
9f1242aca3
feat(aws-compat): queue attributes for Terraform (FifoQueue, ContentBasedDeduplication, Policy, real timestamps)
...
- GetQueueAttributes now returns FifoQueue, ContentBasedDeduplication, Policy and
real Created/LastModifiedTimestamp (previously missing/stubbed '0000000000')
- Queue: add CreatedAt, LastModifiedAt, Policy, ContentBasedDeduplication
- parse FifoQueue/ContentBasedDeduplication in both protocols (StringToBool)
- Policy/RedriveAllowPolicy: normalize JSON-string form to object (JSON protocol
sent them as string -> SetQueueAttributes failed with InvalidParameterValue)
- persistence: keep new fields in meta DTO + backfill empty timestamps on load
- FIFO dedup is inherent: IsDuplicate/InitDuplicatation gate on IsFIFO only
(env flag EnableDuplicates=false disabled dedup for all FIFO queues)
2026-10-10 17:29:58 +03:00
Repinoid
22fa2b162a
docs(history): deploy of review fixes to VM 213 + functional verification of empty-ReceiptHandle fix
2026-10-10 17:14:14 +03:00
Repinoid
bb6dbfd349
docs(history): record review fixes applied (2.18) and remaining work
2026-10-10 17:08:28 +03:00
Repinoid
4e2b462379
fix(startup): fail-fast when REDIS_ADDR set but Redis unreachable
2026-10-10 17:08:02 +03:00
Repinoid
e21abb8f13
fix(security): JWT validate against prod gateway only + cap grace renewal
...
- jwt: drop test/dev gateway from nubesAPIEndpoints (test-stand token was accepted as prod)
- cache: grace bounded by graceDeadline from last successful validation (no more indefinite renewal)
2026-10-10 17:07:57 +03:00
Repinoid
521e3d85d0
fix(concurrency,durability): address Opus review critical findings
...
- create_queue: SaveQueue under per-queue lock, not global SyncQueues.Lock
(fixes fatal concurrent map iteration/write on idempotent CreateQueue of existing FIFO queue)
- delete_message_batch: reject empty ReceiptHandle (JSON protocol bypass deleted all unreceived msgs)
- send_message/send_message_batch: register dedupId only after successful persist
(retry with same dedupId no longer returns 200 without persisting)
- memory_guard: global HeapAlloc guard (SHARED_SQS_MAX_HEAP_MB, 0=off) in send paths
2026-10-10 17:07:52 +03:00
Repinoid
ea7b539d19
docs(review): Opus code-review report verbatim + critical analysis (confirmed 🔴 1/ 🔴 5/ 🔴 8, open JWT and byte-limit decisions)
2026-10-10 17:03:20 +03:00
Repinoid
073977286f
docs(history): log Step 3 HA implementation, measurements and open questions
2026-10-10 16:32:21 +03:00
Repinoid
27fa2e6ae3
docs(ha): detailed active/passive HA design, measurements and migration path to option A
2026-10-10 16:30:19 +03:00
Repinoid
d7b3c653e0
feat(ha): leader-election via Redis lock + /ready endpoint (active/passive, off by default)
...
- app/leader: Elector (SETNX lock + PEXPIRE heartbeat via Lua, IsLeader)
- app/persistence: TryAcquireLock/RefreshLock/ReleaseLock (no-op when Redis absent)
- app/router: /ready -> 200 if ReadyFunc nil/true, else 503 (both planes)
- app/cmd: --leader-election / SHARED_SQS_LEADER_ELECTION, --leader-ttl, --leader-interval;
ReadyFunc wired only when enabled, lock released on graceful shutdown
- default OFF: single-instance behaviour unchanged
2026-10-10 16:30:15 +03:00
Repinoid
607aebb8ef
doc: durability SendMessageBatch + billing (предусмотрен, выключен)
2026-10-10 16:19:54 +03:00
Repinoid
a341508b6d
fix(batch): SendMessageBatch пишет в Redis синхронно (как SendMessage) + не персистит дубли; SaveMessagesSync
2026-10-10 16:18:54 +03:00
Repinoid
064ed6e5d7
doc: Шаг 3 — дизайн выноса состояния + журнал (read-through тенантов)
2026-10-10 16:10:04 +03:00
Repinoid
8e22bc4b9b
feat(step3): тенанты read-through Redis (индекс accessKey→tenant, fallback в auth, бэкфилл на старте)
2026-10-10 16:09:52 +03:00
Repinoid
1862f058be
doc: Шаг 2 — разбиение data-plane/control-plane
2026-10-10 16:02:02 +03:00
Repinoid
a26e6da8b7
feat(split): data-plane (публичный SQS API) и control-plane (админка/метрики/UI на localhost) — Шаг 2
2026-10-10 16:00:57 +03:00
Repinoid
a66b908689
doc: прод-хардненинг (seed off, новый admin-token, logrotate)
2026-10-10 15:58:37 +03:00
Repinoid
c4cc3c80ea
doc: systemd + локальный Redis (устойчивость), дефекты seed, грабли
2026-10-10 14:24:50 +03:00
Repinoid
f7fe2f26e5
fix(seed): идемпотентность (не плодить демо-тенанта) + персистентность очередей/сообщений в Redis
2026-10-10 14:23:34 +03:00
Repinoid
cf369736a0
doc: QueueUrl исправлен (ExternalURLBase) + ошибки по пути; дефект снят
2026-10-10 14:04:04 +03:00
Repinoid
c011099224
fix(queue-url): seed.go через gosqs.TenantQueueURL; env-override в applyEnvironmentDefaults (работает без goaws.yaml)
2026-10-10 14:03:44 +03:00
Repinoid
f0e7cc905d
feat(queue-url): ExternalURLBase для публичного QueueUrl (+ env SHARED_SQS_EXTERNAL_URL_BASE), тест
2026-10-10 13:44:22 +03:00
Repinoid
ee5503f9ac
doc: журнал сессии 2026-10-10 + справочник по публичной точке на ВМ (TLS, замеры, ошибки)
2026-10-10 13:42:22 +03:00
Repinoid
6800d1abf3
doc: убрать kube5s.ru (умирающий домен) из актуального migration-to-managed
2026-10-10 13:31:42 +03:00
Repinoid
7a2a7e1610
doc: мануал — уточнена ссылка на tenantQueueKey
2026-10-08 17:33:41 +03:00
Repinoid
3b0815155a
doc: мануал для нового чата — состояние, решения, план шагов (ВМ -> разбиение -> хранилище), команды, грабли, карта кода
2026-10-08 17:33:03 +03:00
Repinoid
39b162439f
doc: архитектурный анализ — публичный SQS, обход через ВМ, модульный монолит (data-plane/control-plane)
...
- SQS должен быть публичным (как AWS SQS/YMQ) -> внешний доступ обязателен;
- стратегия сети: сейчас публичная точка на ВМ (обход managed-шлюза), позже —
девопсам чинить шлюз с доказательствами;
- 'без монолитов' уточнено: модульный монолит, критерии разбиения, data-plane vs
control-plane, billing/metrics/UI — модули;
- ограничение: in-memory stateful-ядро = одиночка, вынос хранилища важнее;
- IoT: внешний MQTT-канал неизбежен, крупные тела мимо шлюза;
- открытые вопросы.
2026-10-08 17:09:21 +03:00
Repinoid
b99905469d
doc(HANDOFF): тикет отменён — болезнь платформы, решение через обход (ссылки на разборы)
2026-10-08 16:51:58 +03:00
Repinoid
d8bdea75f3
doc: разбор применимости обхода drhider к SQS (прокси на ВМ, pull вместо push)
...
- почему схему 1:1 скопировать нельзя (клиенты на AWS SDK, синхронный протокол) ->
аналог: прозрачный прокси на ВМ;
- условия: сохранение Host для SigV4 (auth_middleware.go:315-317), внешние QueueUrl
(сейчас http://region.host:port из goaws.yaml, tenant_helpers.go:29-37),
TLS, доступ ВМ->кластер, отключение буферизации;
- 4 варианта с оценкой (прокси / настройки ingress / MTU / ретраи) и таблица
'что какой лечит';
- обязательные замеры до решения (раздел 5) и открытые вопросы.
2026-10-08 16:51:45 +03:00