From 386fc8b9f69c0ac5ca81273a145ced408ea9d6d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gy=C3=B6rgy=20Krajcsovits?= Date: Tue, 13 Aug 2024 15:26:07 +0200 Subject: [PATCH] Update from review comments. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: György Krajcsovits --- promql/promqltest/testdata/histograms.test | 5 +---- promql/promqltest/testdata/native_histograms.test | 13 +++++++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/promql/promqltest/testdata/histograms.test b/promql/promqltest/testdata/histograms.test index 70df9434e..47cba7993 100644 --- a/promql/promqltest/testdata/histograms.test +++ b/promql/promqltest/testdata/histograms.test @@ -497,8 +497,7 @@ eval instant at 5m rate(const_histogram_bucket[5m]) {le="2.0"} 0 {le="+Inf"} 0 -# There is no change to the bucket count over time, thus rate is 0 in each bucket. -# However native histograms do not represent empty buckets, so here the zeros are implicit. +# Native histograms do not represent empty buckets, so here the zeros are implicit. eval instant at 5m rate(const_histogram[5m]) {} {{schema:-53 sum:0 count:0 custom_values:[0.0 1.0 2.0]}} @@ -507,7 +506,5 @@ eval instant at 5m rate(const_histogram[5m]) eval instant at 5m histogram_quantile(1.0, sum by (le) (rate(const_histogram_bucket[5m]))) {} NaN -# Zero buckets mean no observations, so there is no value that observations fall below, -# which means that any quantile is a NaN. eval instant at 5m histogram_quantile(1.0, sum(rate(const_histogram[5m]))) {} NaN diff --git a/promql/promqltest/testdata/native_histograms.test b/promql/promqltest/testdata/native_histograms.test index 948e15806..c2a5012e9 100644 --- a/promql/promqltest/testdata/native_histograms.test +++ b/promql/promqltest/testdata/native_histograms.test @@ -794,7 +794,8 @@ load 1m eval instant at 5m rate(const_histogram[5m]) {} {{schema:0 sum:0 count:0}} -# Zero buckets mean no observations, so average has no meaningful value. +# Zero buckets mean no observations, thus the denominator in the average is 0 +# leading to 0/0, which is NaN. eval instant at 5m histogram_avg(rate(const_histogram[5m])) {} NaN @@ -802,15 +803,19 @@ eval instant at 5m histogram_avg(rate(const_histogram[5m])) eval instant at 5m histogram_count(rate(const_histogram[5m])) {} 0.0 -# Zero buckets mean no observations, so the sum should be NaN, However -# we return 0 for compatibility with classic histograms. +# Zero buckets mean no observations and empty histogram has a sum of 0 by definition. eval instant at 5m histogram_sum(rate(const_histogram[5m])) {} 0.0 -# BUG??? Zero buckets mean no observations, thus any fraction should be 0. +# Zero buckets mean no observations, thus the denominator in the fraction is 0, +# leading to 0/0, which is NaN. eval instant at 5m histogram_fraction(0.0, 1.0, rate(const_histogram[5m])) {} NaN +# Workaround to calculate the observation count corresponding to NaN fraction. +eval instant at 5m histogram_count(rate(const_histogram[5m])) == 0.0 or histogram_fraction(0.0, 1.0, rate(const_histogram[5m])) * histogram_count(rate(const_histogram[5m])) + {} 0.0 + # Zero buckets mean no observations, so there is no value that observations fall below, # which means that any quantile is a NaN. eval instant at 5m histogram_quantile(1.0, rate(const_histogram[5m]))