2.5 KiB
2.5 KiB
08 — Требования к данным (ORCH-065)
Изменение схемы: jobs.pid
| Поле | Значение |
|---|---|
| Таблица | jobs |
| Колонка | pid |
| Тип | INTEGER (nullable, без DEFAULT) |
| Назначение | pid агентского процесса (subprocess.Popen.pid из launcher._spawn) для liveness-детекции зомби job-reaper'ом (Tier-1) |
| Механизм миграции | _ensure_column(conn, "jobs", "pid", "INTEGER") в db.init_db — идемпотентно, no-op если колонка уже есть |
| Безопасность на live prod DB | ДА. Тот же паттерn уже применён к jobs.transient_attempts, jobs.available_at, events.delivery_id, agent_runs.*. ALTER TABLE ADD COLUMN в SQLite — мгновенная метаданная-операция, не блокирует и не переписывает строки |
| Заполнение | в _spawn рядом с существующим UPDATE jobs SET run_id=?, started_at=datetime('now') WHERE id=? добавить pid=? (proc.pid). Старые строки остаются pid IS NULL → для них Tier-1 неприменим, работают Tier-2/Tier-3 |
Что НЕ меняется
STAGE_TRANSITIONS, реестрQG_CHECKS— без изменений (это контракты).- Схема
agent_runs— без изменений (finished_at/exit_codeуже есть — основа Tier-2). - Файл-схема merge-lease
.merge-lease-<repo>.json— без изменений (pid,acquired_at,branch,work_item_id,task_idуже пишутсяacquire_merge_lease). jobs.statusenum (queued|running|done|failed) — без изменений; новый статусreapingНЕ вводится (атомарного guardWHERE status='running'достаточно).
Совместимость / откат
- Откат миграции не требуется: лишняя nullable-колонка безвредна при
reaper_enabled=false. pid IS NULL(строки до миграции, или если запись pid не успела) → reaper не делает Tier-1, опирается на Tier-2 (exit_code) и Tier-3 (потолок). Поведение деградирует gracefully, ложноположительных реапов не возникает.