From 0ae2fbaa2028aad2a51563e376ad75269e4c90f5 Mon Sep 17 00:00:00 2001 From: zz_y Date: Wed, 13 May 2026 08:04:54 -0600 Subject: [PATCH] refactor(sketch_db): move warm_tier reducer to sketch_db/query/ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Post-M2.3 reorg #4 of 8. Moves `query_engines/asap_query_engine/warm_tier/` → `sketch_db/query/`. Pairs the warm-tier read code with the data it reads, mirroring how `backfill/` is paired with the data it writes. The warm-tier reducer is sketch-DB-specific (decodes sketches, runs them against a SketchStore) — it doesn't belong under the backend-agnostic `query_engines/` umbrella. `asap_query_engine/mod.rs` re-exports `pub use crate::storage_engines::sketch_db::query as warm_tier` so the engine's internal references (and any `warm_tier::*` callers) keep compiling at the legacy path. 5 files relocated. 783/783 lib tests pass. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../query_engines/asap_query_engine/engine.rs | 18 +++++++++--------- .../src/query_engines/asap_query_engine/mod.rs | 5 ++++- .../src/storage_engines/sketch_db/mod.rs | 1 + .../sketch_db/query}/decoders.rs | 2 +- .../sketch_db/query}/delta_apply.rs | 2 +- .../sketch_db/query}/mod.rs | 0 .../sketch_db/query}/sketch_reducer.rs | 4 ++-- .../sketch_db/query}/tests.rs | 2 +- 8 files changed, 19 insertions(+), 15 deletions(-) rename data_plane/src/{query_engines/asap_query_engine/warm_tier => storage_engines/sketch_db/query}/decoders.rs (98%) rename data_plane/src/{query_engines/asap_query_engine/warm_tier => storage_engines/sketch_db/query}/delta_apply.rs (99%) rename data_plane/src/{query_engines/asap_query_engine/warm_tier => storage_engines/sketch_db/query}/mod.rs (100%) rename data_plane/src/{query_engines/asap_query_engine/warm_tier => storage_engines/sketch_db/query}/sketch_reducer.rs (99%) rename data_plane/src/{query_engines/asap_query_engine/warm_tier => storage_engines/sketch_db/query}/tests.rs (99%) diff --git a/data_plane/src/query_engines/asap_query_engine/engine.rs b/data_plane/src/query_engines/asap_query_engine/engine.rs index 2211cbaa..79b1ea12 100644 --- a/data_plane/src/query_engines/asap_query_engine/engine.rs +++ b/data_plane/src/query_engines/asap_query_engine/engine.rs @@ -3310,7 +3310,7 @@ impl ASAPQueryEngine { // to the next compatible backend. // --------------------------------------------------------------------------- -/// Adapt a [`crate::query_engines::asap_query_engine::warm_tier::WarmTierResult`] to the engine's +/// Adapt a [`crate::storage_engines::sketch_db::query::WarmTierResult`] to the engine's /// existing `QueryResult` shape. The reducer hands back per-series /// time-stamped scalars; we materialize them as a /// `QueryResult::Matrix` whose [`crate::query_engines::query_result::RangeVectorElement`]s @@ -3382,7 +3382,7 @@ fn stitch_warm_and_archive( } fn warm_tier_result_to_query_result( - result: crate::query_engines::asap_query_engine::warm_tier::WarmTierResult, + result: crate::storage_engines::sketch_db::query::WarmTierResult, _now_ms: u64, ) -> crate::query_engines::query_result::QueryResult { use crate::storage_engines::types::KeyByLabelValues; @@ -3502,14 +3502,14 @@ impl crate::query_engines::routing::query_engine_routing::QueryEngine for ASAPQu // for instant-vector candidates (range_seconds == 0). const DEFAULT_LOOKBACK_MS: u64 = 5 * 60 * 1000; - let reducer = crate::query_engines::asap_query_engine::warm_tier::SketchReducer::new(idx); + let reducer = crate::storage_engines::sketch_db::query::SketchReducer::new(idx); // Multi-candidate aggregation is deferred (single-result // shapes today). On the first reducer error we surface // CapabilityMiss; on Ok we keep the result for the // hybrid-stitch path below. (When more than one // candidate is supported, a follow-up will fold // per-candidate WarmTierResults.) - let mut combined_result: Option = + let mut combined_result: Option = None; let mut combined_t0: u64 = u64::MAX; @@ -3594,7 +3594,7 @@ impl crate::query_engines::routing::query_engine_routing::QueryEngine for ASAPQu ) { Ok(r) => r, Err( - crate::query_engines::asap_query_engine::warm_tier::WarmTierError::UnsupportedFunction( + crate::storage_engines::sketch_db::query::WarmTierError::UnsupportedFunction( name, ), ) => { @@ -3606,7 +3606,7 @@ impl crate::query_engines::routing::query_engine_routing::QueryEngine for ASAPQu ), )); } - Err(crate::query_engines::asap_query_engine::warm_tier::WarmTierError::UnsupportedCapability { + Err(crate::storage_engines::sketch_db::query::WarmTierError::UnsupportedCapability { function, capability}) => { return Err(crate::query_engines::EngineError::capability_miss( @@ -3617,7 +3617,7 @@ impl crate::query_engines::routing::query_engine_routing::QueryEngine for ASAPQu ), )); } - Err(crate::query_engines::asap_query_engine::warm_tier::WarmTierError::DeserializeFailure { + Err(crate::storage_engines::sketch_db::query::WarmTierError::DeserializeFailure { sid, encoding, reason}) => { @@ -3630,7 +3630,7 @@ impl crate::query_engines::routing::query_engine_routing::QueryEngine for ASAPQu ), )); } - Err(crate::query_engines::asap_query_engine::warm_tier::WarmTierError::NoData { + Err(crate::storage_engines::sketch_db::query::WarmTierError::NoData { metric_name: m}) => { return Err(crate::query_engines::EngineError::capability_miss( asap_types::StorageBackend::SketchStore.data_source_id(), @@ -3640,7 +3640,7 @@ impl crate::query_engines::routing::query_engine_routing::QueryEngine for ASAPQu ), )); } - Err(crate::query_engines::asap_query_engine::warm_tier::WarmTierError::MissingHeap { + Err(crate::storage_engines::sketch_db::query::WarmTierError::MissingHeap { sid, sketch_kind}) => { return Err(crate::query_engines::EngineError::capability_miss( diff --git a/data_plane/src/query_engines/asap_query_engine/mod.rs b/data_plane/src/query_engines/asap_query_engine/mod.rs index cf475a2f..24e712d0 100644 --- a/data_plane/src/query_engines/asap_query_engine/mod.rs +++ b/data_plane/src/query_engines/asap_query_engine/mod.rs @@ -10,7 +10,10 @@ //! the JSONL leg has been deleted). pub mod engine; -pub mod warm_tier; + +// Phase-5 reorg: warm-tier reducer moved to `sketch_db::query`. The +// engine still consumes it via that canonical path. +pub use crate::storage_engines::sketch_db::query as warm_tier; #[cfg(test)] pub mod tests; diff --git a/data_plane/src/storage_engines/sketch_db/mod.rs b/data_plane/src/storage_engines/sketch_db/mod.rs index a0b7ba41..7075eda8 100644 --- a/data_plane/src/storage_engines/sketch_db/mod.rs +++ b/data_plane/src/storage_engines/sketch_db/mod.rs @@ -34,6 +34,7 @@ pub mod data; pub mod index; pub mod metrics; pub mod persistence; +pub mod query; pub mod schema; pub use accuracy::{AccuracyEnvelope, AccuracyKind, AccuracyProfile, PerSegmentAccuracy}; diff --git a/data_plane/src/query_engines/asap_query_engine/warm_tier/decoders.rs b/data_plane/src/storage_engines/sketch_db/query/decoders.rs similarity index 98% rename from data_plane/src/query_engines/asap_query_engine/warm_tier/decoders.rs rename to data_plane/src/storage_engines/sketch_db/query/decoders.rs index a9fa8dd0..9fd02a76 100644 --- a/data_plane/src/query_engines/asap_query_engine/warm_tier/decoders.rs +++ b/data_plane/src/storage_engines/sketch_db/query/decoders.rs @@ -1,7 +1,7 @@ //! Per-sketch-kind decoder helpers — out-of-line wrappers around //! `asap_sketchlib` deserialize / proto-decode paths. //! -//! Lifted from the inline closures in [`crate::query_engines::asap_query_engine::warm_tier::sketch_reducer`] +//! Lifted from the inline closures in [`crate::storage_engines::sketch_db::query::sketch_reducer`] //! once the reducer started decoding CMS / CountSketch / CMS-with-heap //! payloads in addition to DDSketch / KLL / HLL. The CMS / CountSketch //! / CMS-with-heap decoders mirror diff --git a/data_plane/src/query_engines/asap_query_engine/warm_tier/delta_apply.rs b/data_plane/src/storage_engines/sketch_db/query/delta_apply.rs similarity index 99% rename from data_plane/src/query_engines/asap_query_engine/warm_tier/delta_apply.rs rename to data_plane/src/storage_engines/sketch_db/query/delta_apply.rs index 706b5a31..6f66e13e 100644 --- a/data_plane/src/query_engines/asap_query_engine/warm_tier/delta_apply.rs +++ b/data_plane/src/storage_engines/sketch_db/query/delta_apply.rs @@ -9,7 +9,7 @@ //! format ships a sparse-but-mergeable sketch fragment. //! //! Two reducer modes, picked by the PromQL function name in -//! [`crate::query_engines::asap_query_engine::warm_tier::sketch_reducer`]: +//! [`crate::storage_engines::sketch_db::query::sketch_reducer`]: //! //! * **per-window** (`quantile`, `histogram_quantile`, //! `cardinality_estimate`): emit one scalar per window. A `Full` diff --git a/data_plane/src/query_engines/asap_query_engine/warm_tier/mod.rs b/data_plane/src/storage_engines/sketch_db/query/mod.rs similarity index 100% rename from data_plane/src/query_engines/asap_query_engine/warm_tier/mod.rs rename to data_plane/src/storage_engines/sketch_db/query/mod.rs diff --git a/data_plane/src/query_engines/asap_query_engine/warm_tier/sketch_reducer.rs b/data_plane/src/storage_engines/sketch_db/query/sketch_reducer.rs similarity index 99% rename from data_plane/src/query_engines/asap_query_engine/warm_tier/sketch_reducer.rs rename to data_plane/src/storage_engines/sketch_db/query/sketch_reducer.rs index b615ebd6..064b20d2 100644 --- a/data_plane/src/query_engines/asap_query_engine/warm_tier/sketch_reducer.rs +++ b/data_plane/src/storage_engines/sketch_db/query/sketch_reducer.rs @@ -57,11 +57,11 @@ use asap_sketchlib::sketches::ddsketch::DdSketch; use asap_sketchlib::sketches::hll::HllSketch; use asap_sketchlib::sketches::kll::KllSketch; -use crate::query_engines::asap_query_engine::warm_tier::decoders::{ +use crate::storage_engines::sketch_db::query::decoders::{ decode_cms_from_msgpack, decode_cms_from_proto, decode_cms_with_heap_from_msgpack, decode_cs_from_msgpack, decode_cs_from_proto, }; -use crate::query_engines::asap_query_engine::warm_tier::delta_apply::{ +use crate::storage_engines::sketch_db::query::delta_apply::{ cumulative_evaluate, per_window_evaluate, DeltaSketchKind, }; use crate::storage_engines::sketch_db::index::{ diff --git a/data_plane/src/query_engines/asap_query_engine/warm_tier/tests.rs b/data_plane/src/storage_engines/sketch_db/query/tests.rs similarity index 99% rename from data_plane/src/query_engines/asap_query_engine/warm_tier/tests.rs rename to data_plane/src/storage_engines/sketch_db/query/tests.rs index dfda1c38..e17d9e0c 100644 --- a/data_plane/src/query_engines/asap_query_engine/warm_tier/tests.rs +++ b/data_plane/src/storage_engines/sketch_db/query/tests.rs @@ -15,7 +15,7 @@ use std::collections::{BTreeMap, BTreeSet}; use asap_sketchlib::sketches::ddsketch::DdSketch; use asap_sketchlib::sketches::hll::{HllSketch, HllVariant}; -use crate::query_engines::asap_query_engine::warm_tier::{SketchReducer, WarmTierError}; +use crate::storage_engines::sketch_db::query::{SketchReducer, WarmTierError}; use crate::storage_engines::sketch_db::index::{ AccuracyBound, AggKind, Capability, SketchConfig, SketchEncoding, SketchStore, SketchInstanceMetadata, SketchKindHandle, SketchSampleState,