110 lines
5.2 KiB
Markdown
110 lines
5.2 KiB
Markdown
# Thinking Log — 2026-04-08/09
|
||
# Agent: GitHub Copilot (Claude Sonnet 4.6)
|
||
|
||
---
|
||
|
||
## Сессия 2026-04-08 — SQS Operator UI fixes + v0.1.8–v0.1.12
|
||
|
||
### Контекст на старте
|
||
- v0.1.9 задеплоен, UI HTTP 200, но визуально зависает (shimmer)
|
||
- Стресс-тест (30 мин) только что завершён: 12501 итераций, 0 инфра-ошибок
|
||
|
||
---
|
||
|
||
## Расследование "UI зависает"
|
||
|
||
**Гипотеза 1:** Socket overflow (как было до v0.1.9) — проверил логи, нет.
|
||
|
||
**Факт:** `ListQueues` вернул 4912 очередей `no-such-queue-*`. Причина: стресс-тест с `autoCreateQueues=true` создавал несуществующие очереди (тест error-injection). ElasticMQ при `autoCreateQueues=true` создаёт их все. UI грузил 4912 очередей → зависал.
|
||
|
||
**Решение:** Удалить H2 базу данных (rm /data/elasticmq.mv.db), рестарт пода. Очереди обнуляются.
|
||
|
||
**Урок:** Стресс-тест с `error-injection` паттерном + `autoCreateQueues=true` = накапливает мусорные очереди. Нужно разделять: либо `autoCreateQueues=false` в стресс-тесте, либо чистить базу после.
|
||
|
||
---
|
||
|
||
## Баг "503 после self-healing"
|
||
|
||
**Проблема:** После SH02/SH05 (удаление Service) сервис пересоздавался без порта 3000 для UI.
|
||
|
||
**Root cause:** `ensureService` всегда создавал только `sqs-http:9324`. Порт UI (`ui-http:3000`) добавлялся только при первичном создании через условную логику, которой не было.
|
||
|
||
**Фикс (v0.1.11):** В `ensureService` — func literal для Ports:
|
||
```go
|
||
Ports: func() []corev1.ServicePort {
|
||
ports := []corev1.ServicePort{ {sqs-http} }
|
||
if qs.Spec.EnableUI {
|
||
ports = append(ports, {ui-http:3000})
|
||
}
|
||
return ports
|
||
}(),
|
||
```
|
||
|
||
---
|
||
|
||
## Баг "диск 100%"
|
||
|
||
**Обнаружен:** `git status` вернул `sha1 file write error. Out of diskspace`.
|
||
|
||
**Причина:** 201 docker image (53GB), 99% reclaimable — накопились за все версии сборок.
|
||
|
||
**Решение:** `docker system prune -af --volumes` — освободило 54GB.
|
||
|
||
**Опасность:** При 100% диска sshfs-запись ОБНУЛЯЕТ файл вместо ошибки. `queueservice_controller.go` был обнулён (0 байт). Восстановлен через `git checkout HEAD -- ...`.
|
||
|
||
**Урок:** Регулярно чистить docker images. Проверять диск перед крупными операциями.
|
||
|
||
---
|
||
|
||
## Баг "404 на /queues/xxx"
|
||
|
||
**Проблема:** Next.js app в elasticmq-ui имеет маршруты:
|
||
- `/` — список очередей
|
||
- `/queues/[name]` — детали очереди
|
||
|
||
Ingress знал только `/sqs-ui/test001/` и `/_next/`. При клике на очередь в UI браузер переходил на `/queues/1234` → nginx 404.
|
||
|
||
**Root cause:** Next.js собран с `basePath=""` — внутренние переходы идут по абсолютным путям без prefix.
|
||
|
||
**Решение (v0.1.12):** Новая функция `ensureIngressUIQueues` — третий ingress `/queues` PathTypePrefix → UI service port 3000. Без rewrite-target (Next.js сам обрабатывает `/queues/[name]`).
|
||
|
||
**Добавлено в 3 места контроллера:**
|
||
1. Вызов `ensureIngressUIQueues` в reconcile (рядом с `ensureIngressUIAssets`)
|
||
2. `checkResources` — self-healing отслеживает `sqs-ing-ui-queues-{tenantID}`
|
||
3. `handleDeletion` — очищает ingress при удалении тенанта
|
||
|
||
---
|
||
|
||
## H2 база и FILE_LOCK (v0.1.10)
|
||
|
||
**Проблема:** После `kubectl rollout restart` JVM убивается принудительно, H2 lock не снимается. При следующем старте: `Failed to restore persisted queues` — SendMessage зависает.
|
||
|
||
**Решение:**
|
||
1. JDBC URL: добавить `FILE_LOCK=NO` (игнорирует stale lock)
|
||
2. При старте H2 уже инициализирована чисто
|
||
|
||
**Место:** `elasticmq_config.go` → `GenerateConfig()` → HOCON `persistence.jdbc.url`
|
||
|
||
---
|
||
|
||
## Версии и коммиты
|
||
|
||
| Версия | Коммит | Описание |
|
||
|--------|--------|----------|
|
||
| v0.1.8 | 657fc33 | `/_next/` assets ingress |
|
||
| v0.1.9 | 7ea7e9b | SQS_ENDPOINT с context-path |
|
||
| v0.1.10 | — | FILE_LOCK=NO для H2, не отдельный коммит |
|
||
| v0.1.11 | a04d720 | ensureService UI port + FILE_LOCK=NO |
|
||
| v0.1.12 | 3adc0d8 | ingress /queues/* → elasticmq-ui |
|
||
|
||
---
|
||
|
||
## Итог
|
||
|
||
SQS Operator с Web UI полностью функционален:
|
||
- `/sqs-ui/test001/` — главная страница UI ✅
|
||
- `/_next/` — статические ресурсы Next.js ✅
|
||
- `/queues/xxx` — навигация по очередям ✅
|
||
- `/sqs/test001` — SQS API ✅
|
||
- Self-healing: все 3 ingress + service с правильными портами ✅
|