Модель данных описывает execution lifecycle, а не бизнес-операции. База сервиса отвечает на вопросы: какая попытка была создана, какой runner ее взял, как она завершилась, где лежат логи и какие output/evidence refs были произведены.
Основные Сущности
execution_attempts
Immutable attempt record for one technical execution.
Conceptual fields:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
Правила:
idне меняется.statusдвижется только вперед по lifecycle.job_spec_refхранит normalized spec without secret values.idempotency_keyзащищает от двойного создания attempt при retry API call.
runner_instances
Регистрирует live runner processes/pods.
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Runner instance не является resource catalog resource. Это execution-plane runtime entity.
runner_leases
Lease связывает attempt и runner на ограниченное время.
1 2 3 4 5 6 7 8 9 | |
Правила:
- Только runner с active lease может отправлять heartbeat и complete attempt.
- Lease token не хранится в открытом виде.
- Expired lease переводит attempt в
lost, если нет безопасного продолжения.
attempt_heartbeats
Append-only heartbeat stream.
1 2 3 4 5 6 7 8 | |
Heartbeat messages должны проходить secret masking.
raw_log_refs
Ссылки на raw logs и chunks.
1 2 3 4 5 6 7 8 9 | |
Raw logs всегда лежат в S3/MinIO. PostgreSQL хранит только metadata и refs.
runner_output_refs
Нормализованные outputs runner-а.
1 2 3 4 5 6 7 8 9 | |
Output refs используются control-plane-service для output contract validation и evidence recording.
evidence_refs
Ссылки на доказательства postcondition или output contract.
1 2 3 4 5 6 7 8 9 | |
execution-plane-service может произвести evidence, но финальное решение о node success принимает control-plane-service.
artifact_refs
Единый формат ссылки на артефакт.
1 2 3 4 5 6 7 8 9 10 | |
Artifact body не хранится в БД.
runner_statuses
Текущее состояние runner pool для scheduling.
1 2 3 4 5 6 7 8 | |
attempt_events
Append-only timeline attempt-а.
1 2 3 4 5 6 | |
Эта таблица строит внутреннюю execution history и помогает восстановить callback delivery после сбоя.
Status Lifecycle
Недопустимо вернуть attempt из terminal status обратно в running.
Индексы
Обязательные индексы:
execution_attempts(operation_id, plan_node_id, created_at);execution_attempts(status, priority, created_at);execution_attempts(idempotency_key)unique;runner_leases(attempt_id, status);runner_leases(runner_instance_id, status);attempt_heartbeats(attempt_id, created_at);raw_log_refs(attempt_id, stream);runner_output_refs(attempt_id, name);artifact_refs(digest);attempt_events(attempt_id, created_at).
Retention
- Attempt metadata хранится долго, чтобы UI мог показывать историю операций.
- Raw logs могут иметь tiered retention.
- Evidence refs хранятся не меньше operation history.
- Secret material не хранится никогда.