33 lines
1,018 B
MySQL
33 lines
1,018 B
MySQL
|
|
ALTER TABLE mutations
|
||
|
|
ADD COLUMN IF NOT EXISTS dispatch_started_at TIMESTAMPTZ,
|
||
|
|
ADD COLUMN IF NOT EXISTS request_deadline_at TIMESTAMPTZ,
|
||
|
|
ADD COLUMN IF NOT EXISTS worker_lease_until TIMESTAMPTZ,
|
||
|
|
ADD COLUMN IF NOT EXISTS settled_at TIMESTAMPTZ;
|
||
|
|
|
||
|
|
DO $$
|
||
|
|
BEGIN
|
||
|
|
IF EXISTS (
|
||
|
|
SELECT 1
|
||
|
|
FROM mutations
|
||
|
|
WHERE external_state = 'pending'
|
||
|
|
) THEN
|
||
|
|
RAISE EXCEPTION
|
||
|
|
'recovery settlement migration requires no pending mutations';
|
||
|
|
END IF;
|
||
|
|
END
|
||
|
|
$$;
|
||
|
|
|
||
|
|
ALTER TABLE mutations
|
||
|
|
ADD CONSTRAINT mutations_dispatch_timing_check CHECK (
|
||
|
|
(external_state <> 'pending') OR
|
||
|
|
(dispatch_started_at IS NOT NULL AND
|
||
|
|
request_deadline_at IS NOT NULL AND
|
||
|
|
worker_lease_until IS NOT NULL)
|
||
|
|
) NOT VALID;
|
||
|
|
|
||
|
|
ALTER TABLE mutations
|
||
|
|
VALIDATE CONSTRAINT mutations_dispatch_timing_check;
|
||
|
|
|
||
|
|
CREATE INDEX IF NOT EXISTS mutations_recovery_idx
|
||
|
|
ON mutations (worker_lease_until, request_deadline_at, updated_at)
|
||
|
|
WHERE state IN ('prepared', 'applying');
|