28 lines
2.1 KiB
Markdown
28 lines
2.1 KiB
Markdown
# 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 достаточен (один хост, один инстанс).
|