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

3.6 KiB
Raw Permalink Blame History

07 — Требования к инфраструктуре (ORCH-065)

Топология

Без изменений. Новых контейнеров, портов, сетевых сервисов, внешних зависимостей нет. Job-reaper — ещё один фоновый daemon-поток ВНУТРИ существующего процесса оркестратора (как queue_worker и reconciler), стартует/останавливается в main.lifespan. Деплой/рестарт прод-контейнера в рамках задачи НЕ требуется и ЗАПРЕЩЁН (self-hosting safety) — выкатка через штатный deploy-staging → deploy.

Допущение pid-namespace (важно для liveness-детекции)

  • Агент запускается как subprocess.Popen(["bash","-c",cmd])дочерний процесс оркестратора в ТОМ ЖЕ pid-namespace (один контейнер). Значит os.kill(jobs.pid, 0) корректно отражает liveness агента, пока жив сам оркестратор. Это инвариант текущей упаковки (один контейнер на инстанс).
  • Lease пишет pid = os.getpid() — pid ПРОЦЕССА ОРКЕСТРАТОРА. После рестарта контейнера старый pid мёртв → детектируется. Риск переиспользования номера pid новым процессом закрыт условием «pid мёртв ИЛИ TTL истёк»: TTL добивает lease в любом случае (контракт ORCH-043 сохранён).
  • Если в будущем агенты переедут в отдельные контейнеры/namespace — Tier-1 pid-liveness станет ненадёжной; тогда полагаемся на Tier-2 (exit_code) и Tier-3 (потолок reaper_max_running_s). Зафиксировано в 10-tech-risks.

Поведение при self-restart (ORCH-36 executable self-deploy)

Self-restart прод-контейнера во время deploy — ровно тот сценарий, что плодит зомби: monitor-поток умирает вместе со старым контейнером. После рестарта:

  1. стартовый requeue_running_jobs() + стартовый reclaim_stale_lease чистят состояние, оставшееся от убитого процесса;
  2. периодический reaper добивает то, что возникнет позже без рестарта. Reaper/lease-reclaim сами НИКОГДА не рестартят и не роняют прод-контейнер и не делают git-push в main (AC-12).

Эксплуатационные ручки (env, хост .env/.env.staging)

ORCH_REAPER_ENABLED, ORCH_REAPER_INTERVAL_S, ORCH_REAPER_DEAD_TICKS, ORCH_REAPER_MAX_RUNNING_S, ORCH_LEASE_RECLAIM_ENABLED; переиспользуются ORCH_MERGE_LOCK_TIMEOUT_S, ORCH_MERGE_GATE_REPOS. Все флаги документируются в .env.example (developer-стадия). Полное отключение (false) → строго прежнее поведение.

Документация эксплуатации

docs/operations/INFRA.md — добавить (best-effort, developer/PR) короткое упоминание поведения reaper/lease-reclaim при self-restart. Топологическая карта INFRA.md не меняется.