# NODA1 Incident Log --- ## INC-2026-002 | 2026-02-27 | Gateway Workers + SenpAI + facts/upsert **Severity:** SEV-1 (всі агенти не відповідали користувачам) **Status:** RESOLVED **Duration:** ~3 дні (з 2026-02-21 09:55 по 2026-02-27 23:15) ### Summary Після апгрейду Redis до 8.6.1 та ряду змін у коді gateway два воркери зависли, SenpAI повертав 500, а `facts/upsert` падав з `InvalidColumnReferenceError`. В сукупності агенти не відповідали у Telegram. ### Root Causes (3 незалежні) | # | Компонент | Причина | |---|-----------|---------| | 1 | `dagi-gateway-worker-node1` | Після Redis 8.6.1 upgrade старі TCP-сокети async-клієнта → `ReadOnlyError` у `brpop()` | | 2 | `dagi-gateway-reminder-worker-node1` | Та сама проблема застарілих з'єднань після Redis upgrade | | 3 | `SenpAI webhook` → Router | `.env`: `ROUTER_URL=http://dagi-staging-router:8000` (staging!) замість `http://router:8000` | | 4 | `memory-service /facts/upsert` | `ensure_facts_table()` DDL застарілий: `UNIQUE(user_id, team_id, fact_key)` → asyncpg кешував старий prepared statement без `agent_id`; ON CONFLICT не знаходив matching constraint | | 5 | `get_doc_context()` | Підпис функції не мав `agent_id=None` параметра, хоча `http_api.py` передавав його | ### Timeline | Час (UTC+1) | Подія | |-------------|-------| | 2026-02-21 09:55 | Остання успішна обробка (agromatrix) | | 2026-02-26 13:09 | Початок `ReadOnlyError` у gateway-worker (Redis upgrade) | | 2026-02-27 17:02 | Поновлення помилок worker після перезапусків | | 2026-02-27 19:49 | Повна блокада gateway-worker (останній restart) | | 2026-02-27 22:46 | Перезапуск dagi-gateway-worker-node1 → стабільний | | 2026-02-27 22:47 | Перезапуск dagi-gateway-reminder-worker-node1 → стабільний | | 2026-02-28 00:01 | Виправлено ensure_facts_table() → memory-service rebuilt | | 2026-02-28 00:05 | Виправлено ROUTER_URL, get_doc_context() → gateway rebuilt | | 2026-02-28 00:15 | Всі 14 агентів HTTP 200 ✓ | ### Fixes Applied (на сервері /opt/microdao-daarion) ``` 1. docker restart dagi-gateway-worker-node1 dagi-gateway-reminder-worker-node1 2. services/memory-service/app/database.py: - ensure_facts_table() замінено на noop (таблиця управляється міграціями) - Скопійовано відсутні файли: integration_endpoints.py, integrations.py, voice_endpoints.py 3. gateway-bot/services/doc_service.py: - get_doc_context(session_id: str) → get_doc_context(session_id: str, agent_id: str = None) 4. .env: - ROUTER_URL=http://dagi-staging-router:8000 → ROUTER_URL=http://router:8000 5. Rebuild + restart: memory-service, gateway, gateway-worker, gateway-reminder-worker ``` ### Verification ``` All 14 agents HTTP 200: ✓ senpai ✓ helion ✓ nutra ✓ daarwizz ✓ greenfood ✓ agromatrix ✓ alateya ✓ druid ✓ clan ✓ eonarch ✓ oneok ✓ soul ✓ yaromir ✓ sofiia facts/upsert: {"status":"ok"} Gateway: healthy, 14 agents ``` ### Action Items (TODO) - [ ] Після Redis upgrade — завжди перезапускати workers (додати в runbook) - [ ] Виправити `ensure_facts_table()` в коді репозиторію (локально) - [ ] Виправити `get_doc_context()` сигнатуру в локальному репо - [ ] Виправити `.env` в репозиторії (або `.env.example`) — прибрати staging router URL - [ ] Додати liveness probe для workers: exit(1) при повторних ReadOnlyError - [ ] Алерт: "No messages processed for X minutes" --- --- ## INC-2026-003 | 2026-02-28 | Ollama resource crash → всі агенти 503 **Severity:** SEV-1 (всі агенти не відповідали у Telegram) **Status:** RESOLVED **Duration:** ~8 годин (з 07:53 по ~16:00 UTC+1) ### Root Cause Ollama впала з помилкою `model runner has unexpectedly stopped, this may be due to resource limitations`. Модель `qwen3:8b` (27.8B params, ~17GB) перевищила ресурси сервера під навантаженням → Router отримував `500` від Ollama → повертав `503` клієнту. Всі агенти були налаштовані на `provider: ollama`. ### Fix Applied Переключено всі агенти в `router-config.yml` з `qwen3_*_8b` профілів → `cloud_deepseek`: - 14 агентів тепер використовують `deepseek-chat` через DeepSeek API - Router перезапущено для підхвачення нового конфігу ### Verification ``` helion: 🌐 Trying DEEPSEEK API → HTTP 200, 15222 tokens All 14 agents: ✓ HTTP 200 ``` ### Action Items - [ ] Backup `router-config.yml.bak_20260228` → зберегти в репо - [ ] Розглянути переведення Ollama на меншу модель (smollm2:135m або qwen3-vl:8b) для vision-задач - [ ] Додати fallback в Router: якщо Ollama 500 → автоматично cloud_deepseek --- ## INC-2026-001 | (попередні інциденти) _(додати при потребі)_