Repository navigation
fix: binary vector matching raises Loki's error text at Loki's step - #742
Conversation
⚪ Performance A/B: no change beyond noise54 shape×range — 54 ⚪ same · results vs Loki: 50 same, 0 new difference(s), 4 pre-existing Loki profiles compared (like for like):
Every shape is within noise of the base build (±30% and 100 ms). 54 unchanged shape×range (within noise)
Cold (first-run) timings — what a user opening a panel sees
† Loki's results cache answered this cold run (its own counters, or identical answers for windows a minute apart): not a computed time, so it is in no ratio. ↺ Loki cold taken from the first set that ran the same query; Loki's cache answered this one. 3 shape×range above 2× Loki already (listed, or as slow on the base build)
Why these shapes
base |
✅ Visual smoke: passedBase
Gate: a base-vs-PR data difference passes when the PR is closer to Loki, and fails when the PR diverges from Loki or Loki cannot decide it (at a range Loki does not hold, a difference passes when the same page proved that query to answer like Loki at a shorter range; otherwise label the pull request Core set montages (5): base | PR | Lokidd-fields-1h dd-landing-1h dd-service-logs-1h explore-logs-plain-1h explore-metric-plain-1h All montages of this run: |
PR Quality ReportCompared against base branch Coverage and tests
Compatibility
Performance smokeLower CPU cost (
State
|
6c2ff79 to
504ee73
Compare
…p where Loki fails The right-hand duplicate error joined its two halves with "; " where Loki v3.7.7 uses ";" (evaluator.go vectorBinop). The cardinality checks ran over every step before the group-label checks, where Loki stops at the first failing step. Adds a differential test against a reference written from vectorBinop, an ignoring() edge table, handler tests on range and instant queries and the live comparison with Loki.
504ee73 to
896c4d1
Compare





Summary
Join fixes for
semantics/binary-ignoring-matching. The row stays open: its symptom,sum by (cluster) (A + ignoring(machine) B)answering about 150× Loki, is the aggregation-over-binary bug that #741 fixes. A top-levelA + ignoring(machine) Balready matched Loki.This PR makes the join itself match Loki 3.7.7 (
pkg/logql/evaluator.go:945-1128):found duplicate series on the right hand-side;many-to-many matching not allowed: matching labels must be unique on one side. There is no space after;, and the message says "left" forgroup_right(evaluator.go:974-975). The proxy wrote; many-to-many.firstVectorMatchFailureandvectorMatchCounts.No VictoriaLogs query changes. The join runs on the already-aggregated operand series.
Tests
TestBinaryMatchingErrorTextAndStepOrderandTestBinaryIgnoringMatchingEdgeTable(13 cases: label absent, empty or one-sided; comparison filter andbool;on;group_leftinclude).TestBinaryIgnoringThroughHandler, range and instant.TestBinaryMatchingDifferential: 6,000 generated cases against a reference ported fromvectorBinop,matchingSignature,resultMetricandMergeBinOp.TestCompat_BinaryIgnoringAbsentLabelcovers the join.TestCompat_BinaryIgnoringOuterSumcovers the row's shape and passes once fix: an aggregation over a binary expression aggregates the whole binary, like Loki #741 merges.Pending before ready
x / 0gives ±Inf where Loki's MergeBinOp gives NaN.