backend.ai
backend.ai copied to clipboard
Add Route Traffic Control GQL API
Overview
Create GraphQL API for route traffic control using the RouteTrafficStatus (ACTIVE/INACTIVE) added in Phase 1 (BA-3424).
Background
Phase 1 added:
-
RouteTrafficStatusenum: ACTIVE, INACTIVE -
traffic_statuscolumn toRoutingRow -
RouteUpdaterSpecfor route updates
This API enables fine-grained control over which routes receive traffic during deployments.
Tasks
1. Create GraphQL Types
enum RouteTrafficStatus {
ACTIVE
INACTIVE
}
enum RouteStatus {
PROVISIONING
HEALTHY
UNHEALTHY
DEGRADED
TERMINATING
TERMINATED
FAILED_TO_START
}
type Route {
id: ID!
deploymentId: ID!
sessionId: ID
revisionId: ID
status: RouteStatus!
trafficStatus: RouteTrafficStatus!
trafficRatio: Float!
createdAt: DateTime!
errorData: JSONString
}
2. Implement Query
# List routes for a deployment
routes(
deploymentId: ID!
statusFilter: [RouteStatus!]
trafficStatusFilter: [RouteTrafficStatus!]
): RouteConnection
3. Implement Mutations
input UpdateRouteTrafficStatusInput {
routeId: ID!
trafficStatus: RouteTrafficStatus!
}
type UpdateRouteTrafficStatusPayload {
route: Route!
}
mutation {
updateRouteTrafficStatus(input: UpdateRouteTrafficStatusInput!): UpdateRouteTrafficStatusPayload
}
Use Cases
- Blue-Green Deployment: Set old routes to INACTIVE, new routes to ACTIVE
- Canary Release: Keep both ACTIVE but adjust trafficRatio
- Maintenance: Temporarily set routes to INACTIVE for maintenance
- Debugging: Isolate problematic routes by setting INACTIVE
File Location
src/ai/backend/manager/api/gql/model_deployment/route.py
Acceptance Criteria
- [ ] Route type with traffic_status field
- [ ] Query for listing routes by deployment with filters
- [ ] Mutation for updating route traffic status
- [ ] Unit tests
JIRA Issue: BA-3450