Problem
DDSketchAccumulatorUpdater::validate_single_input (crates/asap-physical-operators/src/summary_kernels/factory.rs:140) accepts only values that are finite, > 0.0, and within [min_indexable, max_indexable]. Everything else fails with "DDS maintenance input is outside its positive representable domain".
build_summary (operators/summary/mod.rs:445) propagates that error with ?, so a single 0 sample fails the whole summary update. Downstream in ASAPQuery-backend, this permanently breaks the DDS worker until it is restarted (ProjectASAP/ASAPQuery-backend#773). Real metrics contain zeros all the time. In the network-control demo, idle tasks report network_mbps = 0.
Why the check can go
The pinned asap_sketchlib (5f03ccbd, and current main) handles the full signed domain in DDSketch::try_add:
0 and magnitudes below min_indexable go to zero_count
- negative values go to
negative_store
- the only rejections are non-finite values and
|v| > max_indexable, and try_add reports those as errors itself
So the planner-side check is stricter than the sketch, and it rejects valid input.
Proposal
Relax the check to match sketchlib, i.e. value.is_finite() && value.abs() <= maximum, or call try_add and map its error. Add a test showing that 0, negative, and sub-min_indexable inputs are accepted and that quantiles over them are correct.
The quantile-ratio certificate (quantile_input_domain, see #446) needs a denominator domain that excludes zero. That is a planning-time property, separate from maintenance, and per-sample validation should not enforce it.
Problem
DDSketchAccumulatorUpdater::validate_single_input(crates/asap-physical-operators/src/summary_kernels/factory.rs:140) accepts only values that are finite,> 0.0, and within[min_indexable, max_indexable]. Everything else fails with "DDS maintenance input is outside its positive representable domain".build_summary(operators/summary/mod.rs:445) propagates that error with?, so a single0sample fails the whole summary update. Downstream in ASAPQuery-backend, this permanently breaks the DDS worker until it is restarted (ProjectASAP/ASAPQuery-backend#773). Real metrics contain zeros all the time. In the network-control demo, idle tasks reportnetwork_mbps = 0.Why the check can go
The pinned asap_sketchlib (
5f03ccbd, and current main) handles the full signed domain inDDSketch::try_add:0and magnitudes belowmin_indexablego tozero_countnegative_store|v| > max_indexable, andtry_addreports those as errors itselfSo the planner-side check is stricter than the sketch, and it rejects valid input.
Proposal
Relax the check to match sketchlib, i.e.
value.is_finite() && value.abs() <= maximum, or calltry_addand map its error. Add a test showing that0, negative, and sub-min_indexableinputs are accepted and that quantiles over them are correct.The quantile-ratio certificate (
quantile_input_domain, see #446) needs a denominator domain that excludes zero. That is a planning-time property, separate from maintenance, and per-sample validation should not enforce it.