From a97576fc00bc821843726faaa48582213a1499c7 Mon Sep 17 00:00:00 2001 From: Dimitar Dimitrov Date: Fri, 26 Nov 2021 14:04:46 +0100 Subject: [PATCH] Ignore order when comparing the source tenants of two rule groups --- rules/manager.go | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/rules/manager.go b/rules/manager.go index 973a471619..9b2482951f 100644 --- a/rules/manager.go +++ b/rules/manager.go @@ -869,18 +869,25 @@ func (g *Group) Equals(ng *Group) bool { return false } - if len(g.sourceTenants) != len(ng.sourceTenants) { - return false - } - - for i, tenant := range g.sourceTenants { - if ng.sourceTenants[i] != tenant { + for i, gr := range g.rules { + if gr.String() != ng.rules[i].String() { return false } } - for i, gr := range g.rules { - if gr.String() != ng.rules[i].String() { + // compare source tenants ignoring their order + if len(g.sourceTenants) != len(ng.sourceTenants) { + return false + } + + thisSourceTenants := make(map[string]struct{}, len(g.sourceTenants)) + + for _, tenant := range g.sourceTenants { + thisSourceTenants[tenant] = struct{}{} + } + + for _, tenant := range ng.sourceTenants { + if _, ok := thisSourceTenants[tenant]; !ok { return false } }