Repository navigation
Conversation
…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.
⚪ Performance A/B: no change beyond noise17 shape×range — 17 ⚪ same · results vs Loki: 14 same, 0 new difference(s), 3 pre-existing Every shape is within noise of the base build (±30% and 100 ms). 17 unchanged shape×range (within noise)
Cold (first-run) timings — what a user opening a panel sees
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 it closer to 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
|





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.