Skip to content

DP can't reach dp-manager /dp/budget_check (transport error) → chats fail-close to 429; breaks all DP-mediated AISIX-Cloud e2e #535

Description

@moonming

Symptom

The DP (ghcr.io/api7/ai-gateway:dev) cannot connect to dp-manager's /dp/* REST surface. Every /v1/chat/completions fails-closed to 429 before reservation/dispatch (latency_ms=1), each one preceded by:

WARN aisix_proxy::budget: budget_check failed; falling back to cache or fail_mode
     api_key_id=<uuid>
     error=error sending request for url (https://dpm:7944/dp/budget_check?api_key_id=<uuid>)

/dp/heartbeat and /dp/telemetry (same dp-manager REST surface, https://dpm:7944/dp/*) fail identically. The kine/config path still works — the model resolves (the response is 429, a budget decision, not a 404 model-not-found) — so it is specifically the dp-manager REST client (budget/heartbeat/telemetry) that can't establish a connection, not the snapshot/watch path. error sending request is a transport-level failure (connect/TLS), not an HTTP error response.

Impact

All DP-mediated e2e in api7/AISIX-Cloud are red — guardrails-live, adapter-vertex/bedrock-live, dp-*-live, telemetry-cross-org-isolation, the Azure Content Safety specs, etc. One e2e-playwright run: 73 failed, 3990 budget_check failed warns, 45 "DP never accepted a clean prompt (pipeline not live)". AISIX-Cloud main CI has been red since ~2026-06-06T06:07Z.

Repro

  1. Bring up the AISIX-Cloud e2e stack (deploy/compose.yml + compose.e2e.yml), boot a DP via the dp-harness.
  2. POST /v1/chat/completions with a fresh api key (no budget configured).
  3. 429; DP logs show the budget_check failed + error sending request for url (https://dpm:7944/dp/budget_check) above.

(A chat with no budget on the key still hits budget_check and fail-closes — so this is purely the DP↔dp-manager REST reachability, independent of any budget config.)

Suspect window (needs a bisect)

The same e2e was green when the :dev image was built from 881c2e2 (#528) and ran at 2026-06-06T04:21Z; it is red on the newer :dev built from the subsequent commits:

These are the observability-sink framework series (#528#531#532). An architectural change to the DP's pipeline / shared HTTP-client setup is the leading suspect for breaking the dp-manager REST client, but this needs a bisect of those commits to confirm. (One AISIX-Cloud main run at 06:07Z went red on the older 881c2e2 :dev — possibly a separate flake; the persistent failures are all on the newer obs-sink :dev.)

A dp-manager-side change cannot be fully ruled out, but the kine/config path working while the REST client fails points at the DP-side REST/mTLS client.

Cross-ref

Surfaced by api7/AISIX-Cloud#707 (real Azure Content Safety integration test) and the existing AISIX-Cloud DP-mediated e2e suite. The Azure test's pre-flight "pipeline live?" poll caught it before any false guardrail signal.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P0Blocks production usability — must-have for paritybugSomething isn't workingcross-repoRequires changes in DP + CP + Dashboard UI + e2e

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions