Сценарий 10: Анализ между репозиториями

Сценарий 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"

Связанные сценарии