Files
orchestrator/docs/work-items/ORCH-111/07-infra-requirements.md

4.7 KiB
Raw Blame History

work_item, stage, author_agent, status, created_at, model_used
work_item stage author_agent status created_at model_used
ORCH-111 architecture architect proposed 2026-06-15 claude-opus-4-8

07 — Инфра-требования: ORCH-111 — watchdog-алерт на долго живущий тест-процесс

Work Item: ORCH-111 · Repo: orchestrator · Стадия: architecture

Применимо: меняется топология контейнера-наблюдателя (pid: host) и добавляются env-ключи watchdog. Решение — 06-adr/ADR-001 + сквозной adr-0041.

I-1. Топология / окружения

  • Изменение: сервису orchestrator-watchdog в docker-compose.yml добавляется pid: host (ADR-001 D6). Под pid: host контейнерный /proc отражает корневой PID-namespace хоста → watchdog видит таблицу процессов хоста (включая осиротевшие pytest, репарентированные на tini orchestrator-контейнера). Отдельный mount /proc не требуется (procfs зависит от namespace читателя).
  • pid: hostНЕ volume → существующий тест tests/watchdog/test_compose_service.py:: test_host_paths_mounted_read_only (требует :ro на каждом volume) остаётся зелёным; разработчик добавляет позитивный тест на наличие pid: host.
  • Привилегия — только у наблюдателя (orchestrator-watchdog). Прод orchestrator и orchestrator-staging не меняются. Прочие тома/порты/сеть watchdog — без изменений (network_mode: host, docker.sock:ro, /repos:ro, ./data:ro, mem_limit: 128m).
  • Тираж (Lite/Bundled, ORCH-102/103): pid: host входит в канонический compose sidecar; сигнал дефолт-off → нулевое изменение поведения у тиражных инсталляций.

I-2. Переменные окружения / секреты

  • Новые ключи (ADR-001 D5), парсеры never-raise:
    Ключ Дефолт Смысл
    WATCHDOG_PROC_ENABLED false kill-switch / осознанный opt-in
    WATCHDOG_PROC_AGE_MIN 60 порог возраста (мин); обязан > max(merge_retest_timeout_s=600, coverage_run_timeout_s=900)/60
    WATCHDOG_PROC_PATTERNS pytest CSV паттернов cmdline (substring-матч)
    WATCHDOG_PROC_COOLDOWN_S 1800 per-signal cooldown
  • Канон тиража (NFR-5 / AC-10): ключи добавить в том же PR в .env.watchdog.example И в блок WATCHDOG_* .env.example (равенство множеств держит tests/test_lite_setup_doc.py TC-02b) + описать в docs/deployment/LITE_SETUP.md и docs/architecture/README.md.
  • Секреты: новых нет. Канал алертов — существующий WATCHDOG_TG_* (свой бот sidecar, C-1).
  • На прод-хосте (разово, человек): в .env.watchdog выставить WATCHDOG_PROC_ENABLED=true (включение сигнала; без этого — дремлет).

I-3. Деплой / рестарт

  • Self-hosting инвариант (NFR-3): выкат пересобирает/рестартит только контейнер orchestrator-watchdog (docker compose up -d --build orchestrator-watchdog). Прод-контейнер orchestrator НЕ перезапускается (иначе встанет конвейер всех проектов, включая enduro).
  • Прод-выкат sidecar — через staging-эквивалент (smoke на staging-хосте перед прод): проверить, что под pid: host коллектор видит процессы, сигнал поднимается на синтетическом старом pytest и молчит при дефолт-off.
  • Откат: WATCHDOG_PROC_ENABLED=false (мгновенный; привилегия дремлет) либо снятие pid: host + рестарт только sidecar.

I-4. CI/CD

  • Без изменений .gitea/workflows/. Новые тесты — tests/watchdog/test_proc_blocking_signal.py, tests/watchdog/test_tick_proc_blocking_integration.py (TRZ §2) — исполняются существующим pytest tests/. Key-sync (test_lite_setup_doc.py) и compose-тесты watchdog должны остаться зелёными.