backend.ai icon indicating copy to clipboard operation
backend.ai copied to clipboard

Add Route Traffic Control GQL API

Open HyeockJinKim opened this issue 2 months ago • 0 comments

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
  2. Canary Release: Keep both ACTIVE but adjust trafficRatio
  3. Maintenance: Temporarily set routes to INACTIVE for maintenance
  4. 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

HyeockJinKim avatar Dec 18 '25 02:12 HyeockJinKim