Skip to content

docs(proposal): align the data-plane error-handling proposal with the implementation - #264

Open
rambohe-ch wants to merge 1 commit into
kaito-project:mainfrom
rambohe-ch:docs-align-data-plane-proposal
Open

rambohe-ch wants to merge 1 commit into
kaito-project:mainfrom
rambohe-ch:docs-align-data-plane-proposal

Conversation

@rambohe-ch

@rambohe-ch rambohe-ch commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

Reason for Change:

The data-plane error-handling proposal has drifted from what charts/modelharness, charts/productionstack and the E2E suite implement. This PR updates the proposal to match the implementation; no code changes. The control-plane proposal already matches the reporter and is unchanged.

 §2.1 / §2.2  outage local_reply
-  cluster-wide local_reply in charts/productionstack
+  one per-namespace local_reply in charts/modelharness (mappers #1-#6)
-  bbr_unavailable twice (cluster + per-namespace defence-in-depth)
+  bbr_unavailable once (mapper #5)
-  500 mesh_config_invalid            # MeshConfig wiring no longer exists
 §2.2  invalid_request_body
-  not JSON | not chat schema | missing model  -> local_reply envelope
+  JSON without a model field -> model-not-found-direct direct_response
+  exception: non-JSON body -> BBR native 400, passed through (no envelope)
 §2.3  catch-all, model header absent
-  502 bbr_unavailable
+  400 invalid_request_body
 §2.3 / §3  cluster-filter HA
-  Envoy active health_checks + outlier detection on BBR and ext_authz
+  readiness probe -> EDS (active) on both; outlier detection on BBR only
+  ext_authz: replicas + readiness, short 502 window accepted
 Test Plan
-  *_test.go names, Gateway pod scale-down, ext_authz HA, upstream timeout
+  real *_spec.go names + Status column; gateway_unavailable via reporter

Why the proposal changes rather than the code:

  • Cluster-wide local_reply: each inference Gateway has its own HTTP connection manager, and the MeshConfig-based cluster-wide wiring was removed because the AKS Istio add-on does not allow modifying the shared MeshConfig. A second filter on the same HCM would also bring back the non-deterministic EnvoyFilter merge order.
  • Non-JSON body: the only local_reply match for this case (a local 400 without the model header) also catches the missing-model direct_response and Envoy's protocol-level 400s, misattributing the latter to bbr. OpenAI SDK clients never send a non-JSON body.
  • Envoy health_checks: the BBR and ext_authz clusters are generated by Istio, and BBR serves gRPC health only on a dedicated port. Readiness probes reach the same result through EDS.

Remaining gaps are kept explicit: the llm-gateway-auth 401/403 envelope stays a cross-repo TBD, and the Test Plan marks the scenarios not covered yet. Status moves from provisional to implementable.

Requirements

  • added unit tests and e2e tests (if applicable).

Issue Fixed:

… implementation

- Render the cluster-filter outage codes from the per-namespace
  consolidated local_reply in charts/modelharness; drop the cluster-wide
  local_reply in charts/productionstack and the duplicate bbr_unavailable
  row, and move the fail-closed filter requirements to modelharness.
- Remove mesh_config_invalid, whose MeshConfig wiring no longer exists.
- Narrow invalid_request_body to a JSON body without a model field and
  document BBR's native 400 for a non-JSON body as a passed-through
  exception, with the reason for not rewriting it.
- Describe HA as implemented: readiness probes drive the EDS endpoint
  set, BBR adds passive outlier detection, and ext_authz relies on
  replicas and readiness with an accepted 502 window.
- Point the Test Plan at the real *_spec.go files with a coverage status
  column, cover gateway_unavailable through the status reporter, and
  drop the ext_authz single-replica and upstream-timeout rows.
- Fix the Story 4/5 examples and move the status to implementable.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: rambohe-ch <rambohe.ch@gmail.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant