feat(broker): migrations-based install, roles, RLS, and job dependency groups
Replace the ad-hoc tables/procedures install layout with versioned, ordered SQL migrations tracked in broker_schema_migrations. Add optional least-privilege role provisioning (--with-roles), multi-tenant row-level security, lease-based job claiming with stale-lease recovery, and job dependencies -- both by job id and by fan-in job group. Add Docker/Compose support for running the broker and its test suite.
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
-- broker.broker_job_dependency
|
||||
-- Replaces the old broker_jobs.depends_on text[] column: job_id is only
|
||||
-- claimable once every row it depends on has complete_status = 2 (completed).
|
||||
|
||||
CREATE TABLE IF NOT EXISTS broker.broker_job_dependency (
|
||||
job_id BIGINT NOT NULL REFERENCES broker.broker_jobs(id_broker_jobs) ON DELETE CASCADE,
|
||||
depends_on_job_id BIGINT NOT NULL REFERENCES broker.broker_jobs(id_broker_jobs) ON DELETE CASCADE,
|
||||
tenant_id TEXT NOT NULL DEFAULT 'default',
|
||||
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
|
||||
PRIMARY KEY (job_id, depends_on_job_id),
|
||||
CHECK (job_id <> depends_on_job_id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_broker_job_dependency_reverse
|
||||
ON broker.broker_job_dependency (depends_on_job_id, job_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_broker_job_dependency_tenant
|
||||
ON broker.broker_job_dependency (tenant_id);
|
||||
|
||||
COMMENT ON TABLE broker.broker_job_dependency IS 'job_id is not claimable until every depends_on_job_id row has complete_status = 2 (completed)';
|
||||
|
||||
ALTER TABLE broker.broker_job_dependency ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE broker.broker_job_dependency FORCE ROW LEVEL SECURITY;
|
||||
|
||||
DROP POLICY IF EXISTS broker_job_dependency_tenant_isolation ON broker.broker_job_dependency;
|
||||
CREATE POLICY broker_job_dependency_tenant_isolation ON broker.broker_job_dependency
|
||||
USING (tenant_id = COALESCE(NULLIF(current_setting('broker.tenant_id', true), ''), 'default'))
|
||||
WITH CHECK (tenant_id = COALESCE(NULLIF(current_setting('broker.tenant_id', true), ''), 'default'));
|
||||
Reference in New Issue
Block a user