5.2 KiB
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:
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 места контроллера:
- Вызов
ensureIngressUIQueuesв reconcile (рядом сensureIngressUIAssets) checkResources— self-healing отслеживаетsqs-ing-ui-queues-{tenantID}handleDeletion— очищает ingress при удалении тенанта
H2 база и FILE_LOCK (v0.1.10)
Проблема: После kubectl rollout restart JVM убивается принудительно, H2 lock не снимается. При следующем старте: Failed to restore persisted queues — SendMessage зависает.
Решение:
- JDBC URL: добавить
FILE_LOCK=NO(игнорирует stale lock) - При старте 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 с правильными портами ✅