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:
2026-09-17 22:09:41 +02:00
parent 602997bcdb
commit 4c8e1066d4
53 changed files with 2911 additions and 1016 deletions
+14
View File
@@ -16,10 +16,24 @@ type Job struct {
RunAs string `json:"run_as"`
UserLogin string `json:"user_login"`
ScheduleID int64 `json:"schedule_id"`
TenantID string `json:"tenant_id"`
AttemptCount int `json:"attempt_count"`
MaxAttempts int `json:"max_attempts"`
LeaseToken string `json:"lease_token,omitempty"`
IdempotencyKey string `json:"idempotency_key,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
// WakeNotification is the payload sent over pg_notify('broker.event', ...).
// It carries only what a worker needs to decide whether to wake: the queue
// number. job_id is included solely for logging -- workers always re-claim
// via broker_get rather than executing the notified id directly.
type WakeNotification struct {
Queue int `json:"queue"`
JobID int64 `json:"job_id,omitempty"`
}
// Instance represents a broker instance
type Instance struct {
ID int64 `json:"id"`