From e0f4d518d54fad8869df432c676d2211ba5a8d92 Mon Sep 17 00:00:00 2001 From: Shvejan Mutheboyina Date: Thu, 26 Mar 2026 06:46:31 +0000 Subject: [PATCH 1/2] bugfix sort after merging histogram metrics Signed-off-by: Shvejan Mutheboyina --- CHANGELOG.md | 1 + pkg/util/metrics_helper.go | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52e44b86fd..cc8c5f955b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * [ENHANCEMENT] Tenant Federation: Add a local cache to regex resolver. #7363 * [ENHANCEMENT] Query Scheduler: Add `cortex_query_scheduler_tracked_requests` metric to track the current number of requests held by the scheduler. #7355 * [BUGFIX] Fix nil when ingester_query_max_attempts > 1. #7369 +* [BUGFIX] Metrics Helper: Fix non-deterministic bucket order in merged histograms by sorting buckets after map iteration, matching Prometheus client library behavior. #7379 ## 1.21.0 in progress diff --git a/pkg/util/metrics_helper.go b/pkg/util/metrics_helper.go index 6dbe6348db..a318582dd7 100644 --- a/pkg/util/metrics_helper.go +++ b/pkg/util/metrics_helper.go @@ -1129,6 +1129,10 @@ func mergeHistogram(mf1, mf2 *dto.Metric) { ccValue := cumulativeCount newBucket = append(newBucket, &dto.Bucket{UpperBound: &ubValue, CumulativeCount: &ccValue}) } + // Sort buckets by UpperBound to ensure deterministic order + sort.Slice(newBucket, func(i, j int) bool { + return newBucket[i].GetUpperBound() < newBucket[j].GetUpperBound() + }) h1.Bucket = newBucket } } From f263b71d1dc010c1323bbfdef6870a1f4b8467b9 Mon Sep 17 00:00:00 2001 From: Ben Ye Date: Thu, 26 Mar 2026 20:48:54 -0700 Subject: [PATCH 2/2] Update CHANGELOG.md Co-authored-by: SungJin1212 Signed-off-by: Ben Ye --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc8c5f955b..4f4f072538 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ * [ENHANCEMENT] Tenant Federation: Add a local cache to regex resolver. #7363 * [ENHANCEMENT] Query Scheduler: Add `cortex_query_scheduler_tracked_requests` metric to track the current number of requests held by the scheduler. #7355 * [BUGFIX] Fix nil when ingester_query_max_attempts > 1. #7369 -* [BUGFIX] Metrics Helper: Fix non-deterministic bucket order in merged histograms by sorting buckets after map iteration, matching Prometheus client library behavior. #7379 +* [BUGFIX] Metrics Helper: Fix non-deterministic bucket order in merged histograms by sorting buckets after map iteration, matching Prometheus client library behavior. #7380 ## 1.21.0 in progress