mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-21 14:44:00 +00:00
app/vmselect/promql: properly handle foo or bar
queries
Such queries may miss `bar` results after the commit e7f1ceeb84
because common label filters from `foo` could be mistakenly applied to `bar`.
This commit is contained in:
parent
2cc5f2940f
commit
13c2692ca1
1 changed files with 9 additions and 3 deletions
|
@ -369,9 +369,15 @@ func execBinaryOpArgs(ec *EvalConfig, exprFirst, exprSecond metricsql.Expr, be *
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
lfs := getCommonLabelFilters(tssFirst)
|
switch strings.ToLower(be.Op) {
|
||||||
lfs = metricsql.TrimFiltersByGroupModifier(lfs, be)
|
case "or":
|
||||||
exprSecond = metricsql.PushdownBinaryOpFilters(exprSecond, lfs)
|
// Do not pushdown common label filters from tssFirst for `or` operation, since this can filter out the needed time series from tssSecond.
|
||||||
|
// See https://prometheus.io/docs/prometheus/latest/querying/operators/#logical-set-binary-operators for details.
|
||||||
|
default:
|
||||||
|
lfs := getCommonLabelFilters(tssFirst)
|
||||||
|
lfs = metricsql.TrimFiltersByGroupModifier(lfs, be)
|
||||||
|
exprSecond = metricsql.PushdownBinaryOpFilters(exprSecond, lfs)
|
||||||
|
}
|
||||||
tssSecond, err := evalExpr(ec, exprSecond)
|
tssSecond, err := evalExpr(ec, exprSecond)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
|
|
Loading…
Reference in a new issue