feat: Add Go module and workspace test fixtures
- Created expected JSON files for Go modules and workspaces. - Added go.mod and go.sum files for example projects. - Implemented private module structure with expected JSON output. - Introduced vendored dependencies with corresponding expected JSON. - Developed PostgresGraphJobStore for managing graph jobs. - Established SQL migration scripts for graph jobs schema. - Implemented GraphJobRepository for CRUD operations on graph jobs. - Created IGraphJobRepository interface for repository abstraction. - Added unit tests for GraphJobRepository to ensure functionality.
This commit is contained in:
57
docs/db/reports/scheduler-graphjobs-postgres-plan.md
Normal file
57
docs/db/reports/scheduler-graphjobs-postgres-plan.md
Normal file
@@ -0,0 +1,57 @@
|
||||
# Scheduler Graph Jobs: PostgreSQL Migration Plan (2025-12-06)
|
||||
|
||||
## Goals
|
||||
- Replace Mongo-based GraphJobStore/PolicyRunService with PostgreSQL equivalents.
|
||||
- Keep graph job determinism (status transitions, ordering) and tenant isolation.
|
||||
- Provide schema, repository surface, and migration steps to unblock PG-T7.1.2a (Cleanup Wave A).
|
||||
|
||||
## Proposed Schema (schema: `scheduler`)
|
||||
- `graph_jobs`
|
||||
- `id UUID PK`
|
||||
- `tenant_id TEXT NOT NULL`
|
||||
- `type SMALLINT NOT NULL` (0=build,1=overlay)
|
||||
- `status SMALLINT NOT NULL` (queued, running, completed, failed, canceled)
|
||||
- `payload JSONB NOT NULL` (serialized GraphBuildJob/GraphOverlayJob)
|
||||
- `created_at TIMESTAMPTZ NOT NULL DEFAULT now()`
|
||||
- `updated_at TIMESTAMPTZ NOT NULL DEFAULT now()`
|
||||
- `correlation_id TEXT NULL`
|
||||
- Indexes: `idx_graph_jobs_tenant_status` (tenant_id, status, created_at DESC), `idx_graph_jobs_tenant_type_status` (tenant_id, type, status, created_at DESC)
|
||||
|
||||
- `graph_job_events`
|
||||
- `id BIGSERIAL PK`
|
||||
- `job_id UUID NOT NULL REFERENCES graph_jobs(id) ON DELETE CASCADE`
|
||||
- `tenant_id TEXT NOT NULL`
|
||||
- `status SMALLINT NOT NULL`
|
||||
- `payload JSONB NOT NULL`
|
||||
- `created_at TIMESTAMPTZ NOT NULL DEFAULT now()`
|
||||
- Index: `idx_graph_job_events_job` (job_id, created_at DESC)
|
||||
|
||||
## Repository Contracts
|
||||
- `IGraphJobRepository` (Postgres)
|
||||
- `ValueTask InsertAsync(GraphBuildJob job, CancellationToken ct)`
|
||||
- `ValueTask InsertAsync(GraphOverlayJob job, CancellationToken ct)`
|
||||
- `ValueTask<bool> TryReplaceAsync(GraphBuildJob job, GraphJobStatus expected, CancellationToken ct)`
|
||||
- `ValueTask<bool> TryReplaceOverlayAsync(GraphOverlayJob job, GraphJobStatus expected, CancellationToken ct)`
|
||||
- `ValueTask<GraphBuildJob?> GetBuildJobAsync(string tenantId, string id, CancellationToken ct)`
|
||||
- `ValueTask<GraphOverlayJob?> GetOverlayJobAsync(string tenantId, string id, CancellationToken ct)`
|
||||
- `ValueTask<IReadOnlyCollection<GraphBuildJob>> ListBuildJobsAsync(string tenantId, GraphJobStatus? status, int limit, CancellationToken ct)`
|
||||
- `ValueTask<IReadOnlyCollection<GraphOverlayJob>> ListOverlayJobsAsync(string tenantId, GraphJobStatus? status, int limit, CancellationToken ct)`
|
||||
- `ValueTask AppendEventAsync(GraphJobEvent evt, CancellationToken ct)`
|
||||
|
||||
## Migration
|
||||
- New migration file: `014_graph_jobs.sql` under `src/Scheduler/__Libraries/StellaOps.Scheduler.Storage.Postgres/Migrations` with the tables above.
|
||||
|
||||
## DI Changes
|
||||
- Replace `AddSchedulerMongoStorage` and `MongoGraphJobStore` in WebService with `AddSchedulerPostgresStorage` and new `PostgresGraphJobStore` implementing `IGraphJobStore`.
|
||||
- Worker.Backfill: swap Mongo options to Postgres options; use Postgres repos from `StellaOps.Scheduler.Storage.Postgres`.
|
||||
|
||||
## Tests
|
||||
- Add Postgres integration tests for `PostgresGraphJobRepository` covering insert/list/update/expected-status checks and event log.
|
||||
- Update WebService/Worker tests to use Postgres fixtures; remove Mongo fixtures.
|
||||
|
||||
## Rollback
|
||||
- If regressions occur, revert migration + DI switch; Mongo storage remains in history.
|
||||
|
||||
## Owners
|
||||
- Schema/repo: Scheduler Guild
|
||||
- DI/tests: Scheduler Guild
|
||||
Reference in New Issue
Block a user