mirror of
https://github.com/prometheus/prometheus.git
synced 2025-02-06 10:02:45 +00:00
[FIX] PromQL: Updates annotation for bin op between incompatible histograms (#15895)
PromQL: Updates annotation for bin op between incompatible histograms --------- Signed-off-by: Neeraj Gartia <neerajgartia211002@gmail.com>
This commit is contained in:
parent
130cd024e0
commit
8be416a67c
@ -3475,15 +3475,14 @@ func handleVectorBinopError(err error, e *parser.BinaryExpr) annotations.Annotat
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
metricName := ""
|
||||
op := parser.ItemTypeStr[e.Op]
|
||||
pos := e.PositionRange()
|
||||
if errors.Is(err, annotations.PromQLInfo) || errors.Is(err, annotations.PromQLWarning) {
|
||||
return annotations.New().Add(err)
|
||||
}
|
||||
if errors.Is(err, histogram.ErrHistogramsIncompatibleSchema) {
|
||||
return annotations.New().Add(annotations.NewMixedExponentialCustomHistogramsWarning(metricName, pos))
|
||||
} else if errors.Is(err, histogram.ErrHistogramsIncompatibleBounds) {
|
||||
return annotations.New().Add(annotations.NewIncompatibleCustomBucketsHistogramsWarning(metricName, pos))
|
||||
// TODO(NeerajGartia21): Test the exact annotation output once the testing framework can do so.
|
||||
if errors.Is(err, histogram.ErrHistogramsIncompatibleSchema) || errors.Is(err, histogram.ErrHistogramsIncompatibleBounds) {
|
||||
return annotations.New().Add(annotations.NewIncompatibleBucketLayoutInBinOpWarning(op, pos))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -143,6 +143,7 @@ var (
|
||||
NativeHistogramNotGaugeWarning = fmt.Errorf("%w: this native histogram metric is not a gauge:", PromQLWarning)
|
||||
MixedExponentialCustomHistogramsWarning = fmt.Errorf("%w: vector contains a mix of histograms with exponential and custom buckets schemas for metric name", PromQLWarning)
|
||||
IncompatibleCustomBucketsHistogramsWarning = fmt.Errorf("%w: vector contains histograms with incompatible custom buckets for metric name", PromQLWarning)
|
||||
IncompatibleBucketLayoutInBinOpWarning = fmt.Errorf("%w: incompatible bucket layout encountered for binary operator", PromQLWarning)
|
||||
|
||||
PossibleNonCounterInfo = fmt.Errorf("%w: metric might not be a counter, name does not end in _total/_sum/_count/_bucket:", PromQLInfo)
|
||||
HistogramQuantileForcedMonotonicityInfo = fmt.Errorf("%w: input to histogram_quantile needed to be fixed for monotonicity (see https://prometheus.io/docs/prometheus/latest/querying/functions/#histogram_quantile) for metric name", PromQLInfo)
|
||||
@ -295,9 +296,20 @@ func NewHistogramIgnoredInAggregationInfo(aggregation string, pos posrange.Posit
|
||||
}
|
||||
}
|
||||
|
||||
// NewHistogramIgnoredInMixedRangeInfo is used when a histogram is ignored
|
||||
// in a range vector which contains mix of floats and histograms.
|
||||
func NewHistogramIgnoredInMixedRangeInfo(metricName string, pos posrange.PositionRange) error {
|
||||
return annoErr{
|
||||
PositionRange: pos,
|
||||
Err: fmt.Errorf("%w %q", HistogramIgnoredInMixedRangeInfo, metricName),
|
||||
}
|
||||
}
|
||||
|
||||
// NewIncompatibleBucketLayoutInBinOpWarning is used if binary operators act on a
|
||||
// combination of two incompatible histograms.
|
||||
func NewIncompatibleBucketLayoutInBinOpWarning(operator string, pos posrange.PositionRange) error {
|
||||
return annoErr{
|
||||
PositionRange: pos,
|
||||
Err: fmt.Errorf("%w %s", IncompatibleBucketLayoutInBinOpWarning, operator),
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user