Merge pull request #17287 from linasm/reject-nan-histogram-custom-bounds
buf.build / lint and publish (push) Waiting to run
Details
CI / Go tests (push) Waiting to run
Details
CI / More Go tests (push) Waiting to run
Details
CI / Go tests with previous Go version (push) Waiting to run
Details
CI / UI tests (push) Waiting to run
Details
CI / Go tests on Windows (push) Waiting to run
Details
CI / Mixins tests (push) Waiting to run
Details
CI / Build Prometheus for common architectures (0) (push) Waiting to run
Details
CI / Build Prometheus for common architectures (1) (push) Waiting to run
Details
CI / Build Prometheus for common architectures (2) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (0) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (1) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (10) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (11) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (2) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (3) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (4) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (5) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (6) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (7) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (8) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (9) (push) Waiting to run
Details
CI / Report status of build Prometheus for all architectures (push) Blocked by required conditions
Details
CI / Check generated parser (push) Waiting to run
Details
CI / golangci-lint (push) Waiting to run
Details
CI / fuzzing (push) Waiting to run
Details
CI / codeql (push) Waiting to run
Details
CI / Publish main branch artifacts (push) Blocked by required conditions
Details
CI / Publish release artefacts (push) Blocked by required conditions
Details
CI / Publish UI on npm Registry (push) Blocked by required conditions
Details
Scorecards supply-chain security / Scorecards analysis (push) Waiting to run
Details
buf.build / lint and publish (push) Waiting to run
Details
CI / Go tests (push) Waiting to run
Details
CI / More Go tests (push) Waiting to run
Details
CI / Go tests with previous Go version (push) Waiting to run
Details
CI / UI tests (push) Waiting to run
Details
CI / Go tests on Windows (push) Waiting to run
Details
CI / Mixins tests (push) Waiting to run
Details
CI / Build Prometheus for common architectures (0) (push) Waiting to run
Details
CI / Build Prometheus for common architectures (1) (push) Waiting to run
Details
CI / Build Prometheus for common architectures (2) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (0) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (1) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (10) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (11) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (2) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (3) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (4) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (5) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (6) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (7) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (8) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (9) (push) Waiting to run
Details
CI / Report status of build Prometheus for all architectures (push) Blocked by required conditions
Details
CI / Check generated parser (push) Waiting to run
Details
CI / golangci-lint (push) Waiting to run
Details
CI / fuzzing (push) Waiting to run
Details
CI / codeql (push) Waiting to run
Details
CI / Publish main branch artifacts (push) Blocked by required conditions
Details
CI / Publish release artefacts (push) Blocked by required conditions
Details
CI / Publish UI on npm Registry (push) Blocked by required conditions
Details
Scorecards supply-chain security / Scorecards analysis (push) Waiting to run
Details
NHCB: Reject custom bucket bounds with NaN value
This commit is contained in:
commit
fe11cae637
|
@ -38,6 +38,7 @@ var (
|
|||
ErrHistogramCustomBucketsMismatch = errors.New("histogram custom bounds are too few")
|
||||
ErrHistogramCustomBucketsInvalid = errors.New("histogram custom bounds must be in strictly increasing order")
|
||||
ErrHistogramCustomBucketsInfinite = errors.New("histogram custom bounds must be finite")
|
||||
ErrHistogramCustomBucketsNaN = errors.New("histogram custom bounds must not be NaN")
|
||||
ErrHistogramsIncompatibleSchema = errors.New("cannot apply this operation on histograms with a mix of exponential and custom bucket schemas")
|
||||
ErrHistogramsIncompatibleBounds = errors.New("cannot apply this operation on custom buckets histograms with different custom bounds")
|
||||
ErrHistogramCustomBucketsZeroCount = errors.New("custom buckets: must have zero count of 0")
|
||||
|
@ -454,6 +455,9 @@ func checkHistogramBuckets[BC BucketCount, IBC InternalBucketCount](buckets []IB
|
|||
func checkHistogramCustomBounds(bounds []float64, spans []Span, numBuckets int) error {
|
||||
prev := math.Inf(-1)
|
||||
for _, curr := range bounds {
|
||||
if math.IsNaN(curr) {
|
||||
return ErrHistogramCustomBucketsNaN
|
||||
}
|
||||
if curr <= prev {
|
||||
return fmt.Errorf("previous bound is %f and current is %f: %w", prev, curr, ErrHistogramCustomBucketsInvalid)
|
||||
}
|
||||
|
|
|
@ -1565,6 +1565,27 @@ func TestHistogramValidation(t *testing.T) {
|
|||
CustomValues: []float64{1, 2, 3, 4, 5, 6, 7, 8},
|
||||
},
|
||||
},
|
||||
"reject custom buckets histogram with non-increasing bound": {
|
||||
h: &Histogram{
|
||||
Schema: CustomBucketsSchema,
|
||||
CustomValues: []float64{0, 0},
|
||||
},
|
||||
errMsg: "custom buckets: previous bound is 0.000000 and current is 0.000000: histogram custom bounds must be in strictly increasing order",
|
||||
},
|
||||
"reject custom buckets histogram with explicit +Inf bound": {
|
||||
h: &Histogram{
|
||||
Schema: CustomBucketsSchema,
|
||||
CustomValues: []float64{1, math.Inf(1)},
|
||||
},
|
||||
errMsg: "custom buckets: last +Inf bound must not be explicitly defined: histogram custom bounds must be finite",
|
||||
},
|
||||
"reject custom buckets histogram with NaN bound": {
|
||||
h: &Histogram{
|
||||
Schema: CustomBucketsSchema,
|
||||
CustomValues: []float64{1, math.NaN(), 3},
|
||||
},
|
||||
errMsg: "custom buckets: histogram custom bounds must not be NaN",
|
||||
},
|
||||
"schema too high": {
|
||||
h: &Histogram{
|
||||
Schema: 10,
|
||||
|
|
|
@ -129,6 +129,7 @@ func isHistogramValidationError(err error) bool {
|
|||
errors.Is(err, histogram.ErrHistogramCustomBucketsMismatch) ||
|
||||
errors.Is(err, histogram.ErrHistogramCustomBucketsInvalid) ||
|
||||
errors.Is(err, histogram.ErrHistogramCustomBucketsInfinite) ||
|
||||
errors.Is(err, histogram.ErrHistogramCustomBucketsNaN) ||
|
||||
errors.Is(err, histogram.ErrHistogramCustomBucketsZeroCount) ||
|
||||
errors.Is(err, histogram.ErrHistogramCustomBucketsZeroThresh) ||
|
||||
errors.Is(err, histogram.ErrHistogramCustomBucketsNegSpans) ||
|
||||
|
|
Loading…
Reference in New Issue