2.1 KiB
2.1 KiB
08 — Требования к данным / схеме БД (ORCH-043)
Вывод: изменение схемы SQLite НЕ требуется.
Merge-lease (сериализация слияний, BR-5) реализуется файлом, а не таблицей:
- Путь:
<repos_dir>/.merge-lease-<repo>.json(settings.repos_dir, по умолчанию/repos). - Содержимое:
{ "task_id": int, "work_item_id": str, "branch": str, "acquired_at": "<ISO>", "pid": int }. - Жизненный цикл — см. ADR-001 §4 (acquire неблокирующий / release идемпотентный /
реклейм по возрасту
merge_lock_timeout_s).
Почему файл, а не таблица БД
- ТЗ §4 прямо предпочитает реализацию без миграции схемы.
- Файловый lease проще делается restart-safe (реклейм по mtime/возрасту +
pid) и не трогает инициализациюsrc/db.py(никаких измененийtasks/agent_runs/jobs/events). - Атомарность захвата обеспечивается
open(O_CREAT|O_EXCL)на одном хосте (mva154, один инстанс) — достаточно для сериализации в пределах одного процесса-оркестратора.
Существующие таблицы — без изменений
tasks, agent_runs, jobs, events не модифицируются. Defer-механизм переиспользует
существующий столбец jobs.available_at (ORCH-1) для отложенного повторного запуска
deployer'а — новых столбцов не нужно.
Если в будущем потребуется кросс-процессная/мульти-хостовая сериализация — lease можно мигрировать в таблицу (или advisory-lock). Это будет отдельным ADR; в рамках ORCH-043 файловый lease достаточен (один хост, один инстанс).