mirror of
https://github.com/whyour/qinglong.git
synced 2026-09-23 03:18:09 +08:00
111 lines
4.2 KiB
TypeScript
111 lines
4.2 KiB
TypeScript
import { definePostgresSqlMigration } from './sqlMigration';
|
|
|
|
export const pg0014ClusterSchedulerAdmissionMigration =
|
|
definePostgresSqlMigration({
|
|
id: 'pg-0014-cluster-scheduler-admission',
|
|
statements: [
|
|
`
|
|
ALTER TABLE "ql3"."runs"
|
|
ALTER COLUMN trigger_id TYPE varchar(128)
|
|
`.trim(),
|
|
`
|
|
CREATE TABLE "ql3"."trigger_schedules" (
|
|
project_id varchar(128) NOT NULL,
|
|
trigger_id varchar(128) NOT NULL,
|
|
trigger_revision integer NOT NULL,
|
|
next_fire_at_ms bigint,
|
|
last_scheduled_at_ms bigint,
|
|
state_version integer NOT NULL,
|
|
claim_owner varchar(128),
|
|
claim_token uuid,
|
|
claim_version integer NOT NULL,
|
|
claim_expires_at_ms bigint,
|
|
updated_at_ms bigint NOT NULL,
|
|
CONSTRAINT trigger_schedules_pkey PRIMARY KEY (project_id, trigger_id),
|
|
CONSTRAINT ql3_trigger_schedules_revision_fk
|
|
FOREIGN KEY (project_id, trigger_id, trigger_revision)
|
|
REFERENCES "ql3"."trigger_revisions" (project_id, trigger_id, revision)
|
|
ON DELETE RESTRICT,
|
|
CONSTRAINT ql3_trigger_schedules_revision_check
|
|
CHECK (trigger_revision BETWEEN 1 AND 2147483647),
|
|
CONSTRAINT ql3_trigger_schedules_cursor_check CHECK (
|
|
next_fire_at_ms IS NULL OR next_fire_at_ms >= 0
|
|
),
|
|
CONSTRAINT ql3_trigger_schedules_last_check CHECK (
|
|
last_scheduled_at_ms IS NULL OR last_scheduled_at_ms >= 0
|
|
),
|
|
CONSTRAINT ql3_trigger_schedules_version_check CHECK (
|
|
state_version BETWEEN 0 AND 2147483647
|
|
AND claim_version BETWEEN 0 AND 2147483647
|
|
),
|
|
CONSTRAINT ql3_trigger_schedules_claim_owner_check CHECK (
|
|
claim_owner IS NULL
|
|
OR (
|
|
char_length(claim_owner) BETWEEN 1 AND 128
|
|
AND claim_owner ~ '^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$'
|
|
)
|
|
),
|
|
CONSTRAINT ql3_trigger_schedules_claim_shape_check CHECK (
|
|
(
|
|
claim_owner IS NULL
|
|
AND claim_token IS NULL
|
|
AND claim_expires_at_ms IS NULL
|
|
)
|
|
OR (
|
|
claim_owner IS NOT NULL
|
|
AND claim_token IS NOT NULL
|
|
AND claim_version >= 1
|
|
AND claim_expires_at_ms IS NOT NULL
|
|
AND claim_expires_at_ms > updated_at_ms
|
|
)
|
|
),
|
|
CONSTRAINT ql3_trigger_schedules_updated_check CHECK (updated_at_ms >= 0)
|
|
)
|
|
`.trim(),
|
|
`
|
|
INSERT INTO "ql3"."trigger_schedules" (
|
|
project_id, trigger_id, trigger_revision, next_fire_at_ms,
|
|
last_scheduled_at_ms, state_version, claim_owner, claim_token,
|
|
claim_version, claim_expires_at_ms, updated_at_ms
|
|
)
|
|
SELECT
|
|
project_id, trigger_id, current_revision, NULL, NULL, 0,
|
|
NULL, NULL, 0, NULL, updated_at_ms
|
|
FROM "ql3"."triggers"
|
|
`.trim(),
|
|
`
|
|
CREATE INDEX ql3_trigger_schedules_due_idx
|
|
ON "ql3"."trigger_schedules"
|
|
(next_fire_at_ms NULLS FIRST, claim_expires_at_ms, project_id, trigger_id)
|
|
`.trim(),
|
|
`
|
|
CREATE INDEX ql3_trigger_schedules_claim_expiry_idx
|
|
ON "ql3"."trigger_schedules"
|
|
(claim_expires_at_ms, project_id, trigger_id)
|
|
WHERE claim_token IS NOT NULL
|
|
`.trim(),
|
|
`
|
|
DO $ql3$
|
|
BEGIN
|
|
UPDATE "ql3"."schema_capabilities"
|
|
SET contract_version = 13,
|
|
migration_id = 'pg-0014-cluster-scheduler-admission',
|
|
capabilities = '{"api_credential":1,"api_credential_admin":1,"api_credential_pepper_binding":1,"cluster_execution_revision":1,"cluster_recovery":1,"cluster_recovery_claim":1,"cluster_scheduler_admission":1,"identity_admin":1,"project_policy":1,"run_core":1,"run_dispatch_lease":1,"run_retry_policy":1,"security_audit":1,"security_audit_query":1,"task_definition":1,"trigger_definition":1,"worker_attestation":1,"worker_credential":1,"worker_session":1}'::jsonb,
|
|
updated_at_ms = floor(
|
|
extract(epoch FROM transaction_timestamp()) * 1000
|
|
)::bigint
|
|
WHERE contract_name = 'control-core'
|
|
AND contract_version = 12
|
|
AND migration_id = 'pg-0013-task-execution-revisions'
|
|
AND capabilities = '{"api_credential":1,"api_credential_admin":1,"api_credential_pepper_binding":1,"cluster_execution_revision":1,"cluster_recovery":1,"cluster_recovery_claim":1,"identity_admin":1,"project_policy":1,"run_core":1,"run_dispatch_lease":1,"run_retry_policy":1,"security_audit":1,"security_audit_query":1,"task_definition":1,"trigger_definition":1,"worker_attestation":1,"worker_credential":1,"worker_session":1}'::jsonb;
|
|
|
|
IF NOT FOUND THEN
|
|
RAISE EXCEPTION 'control-core capability is not at version 12'
|
|
USING ERRCODE = 'check_violation';
|
|
END IF;
|
|
END
|
|
$ql3$
|
|
`.trim(),
|
|
],
|
|
});
|