Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
4dc08e5
feat: add shared summary kernels and typed physical values
zzylol Sep 29, 2026
fe80d7f
feat: add native physical operators and shared DAG runtime
zzylol Sep 29, 2026
0ced125
feat: compile Planner selections into physical DAG candidates
zzylol Sep 29, 2026
ee9e0b1
refactor!: move pane construction out of the physical layer
zzylol Sep 30, 2026
fb92998
docs: state what the physical layer does not own
zzylol Sep 30, 2026
ea0966d
refactor: move PromQL series-identity resolution into asap-types
zzylol Sep 29, 2026
fb824f9
feat: list PromQL physical alternatives in PlanSpace
zzylol Sep 29, 2026
c57d438
docs: describe per-root physical alternatives in candidate enumeration
zzylol Sep 29, 2026
a3b6f15
refactor: list only current-series heap alternatives in PlanSpace
zzylol Sep 30, 2026
c976d5c
docs: limit per-root PlanSpace alternatives to current-series heaps
zzylol Sep 30, 2026
166f257
feat: expose summary-maintenance lifecycle candidates for explicit bi…
zzylol Sep 29, 2026
07244ea
docs: describe lifecycle candidate enumeration and binding
zzylol Sep 29, 2026
590ec6d
feat: derive Post-ASAP execution timing from a lifecycle plan
zzylol Sep 30, 2026
9b6dd96
test: carry a chosen lifecycle through timing to physical compilation
zzylol Sep 30, 2026
3b281da
docs: state the lifecycle-owned timing layer contract
zzylol Sep 30, 2026
7293332
feat: derive physical candidates from one compilation
zzylol Sep 29, 2026
d1a82ae
docs: describe compile-once candidate cuts
zzylol Sep 29, 2026
8b59b4b
test: compare cut candidates by their serialized form
zzylol Sep 30, 2026
d9c794d
feat: derive the physical frontier from lifecycle timing
zzylol Sep 30, 2026
437a5dc
test: cut one compilation by chosen lifecycle timings
zzylol Sep 30, 2026
d133d35
docs: describe timing-derived candidate cuts
zzylol Sep 30, 2026
b89bd24
refactor: allow several helper operators per Planner node
zzylol Sep 30, 2026
1a7cbf2
test: expect retained frontier states read at query time or at the root
zzylol Sep 30, 2026
0ca3062
fix: keep a selected grouped Sum over realized Rate readouts
zzylol Sep 30, 2026
ff18c03
refactor!: remove timing-only Rate placement candidates
zzylol Sep 30, 2026
eb5885c
docs: describe grouped Rate->Sum placement as a lifecycle choice
zzylol Sep 30, 2026
0ed79d9
feat: plan maintained populations through summary lifecycles
zzylol Sep 30, 2026
4e01311
refactor: make maintained-population timing a lifecycle decision
zzylol Sep 30, 2026
761524e
test: carry a chosen population lifecycle to physical compilation
zzylol Sep 30, 2026
76c503e
docs: describe maintained populations as lifecycle-planned state
zzylol Sep 30, 2026
066bb72
fix: time a shared population by its summary consumer
zzylol Sep 30, 2026
d3372f5
integrate: read the population test frontier from lifecycle timing
zzylol Sep 30, 2026
7cc2d17
docs: inventory backend computation against physical compile coverage
zzylol Sep 30, 2026
a8c5d3f
feat(physical): compile maintained-population aggregate readouts
zzylol Sep 30, 2026
362203a
feat(physical): compile query-time arithmetic over grouped value rows
zzylol Sep 30, 2026
49cf044
fix(physical): finalize exact counts to declared Float64 values
zzylol Sep 30, 2026
3e2609a
docs: record covered and remaining physical compile gaps
zzylol Sep 30, 2026
644cd95
fix(physical): empty global population readouts and NaN quantile order
zzylol Sep 30, 2026
f9d8a3a
integrate: let coverage lowering chains use per-node helper indices
zzylol Sep 30, 2026
2416901
fix(promql): retain subquery offset and @ as a TimeShift
zzylol Sep 30, 2026
2cd0eec
feat(physical): add a PromQL per-series window operator
zzylol Sep 30, 2026
64a9cb6
feat(physical): compile PromQL fallback subtrees from typed expressions
zzylol Sep 30, 2026
fd0bb0a
docs: record PromQL fallback compile coverage
zzylol Sep 30, 2026
5f2a37c
feat(physical): compile irate, idelta, changes, resets, last and quan…
zzylol Sep 30, 2026
bd0b4cb
feat(physical): compile multi-selector PromQL fallbacks with matching…
zzylol Sep 30, 2026
e93bfaf
docs: record multi-selector PromQL fallback coverage and histogram_qu…
zzylol Sep 30, 2026
d4375b3
integrate: extend asap-types series identity with #486/#487 shapes
zzylol Sep 30, 2026
f950289
feat(physical): compile summaries over raw-sample precompute boundaries
zzylol Sep 30, 2026
c5bc826
fix(physical): canonical raw identities and checked raw heap items
zzylol Sep 30, 2026
f574c00
fix(physical): keep raw unit-frequency updates to unkeyed sketches
zzylol Sep 30, 2026
d8b185e
feat(kernels): validate exact state on deserialization
zzylol Sep 30, 2026
210cbe5
feat(kernels): adopt and expose UnivMon sketches, answer UnivMon read…
zzylol Sep 30, 2026
f77a5fc
feat(kernels): expose weighted frequency shape and byte codec
zzylol Sep 30, 2026
aebe2ea
feat(kernels): add AggregateCore::as_any_mut
zzylol Sep 30, 2026
6715f96
fix(mapping): type the summary state column of without aggregations
zzylol Sep 30, 2026
5e651f7
feat(physical): compile per-series vector arithmetic over stored read…
zzylol Sep 30, 2026
88c0478
fix(physical): compensate PromQL sums and averages like Prometheus
zzylol Sep 30, 2026
c543d8c
docs: record per-series arithmetic and compensated summation coverage
zzylol Sep 30, 2026
000c1ef
test: cover infinite sums and name removal on stored readouts; clarif…
zzylol Sep 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 38 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
[workspace]
members = [
"crates/asap-physical-operators",
"crates/types",
"crates/sql-function-catalog",
"crates/asap-aware-mapping",
Expand Down
15 changes: 8 additions & 7 deletions crates/asap-aware-mapping/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -221,13 +221,14 @@ pub use summary_maintenance_dag_export::{
};
pub use summary_maintenance_lifecycle::{
assemble_selected_dag_with_summary_maintenance_lifecycles,
global_selection_with_summary_maintenance_lifecycles, plan_summary_maintenance_lifecycles,
SummaryMaintenanceCapabilities, SummaryMaintenanceDeployment,
SummaryMaintenanceLifecycleAlternative, SummaryMaintenanceLifecycleAssemblyError,
SummaryMaintenanceLifecycleCapabilities, SummaryMaintenanceLifecycleCostInputs,
SummaryMaintenanceLifecyclePlan, SummaryMaintenanceLifecyclePlanError,
SummaryMaintenanceLifecycleRejection, SummaryMaintenanceLifecycleSelectionError,
WorkloadDemand,
enumerate_summary_maintenance_lifecycles, global_selection_with_summary_maintenance_lifecycles,
plan_summary_maintenance_lifecycles, SummaryMaintenanceCapabilities,
SummaryMaintenanceDeployment, SummaryMaintenanceLifecycleAlternative,
SummaryMaintenanceLifecycleAssemblyError, SummaryMaintenanceLifecycleCandidates,
SummaryMaintenanceLifecycleCapabilities, SummaryMaintenanceLifecycleChoiceError,
SummaryMaintenanceLifecycleCostInputs, SummaryMaintenanceLifecyclePlan,
SummaryMaintenanceLifecyclePlanError, SummaryMaintenanceLifecycleRejection,
SummaryMaintenanceLifecycleSelectionError, SummaryMaintenanceTimingError, WorkloadDemand,
};
pub use topk_reuse::TopKLimitReuseStrategy;

Expand Down
31 changes: 30 additions & 1 deletion crates/asap-aware-mapping/src/maintained_population.rs
Original file line number Diff line number Diff line change
Expand Up @@ -258,11 +258,15 @@ impl MaintainedPopulationStrategy {
schema: input_schema.clone(),
guarantee: Some(ResultGuarantee::exact("source samples")),
});
// Query time is only the initial layout: whether the population is
// retained at ingestion or rebuilt per query is its lifecycle choice
// (`SummaryMaintenanceLifecyclePlan::execution_timed_dag`). The readout
// and projection above it are query-time by construction.
let maintained = Rc::new(SummaryNode {
expr: SummaryExpr::ValueOperation {
child: scan,
operation: ValueOperation::MaintainPopulation { population },
timing: ExecutionTiming::IngestionTime,
timing: ExecutionTiming::QueryTime,
},
schema: input_schema,
guarantee: Some(ResultGuarantee::exact(
Expand Down Expand Up @@ -435,6 +439,31 @@ mod tests {
assert_eq!(p.grouping, ["instance"]);
assert_eq!(p.matchers[0].operation, CurrentSeriesMatch::Regex);
}
// Population timing is a lifecycle choice: a retained or rebuilt
// population both validate, while its readout must stay at query time.
#[test]
fn population_timing_is_not_structural() {
let root = lower("topk(5,a)");
let candidate = MaintainedPopulationStrategy::new(std::slice::from_ref(&root))
.candidate(&root)
.unwrap();
let with_timings = |population: ExecutionTiming, readout: ExecutionTiming| {
let mut node = (*candidate).clone();
let SummaryExpr::ValueOperation { child, timing, .. } = &mut node.expr else {
unreachable!()
};
*timing = readout;
let SummaryExpr::ValueOperation { timing, .. } = &mut Rc::make_mut(child).expr else {
unreachable!()
};
*timing = population;
compile_post_asap_dag(&Rc::new(node))
};
use ExecutionTiming::{IngestionTime, QueryTime};
assert!(with_timings(IngestionTime, QueryTime).is_ok());
assert!(with_timings(QueryTime, QueryTime).is_ok());
assert!(with_timings(IngestionTime, IngestionTime).is_err());
}
// A readout cannot reinterpret arbitrary rows as maintained state or exceed its producer's contract.
#[test]
fn malformed_population_dags_fail_closed() {
Expand Down
Loading
Loading