Сценарий 10: Анализ между репозиториями¶
Архитектор анализирует зависимости и влияние между несколькими репозиториями.
Быстрый старт¶
# Выберите сценарий анализа между репозиториями
/select 10
Настройка нескольких проектов¶
Настройка анализа между репозиториями¶
# Добавить несколько проектов
/project add postgres ./pg_cpg.duckdb c "Ядро PostgreSQL"
/project add extension1 ./ext1_cpg.duckdb c "Модуль расширения 1"
/project add extension2 ./ext2_cpg.duckdb c "Модуль расширения 2"
# Включить режим анализа между репозиториями
/config cross_repo enabled true
Анализ зависимостей¶
Вызовы функций между репозиториями¶
> Найти функции в extension1, которые вызывают ядро PostgreSQL
╭─────────────── Зависимости между репозиториями ─────────────────────╮
│ │
│ Зависимости Extension1 → Ядро PostgreSQL: │
│ │
│ Вызовы API: │
│ palloc() 12 вызовов Выделение памяти │
│ ereport() 8 вызовов Отчёт об ошибках │
│ SPI_connect() 5 вызовов SQL-интерфейс │
│ GetCurrentTransactionId() 3 вызова Доступ к транзакциям │
│ │
│ Прямые вызовы функций: │
│ heap_insert() 4 вызова Вставка кортежей │
│ index_insert() 2 вызова Обслуживание индексов │
│ │
│ Всего зависимостей: 34 вызова функций │
│ Уровень риска: СРЕДНИЙ (используются внутренние API) │
│ │
╰────────────────────────────────────────────────────────────────────╯
Картирование границ API¶
> Показать границы API между проектами
╭─────────────── Границы API ──────────────────────────────╮
│ │
│ Экспортируемые API ядра PostgreSQL: │
│ │
│ Стабильные API (безопасны в использовании): │
│ ├── SPI_* (12 функций) │
│ ├── PG_FUNCTION_* макросы │
│ └── Стандартные хуки расширений │
│ │
│ Внутренние API (использовать с осторожностью): │
│ ├── heap_* (23 функции) │
│ ├── index_* (18 функций) │
│ └── buffer_* (15 функций) │
│ │
│ Использование в extension1: │
│ Стабильные API: 67% │
│ Внутренние API: 33% ⚠️ │
│ │
╰──────────────────────────────────────────────────────────╯
Анализ влияния¶
Обнаружение нарушающих изменений¶
> Какие расширения перестанут работать при изменении сигнатуры heap_insert?
╭─────────────── Влияние нарушающего изменения ──────────────────────╮
│ │
│ Цель: heap_insert() │
│ Сигнатура: void heap_insert(Relation, HeapTuple, ...) │
│ │
│ Затронутые расширения: │
│ │
│ 🔴 extension1 (4 прямых вызова) │
│ Файлы: src/insert_handler.c, src/bulk_loader.c │
│ Риск: ВЫСОКИЙ — критическая функциональность │
│ │
│ 🔴 extension2 (2 прямых вызова) │
│ Файлы: src/custom_insert.c │
│ Риск: СРЕДНИЙ — опциональная функция │
│ │
│ Рекомендуемые действия: │
│ 1. Предоставить функцию-обёртку │
│ 2. Период устаревания: 2 основные версии │
│ 3. Обновить документацию расширений │
│ │
╰───────────────────────────────────────────────────────────────────╯
Матрица совместимости версий¶
> Показать матрицу совместимости для расширений
╭─────────────── Матрица совместимости ───────────────────────╮
│ │
│ Совместимость расширений с версиями PostgreSQL: │
│ │
│ Расширение PG 14 PG 15 PG 16 Проблемы │
│ ─────────────────────────────────────────────────────────── │
│ extension1 ✅ ✅ ⚠️ heap_insert │
│ extension2 ✅ ✅ ✅ - │
│ extension3 ❌ ✅ ✅ Удалённый API │
│ │
│ Условные обозначения: │
│ ✅ Совместимо ⚠️ Требуется обновление ❌ Несовместимо │
│ │
╰─────────────────────────────────────────────────────────────╯
Планирование миграции¶
Анализ пути обновления¶
> Запланировать миграцию с PG 15 на PG 16 для всех расширений
╭─────────────── План миграции ──────────────────────────────╮
│ │
│ Миграция: PostgreSQL 15 → 16 │
│ │
│ Этап 1: Обновление API │
│ extension1: │
│ - Обновить вызовы heap_insert() (4 места) │
│ - Обновить управление буферами (2 места) │
│ │
│ Этап 2: Замена устаревших API │
│ extension3: │
│ - Заменить removed_api() на new_api() │
│ │
│ Этап 3: Тестирование │
│ - Запустить регрессионные тесты для всех расширений │
│ - Проверить взаимодействие между расширениями │
│ │
│ Оценка изменений: 12 файлов, ~150 строк │
│ │
╰────────────────────────────────────────────────────────────╯
Примеры запросов¶
- “Найти зависимости между репозиториями”
- “Какие расширения используют [function_name]?”
- “Показать границы API между проектами”
- “Что перестанет работать при изменении [function]?”
- “Запланировать миграцию при обновлении версии”
- “Показать матрицу совместимости”
Команды CLI¶
# Команды анализа между репозиториями
python -m src.cli.cross_repo dependencies --from extension1 --to postgres
python -m src.cli.cross_repo impact --function heap_insert
python -m src.cli.cross_repo compatibility --versions "14,15,16"
Связанные сценарии¶
- Архитектура — Анализ архитектуры
- Разработка функций — Понимание зависимостей
- Массовая рефакторинг — Крупномасштабные изменения