Files
EvoBGP/migrations/postgres/000034_job_queue_lease.up.sql
T
DenozordecandCursor f8e0520817 feat(httpapi): harden control plane and speed up prefix refresh
Очередь job получила lease и fencing, телеметрия и прогресс deploy сохраняются, ревизия пишет manifest входов. Обновление префиксов не переписывает неизменённый снимок, большие наборы идут через COPY, а устаревшая ревизия не попадает в deploy. Бандл ноды кэшируется, prune и постановка job больше не держат горячий путь.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-11-02 17:23:59 +07:00

16 lines
1.2 KiB
SQL

ALTER TABLE job_audit ADD COLUMN request_hash TEXT;
ALTER TABLE job_audit ADD COLUMN request_sequence BIGINT GENERATED ALWAYS AS IDENTITY;
ALTER TABLE job_audit ADD COLUMN request_json JSONB;
ALTER TABLE job_audit ADD COLUMN owner_id TEXT;
ALTER TABLE job_audit ADD COLUMN lease_until TIMESTAMPTZ;
ALTER TABLE job_audit ADD COLUMN attempt INTEGER NOT NULL DEFAULT 0;
ALTER TABLE job_audit ADD COLUMN fencing_token BIGINT NOT NULL DEFAULT 0;
ALTER TABLE job_audit ADD COLUMN available_at TIMESTAMPTZ NOT NULL DEFAULT now();
ALTER TABLE job_audit ADD COLUMN cancel_requested BOOLEAN NOT NULL DEFAULT false;
INSERT INTO tenant (id, name, slug) VALUES ('00000000-0000-0000-0000-000000000000', 'EvoBGP system jobs', 'evobgp-system-jobs') ON CONFLICT (id) DO NOTHING;
CREATE INDEX idx_job_audit_claim ON job_audit (available_at, created_at) WHERE status = 'queued';
CREATE INDEX idx_job_audit_expired_lease ON job_audit (lease_until) WHERE status = 'running';
-- Give pre-upgrade workers their old 15-minute grace; later claims can recover them.
UPDATE job_audit SET owner_id = 'legacy-unfenced', lease_until = now() + interval '15 minutes', attempt = 1
WHERE status = 'running' AND lease_until IS NULL;