From 848ef72100417a9ddc8038a62850945c47a691dc Mon Sep 17 00:00:00 2001 From: Fayzal Ghantiwala <114010985+fayzal-g@users.noreply.github.com> Date: Mon, 27 Jan 2025 15:56:06 +0000 Subject: [PATCH] Alerting: Check if pagination token is greater than or equal to (#99576) Use goe for token comparison --- pkg/services/ngalert/api/api_prometheus.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pkg/services/ngalert/api/api_prometheus.go b/pkg/services/ngalert/api/api_prometheus.go index a71f67819d7..22d09a91668 100644 --- a/pkg/services/ngalert/api/api_prometheus.go +++ b/pkg/services/ngalert/api/api_prometheus.go @@ -352,7 +352,7 @@ func PrepareRuleGroupStatuses(log log.Logger, manager state.AlertInstanceManager } if nextToken != "" && !foundToken { - if nextToken != getRuleGroupNextToken(rg.Folder, rg.GroupKey.RuleGroup) { + if !tokenGreaterThanOrEqual(getRuleGroupNextToken(rg.Folder, rg.GroupKey.RuleGroup), nextToken) { continue } foundToken = true @@ -394,6 +394,14 @@ func getRuleGroupNextToken(namespace, group string) string { return base64.URLEncoding.EncodeToString([]byte(namespace + "/" + group)) } +// Returns true if tokenA >= tokenB +func tokenGreaterThanOrEqual(tokenA string, tokenB string) bool { + decodedTokenA, _ := base64.URLEncoding.DecodeString(tokenA) + decodedTokenB, _ := base64.URLEncoding.DecodeString(tokenB) + + return string(decodedTokenA) >= string(decodedTokenB) +} + type ruleGroup struct { Folder string GroupKey ngmodels.AlertRuleGroupKey