mirror of
https://github.com/prometheus/prometheus.git
synced 2026-02-19 02:29:16 -05:00
PromQL: Fix collision in label_join and label_replace with non-overlapping series.
Signed-off-by: Julien Pivotto <291750+roidelapluie@users.noreply.github.com>
This commit is contained in:
parent
6f18cc3074
commit
b336889d8f
2 changed files with 37 additions and 8 deletions
|
|
@ -1859,11 +1859,8 @@ func (ev *evaluator) evalLabelReplace(ctx context.Context, args parser.Expressio
|
|||
}
|
||||
}
|
||||
}
|
||||
if matrix.ContainsSameLabelset() {
|
||||
ev.errorf("vector cannot contain metrics with the same labelset")
|
||||
}
|
||||
|
||||
return matrix, ws
|
||||
return ev.mergeSeriesWithSameLabelset(matrix), ws
|
||||
}
|
||||
|
||||
// === Vector(s Scalar) (Vector, Annotations) ===
|
||||
|
|
@ -1913,11 +1910,8 @@ func (ev *evaluator) evalLabelJoin(ctx context.Context, args parser.Expressions)
|
|||
matrix[i].DropName = el.DropName
|
||||
}
|
||||
}
|
||||
if matrix.ContainsSameLabelset() {
|
||||
ev.errorf("vector cannot contain metrics with the same labelset")
|
||||
}
|
||||
|
||||
return matrix, ws
|
||||
return ev.mergeSeriesWithSameLabelset(matrix), ws
|
||||
}
|
||||
|
||||
// Common code for date related functions.
|
||||
|
|
|
|||
35
promql/promqltest/testdata/functions.test
vendored
35
promql/promqltest/testdata/functions.test
vendored
|
|
@ -2014,3 +2014,38 @@ eval instant at 0m scalar({type="histogram"})
|
|||
# One float in the vector.
|
||||
eval instant at 0m scalar({l="x"})
|
||||
1
|
||||
|
||||
clear
|
||||
load 20m
|
||||
series{label="a", idx="1"} 2 _
|
||||
series{label="a", idx="2"} _ 4
|
||||
|
||||
eval instant at 0 label_replace(series, "idx", "replaced", "idx", ".*")
|
||||
series{label="a", idx="replaced"} 2
|
||||
|
||||
eval instant at 20m label_replace(series, "idx", "replaced", "idx", ".*")
|
||||
series{label="a", idx="replaced"} 4
|
||||
|
||||
eval range from 0 to 20m step 20m label_replace(series, "idx", "replaced", "idx", ".*")
|
||||
series{label="a", idx="replaced"} 2 4
|
||||
|
||||
# Test label_join with non-overlapping series.
|
||||
eval instant at 0 label_join(series, "idx", ",", "label", "label")
|
||||
series{label="a", idx="a,a"} 2
|
||||
|
||||
eval instant at 20m label_join(series, "idx", ",", "label", "label")
|
||||
series{label="a", idx="a,a"} 4
|
||||
|
||||
eval range from 0 to 20m step 20m label_join(series, "idx", ",", "label", "label")
|
||||
series{label="a", idx="a,a"} 2 4
|
||||
|
||||
# Test label_replace failure with overlapping timestamps (same labelset at same time).
|
||||
clear
|
||||
load 1m
|
||||
overlap{label="a", idx="1"} 1
|
||||
overlap{label="a", idx="2"} 2
|
||||
|
||||
eval_fail instant at 0 label_replace(overlap, "idx", "same", "idx", ".*")
|
||||
|
||||
# Test label_join failure with overlapping timestamps (same labelset at same time).
|
||||
eval_fail instant at 0 label_join(overlap, "idx", ",", "label", "label")
|
||||
|
|
|
|||
Loading…
Reference in a new issue