From 43871e79c6e2b91ce872a7773d4f19c5aba05e0e Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sat, 25 Jul 2020 16:59:29 +0300 Subject: [PATCH] app/vmselect/promql: avoid dropping `inf` bucket in `buckets_limit` The `le="inf"` bucket must be preserved in order to maintain the maximum level of accuracy. --- app/vmselect/promql/transform.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/vmselect/promql/transform.go b/app/vmselect/promql/transform.go index 800fb57209..003074fba0 100644 --- a/app/vmselect/promql/transform.go +++ b/app/vmselect/promql/transform.go @@ -363,9 +363,11 @@ func transformBucketsLimit(tfa *transformFuncArg) ([]*timeseries, error) { xxMinIdx = i } } - if xxMinIdx+1 < len(leGroup) { - leGroup[xxMinIdx+1].hits += leGroup[xxMinIdx].hits + if xxMinIdx+1 == len(leGroup) { + // Merge the `inf` bucket with the previous bucket in order to save accuracy. + xxMinIdx-- } + leGroup[xxMinIdx+1].hits += leGroup[xxMinIdx].hits leGroup = append(leGroup[:xxMinIdx], leGroup[xxMinIdx+1:]...) } for _, xx := range leGroup {