37 lines
1.5 KiB
SQL
37 lines
1.5 KiB
SQL
ALTER TABLE runtime_instance
|
|
ADD COLUMN IF NOT EXISTS owner_id text NOT NULL DEFAULT 'control-plane',
|
|
ADD COLUMN IF NOT EXISTS purpose text NOT NULL DEFAULT 'session',
|
|
ADD COLUMN IF NOT EXISTS lease_token text NOT NULL DEFAULT '',
|
|
ADD COLUMN IF NOT EXISTS node_id text NOT NULL DEFAULT '';
|
|
|
|
ALTER TABLE runtime_instance
|
|
DROP CONSTRAINT IF EXISTS runtime_instance_purpose_check;
|
|
ALTER TABLE runtime_instance
|
|
ADD CONSTRAINT runtime_instance_purpose_check
|
|
CHECK (purpose IN ('session', 'task', 'listener'));
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS runtime_instance_active_lease_token_idx
|
|
ON runtime_instance (lease_token)
|
|
WHERE released_at IS NULL AND lease_token <> '';
|
|
|
|
CREATE TABLE IF NOT EXISTS runtime_use_lease (
|
|
token text PRIMARY KEY,
|
|
runtime_instance_id text NOT NULL REFERENCES runtime_instance(id),
|
|
owner_id text NOT NULL,
|
|
purpose text NOT NULL CHECK (purpose IN ('task', 'listener')),
|
|
task_id text REFERENCES operation_task(id),
|
|
lease_until timestamptz NOT NULL,
|
|
acquired_at timestamptz NOT NULL DEFAULT now(),
|
|
released_at timestamptz,
|
|
CHECK (length(token) BETWEEN 16 AND 128),
|
|
CHECK (length(owner_id) BETWEEN 1 AND 128)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS runtime_use_lease_active_runtime_idx
|
|
ON runtime_use_lease (runtime_instance_id, lease_until)
|
|
WHERE released_at IS NULL;
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS runtime_use_lease_active_task_idx
|
|
ON runtime_use_lease (task_id)
|
|
WHERE released_at IS NULL AND task_id IS NOT NULL;
|