43 lines
3.6 KiB
Markdown
43 lines
3.6 KiB
Markdown
# 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 не меняется.
|