diff --git a/docs/architecture_weak_spots.md b/docs/architecture_weak_spots.md index 32d01a1..a1f52b8 100644 --- a/docs/architecture_weak_spots.md +++ b/docs/architecture_weak_spots.md @@ -70,6 +70,13 @@ **Почему блокер:** При росте нагрузки количество соединений к PostgreSQL утраивается. Нет единого менеджера пула. **Направление:** Вынести `asyncpg.Pool` в отдельный `Database` сервис. Передавать `pool` конструктором в сторы. +**Решение 2026-05-18:** +- Создан `navi/db.py::Database` — единый менеджер пула с lazy-инициализацией +- `KvStore`, `PgSessionStore`, `MemoryStore`, `RecallScheduler` теперь принимают `pool` в `__init__` вместо `dsn` +- `AppContainer` хранит `database: Database`, `shutdown()` закрывает один пул +- `create_container()` создаёт один пул и передаёт его всем сторам +- Lazy-DDL в каждом сторе (через `_initialized` + `_lock`) сохранён для изоляции схем + --- ## 6. Кросс-реестровый патчинг в `registry.py` @@ -128,7 +135,7 @@ - [x] 2. Глобальные синглтоны `deps.py` — replaced with AppContainer + lifespan - [x] 3. WebSocket handler содержит бизнес-логику — extracted AgentSessionOrchestrator - [x] 4. Mutable global `settings` — frozen Settings + mode="before" validator -- [ ] 5. Дублирование пулов PostgreSQL +- [x] 5. Дублирование пулов PostgreSQL — unified Database service, pool passed to constructors - [ ] 6. Кросс-реестровый патчинг - [ ] 7. DRY-нарушение `tool_executor.py` - [ ] 8. ContextVar как скрытые зависимости