Files
ss-tools/rebuild-investigation-report.md
2026-05-26 09:30:41 +03:00

4.3 KiB
Raw Blame History

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 Успех

Что я делал

  1. Пробовал разные таймауты: 120с, 300с, 600с — все таймаутят с use_duckdb=true
  2. Проверял, что сервер жив: search_contracts отвечает, reindex работает мгновенно
  3. Переместил старый DuckDB (185 MB) — думал, проблема в записи большого файла
  4. Перезапустил сервер — не помогло
  5. Проверил, что rebuild без DuckDB работает: да, 2149 edges за <300с
  6. Проверил размер DuckDB: 185 MB — запись 3185 контрактов + 2149 связей

Вывод

DuckDB rebuild ВСЕГДА таймаутит, независимо от:

  • Размера текущего DuckDB (с 185 MB или с нуля — одинаково)
  • Таймаута (120с, 300с, 600с — не хватает)
  • Состояния in-memory индекса (после reindex или после rebuild — одинаково)

Вероятные причины (Rust-код axiom-mcp-server-rs):

  1. DuckDB connection pool hangs при перезаписи
  2. Транзакция не коммитится и висит до таймаута MCP
  3. 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 не сработал, а потому что:

  1. DuckDB не обновлён — аудит читает оттуда
  2. Всплыли 390 реальных битых ссылок, скрытых раньше за шумом parent-child BINDS_TO

Доказательство, что fix работает:

  • search_contracts query="AssistantApiTests"9 результатов (раньше 8, без родителя)
  • audit_contracts file_path="test_assistant_api.py"0 warnings
  • audit_contracts file_path="test_dashboards.py"0 warnings

Что нужно разработчику Axiom

Починить rebuild use_duckdb=true. Сейчас стабильно таймаутит. После фикса:

  1. mv .axiom/semantic_index/graph.duckdb{,.bak} (сбросить старый кэш)
  2. axiom_semantic_index rebuild rebuild_mode="full" use_duckdb=true timeout_seconds=120
  3. Аудит покажет ~419 — это реальные битые ссылки, не баг ресолвера