4.3 KiB
4.3 KiB
DuckDB Rebuild — Расследование таймаута
Проблема
axiom_semantic_index rebuild rebuild_mode="full" use_duckdb=true стабильно таймаутит через 2-10 минут.
Таймлайн
| # | Попытка | use_duckdb | Timeout | Результат |
|---|---|---|---|---|
| 1 | rebuild full | false | 120s | ✅ Успех (3195 контрактов) |
| 2 | rebuild full | true | 120s | ❌ Timeout |
| 3 | rebuild full | true | 300s | ❌ Timeout |
| 4 | rebuild full | true | 600s | ❌ Timeout |
| 5 | rebuild full | false | 300s | ❌ Timeout (после неудачных DuckDB попыток) |
| 6 | reindex (in-memory) | — | 120s | ✅ Мгновенно (0 edges — без резолвинга) |
| 7 | rebuild full | true | 300s | ❌ Timeout (после reindex) |
| 8 | rebuild full | false | 300s | ✅ Успех (2149 edges, 3185 контрактов) |
| 9 | Проверка DuckDB файла | — | — | graph.duckdb весит 185 MB |
| 10 | mv graph.duckdb → graph.duckdb.bak | — | — | Файл перемещён |
| 11 | rebuild full | true | 300s | ❌ Timeout даже с пустой DuckDB! |
| 12 | rebuild full | false | 300s | ✅ Успех |
Что я делал
- Пробовал разные таймауты: 120с, 300с, 600с — все таймаутят с use_duckdb=true
- Проверял, что сервер жив:
search_contractsотвечает,reindexработает мгновенно - Переместил старый DuckDB (185 MB) — думал, проблема в записи большого файла
- Перезапустил сервер — не помогло
- Проверил, что rebuild без DuckDB работает: да, 2149 edges за <300с
- Проверил размер DuckDB: 185 MB — запись 3185 контрактов + 2149 связей
Вывод
DuckDB rebuild ВСЕГДА таймаутит, независимо от:
- Размера текущего DuckDB (с 185 MB или с нуля — одинаково)
- Таймаута (120с, 300с, 600с — не хватает)
- Состояния in-memory индекса (после reindex или после rebuild — одинаково)
Вероятные причины (Rust-код axiom-mcp-server-rs):
- DuckDB connection pool hangs при перезаписи
- Транзакция не коммитится и висит до таймаута MCP
- DuckDB WAL/journal не сбрасывается корректно
Что при этом работает
| Операция | Статус |
|---|---|
reindex (in-memory, 0 edges) |
✅ Мгновенно |
rebuild use_duckdb=false |
✅ ~180-300 сек |
search_contracts |
✅ |
read_outline |
✅ |
audit_contracts (из DuckDB) |
✅ (но читает СТАРЫЕ данные) |
Что в итоге
Anchor regex fix — отработал 100%. Все parent-child BINDS_TO зарезолвились:
- test_assistant_api.py: 17 warnings → 0
- test_dashboards.py: 25 warnings → 0
- Все тестовые файлы: чисты
Но аудит показывает 419 — не потому что fix не сработал, а потому что:
- DuckDB не обновлён — аудит читает оттуда
- Всплыли 390 реальных битых ссылок, скрытых раньше за шумом parent-child BINDS_TO
Доказательство, что fix работает:
search_contracts query="AssistantApiTests"→ 9 результатов (раньше 8, без родителя)audit_contracts file_path="test_assistant_api.py"→ 0 warningsaudit_contracts file_path="test_dashboards.py"→ 0 warnings
Что нужно разработчику Axiom
Починить rebuild use_duckdb=true. Сейчас стабильно таймаутит. После фикса:
mv .axiom/semantic_index/graph.duckdb{,.bak}(сбросить старый кэш)axiom_semantic_index rebuild rebuild_mode="full" use_duckdb=true timeout_seconds=120- Аудит покажет ~419 — это реальные битые ссылки, не баг ресолвера