Build Dispatcher - User Journey Testing
This document validates dispatcher-based build execution end-to-end, using builds.status = queued as the queue representation.
Scope
This document tests the dispatcher flow that:
- Queues builds by status.
- Claims queued builds.
- Dispatches executions.
- Exposes metrics via
/api/v1/admin/dispatcher/metrics.
Prerequisites
- Backend running with dispatcher enabled (
dispatcher.enabled = truein config). - Database migrated and seeded.
- You have a user with system read permissions to access dispatcher metrics.
- Build method configs are valid for the selected build type.
- At least one infrastructure provider exists if using Tekton execution.
Journey A: Dispatcher Health + Metrics
Goal: Verify dispatcher is running and metrics endpoint is reachable.
- Start backend server.
- Confirm logs contain “Build dispatcher started”.
- Call
GET /api/v1/admin/dispatcher/metrics. - Verify JSON shape includes:
claims,dispatches,claim_errors,dispatch_errors,requeues,skipped_for_limitclaim_*anddispatch_*latency fields
Expected: Metrics endpoint responds 200 and values are numeric.
Journey B: Queued Build → Running Execution
Goal: Create a build and confirm dispatcher claims it and dispatches execution.
- Create a build (UI or API) with a valid build config.
- Verify initial build status is
queued. - Wait one dispatcher tick (default poll interval is 3s).
- Verify build status transitions to
running. - Verify a build execution exists.
DB checks (examples):
SELECT id, status, created_at FROM builds ORDER BY created_at DESC LIMIT 5;
SELECT id, build_id, status, created_at FROM build_executions ORDER BY created_at DESC LIMIT 5;
Expected: The latest build is running and has a corresponding execution row.
Journey C: Concurrency Limit Enforcement
Goal: Confirm the dispatcher respects tenant concurrency limits.
- Set the tenant build config
MaxConcurrentJobs = 1via System Configuration. - Create 2 builds quickly for the same tenant.
- Verify only one build transitions to
running. - Confirm the other remains
queued. - Check dispatcher metrics for
skipped_for_limit.
Expected: Only one running build at a time for the tenant, and skipped_for_limit increments.
Journey D: Dispatch Failure → Requeue
Goal: Ensure dispatcher requeues builds when dispatch fails.
- Create a build with a valid config.
- Temporarily simulate a dispatch failure (e.g., remove Tekton credentials if using Tekton).
- Wait one dispatcher tick.
- Verify build status returns to
queued. - Check dispatcher metrics for
dispatch_errorsandrequeues.
Expected: Build is requeued and error counters increment.
UX Validation (Admin Panel)
- Visit Admin Dashboard.
- Confirm the Dispatcher Metrics panel shows values.
- Refresh after running Journeys B–D.
Expected: Metrics panel reflects recent dispatcher activity.
Troubleshooting
- If builds stay
queued, confirm dispatcher is running anddispatcher.enabled = true. - If metrics are empty, check
/api/v1/admin/dispatcher/metricspermissions. - If dispatch fails, check build config validity and executor availability.
Success Criteria
- Metrics endpoint responds with valid data.
- Queued builds transition to
running. - Executions are created for dispatched builds.
- Concurrency limits are enforced.
- Dispatch failures requeue builds and increment metrics.