3.6 KiB
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-поток умирает вместе со старым контейнером. После рестарта:
- стартовый
requeue_running_jobs()+ стартовыйreclaim_stale_leaseчистят состояние, оставшееся от убитого процесса; - периодический 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 не меняется.