mirror of
https://github.com/SigNoz/signoz.git
synced 2026-08-06 13:10:40 +01:00
* feat(querier): wire clickhouseprometheusv2 for shadow comparison and pinned serving Stand up the v2 provider next to the default one and give the querier two flag-gated ways to exercise it, neither affecting default serving: - shadow: with use_prometheus_clickhouse_v2 on, every PromQL query re-runs on v2 after the response is sent; result diffs are logged. Bounded by a small per-process admission cap (skip, not queue, at the cap). - pin: the X-SigNoz-PromQL-Provider header serves the response from v2 directly, for side-by-side comparison by integration tests and support. Pinned requests bypass the cache in both directions. Typed storage errors (series/sample budgets) survive the engine's wrapping and surface as 4xx instead of internal 500s. PromQL results now carry ClickHouse scan stats. prometheus::provider: clickhousev2 also makes v2 the serving provider outright (no shadow in that mode - nothing to compare against). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * test(promql): replay the conformance corpus on both providers Every corpus case now runs twice — default provider, and pinned to clickhousev2 via the flag-gated X-SigNoz-PromQL-Provider header — each leg asserted against the same frozen expectations, each leg with its own known-divergences ledger enforced in both directions. The new known_divergences_v2.json is the rollout scorecard: the provider swap is measured by burning it to empty. The legs are never asserted against each other: both can sit within one rounding quantum of the expected value yet differ by up to two quanta at a rounding boundary, so a leg-vs-leg check would reintroduce the boundary noise the tolerance absorbs. Anchoring both to the same oracle over the same ingested bytes already localizes any disagreement to a provider. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>