lablup / lablup/backend.ai

Add Route Traffic Control GQL API

Open
#7,432 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.