Add Route Traffic Control GQL API
- Dominant language
- Python
- Stars
- 670
- Forks
- 183
- Avg merge
- 17h 7m
- Merged PRs (30d)
- 358
Description
## Overview
Create GraphQL API for route traffic control using the `RouteTrafficStatus` (ACTIVE/INACTIVE) added in Phase 1 (BA-3424).
## Background
Phase 1 added:
- `RouteTrafficStatus` enum: ACTIVE, INACTIVE
- `traffic_status` column to `RoutingRow`
- `RouteUpdaterSpec` for 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
1. **Blue-Green Deployment**: Set old routes to INACTIVE, new routes to ACTIVE
1. **Canary Release**: Keep both ACTIVE but adjust trafficRatio
1. **Maintenance**: Temporarily set routes to INACTIVE for maintenance
1. **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
Contributor guide
Assessment
This issue has not been assessed yet.