Skip to content

backend-plan: serving-time cutover -- prefer plan over SketchStore reconstruction (Phase 4) - #441

Merged
zzylol merged 1 commit into
mainfrom
feat/backend-plan-serving-cutover-v2
Jul 30, 2026
Merged

zzylol merged 1 commit into
mainfrom
feat/backend-plan-serving-cutover-v2

Conversation

@zzylol

@zzylol zzylol commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Recreated after #439 got tangled in the base-branch chain when #438 was recreated as #440 (see #440's description). Same content, now rebased directly onto main.

Summary

Final phase of the BackendPlan cutover (control_plane/docs/design-backend-plan-wire-format.md): serving time (l4_lowering.rs) now reads planning's real family/params decision directly off an installed BackendPlan when it covers the query's metric, instead of always reconstructing it from SketchStore metadata via ObservedFamilyCostModel.

  • observed_family_for_metric_from_plan — reads Materialization.kind/.params directly off the plan; no AggregationConfig reconstruction needed (they already are the pair ObservedFamilyCostModel wants).
  • lower_promql_to_l4node tries the plan first, falls back to the existing SketchStore-reconstruction path when no plan is installed or it doesn't cover the metric — additive, not a replacement.
  • ASAPQueryEngine gets a HotReloadBackendPlan handle, shared with the HTTP server in main.rs (same sharing contract as hot_reload_config), so a POST /api/v1/backend-plan is observable by the next query.
  • ObservedFamilyCostModel's doc updated: fallback status, not dead code.

Test plan

  • New unit tests in l4_lowering.rs::tests::backend_plan_cutover — the load-bearing one (a_plan_materialization_wins_over_sketchstore_reconstruction) registers a Kll sid in SketchStore but installs a plan declaring DDSketch for the same metric, and asserts the bound L4Node uses DDSketch. Two companion tests confirm the no-plan and plan-doesn't-cover-this-metric fallback paths are unchanged.
  • cargo test --release --lib -p control_plane — 732/732.
  • cargo test --release --lib -p data_plane — 915/915 (2 pre-existing ignores).
  • cargo build --release --workspace — clean.

…ore reconstruction (Phase 4)

Completes the BackendPlan wire-format cutover
(control_plane/docs/design-backend-plan-wire-format.md). Serving time
now reads planning's real family/params decision directly off an
installed BackendPlan when one covers the query's metric, instead of
always reconstructing it from SketchStore metadata.

- l4_lowering.rs: new observed_family_for_metric_from_plan() reads
  Materialization.kind/.params directly (no AggregationConfig
  reconstruction needed -- they already are the (SummaryKind,
  SummaryParams) pair this needs). lower_promql_to_l4node() now takes
  an Option<&BackendPlan> and tries the plan first, falling back to the
  existing SketchStore-reconstruction path (observed_family_for_metric /
  ObservedFamilyCostModel) when no plan is installed or it doesn't cover
  the metric. Three new unit tests prove: (1) SketchStore reconstruction
  still works with no plan, (2) a plan materialization WINS over a
  disagreeing SketchStore registration for the same metric, (3) a plan
  that doesn't cover the metric falls through to SketchStore
  reconstruction rather than silently failing to observe anything.
- l4_readout.rs / live_serve.rs: thread the same Option<&BackendPlan>
  parameter through unchanged otherwise.
- engine.rs: ASAPQueryEngine gains a HotReloadBackendPlan handle
  (with_hot_reload_backend_plan) and a backend_plan_snapshot() helper;
  both live-serving call sites (range + instant query) pass the current
  snapshot through.
- main.rs: the HotReloadBackendPlan handle is now shared between the
  query engine and the HTTP server (previously only the latter), so a
  POST /api/v1/backend-plan is observable by the next query, same
  sharing contract as hot_reload_config.
- cost_model.rs: ObservedFamilyCostModel's doc updated to reflect its
  new fallback status.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@zzylol
zzylol merged commit 667c6c8 into main Jul 30, 2026
@zzylol
zzylol deleted the feat/backend-plan-serving-cutover-v2 branch July 30, 2026 05:01
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