From 77db6a9ca4dde1454e44f8b0dd8a869b4680da62 Mon Sep 17 00:00:00 2001 From: Yuri Tseretyan Date: Thu, 11 Jan 2024 09:21:03 -0500 Subject: [PATCH] Alerting: Fix GetAlertRulesForScheduling to use folder table and join by org_id (#80330) --- pkg/services/ngalert/store/alert_rule.go | 5 ++--- pkg/services/ngalert/store/alert_rule_test.go | 2 ++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pkg/services/ngalert/store/alert_rule.go b/pkg/services/ngalert/store/alert_rule.go index a94eca1602e..6b059291418 100644 --- a/pkg/services/ngalert/store/alert_rule.go +++ b/pkg/services/ngalert/store/alert_rule.go @@ -566,9 +566,8 @@ func (st DBstore) GetAlertRulesForScheduling(ctx context.Context, query *ngmodel query.ResultRules = rules if query.PopulateFolders { - foldersSql := sess.Table("dashboard").Alias("d").Select("d.uid, d.title"). - Where("is_folder = ?", st.SQLStore.GetDialect().BooleanStr(true)). - And(`EXISTS (SELECT 1 FROM alert_rule a WHERE d.uid = a.namespace_uid)`) + foldersSql := sess.Table("folder").Alias("d").Select("d.uid, d.title"). + Where(`EXISTS (SELECT 1 FROM alert_rule a WHERE d.uid = a.namespace_uid AND d.org_id = a.org_id)`) if len(disabledOrgs) > 0 { foldersSql.NotIn("org_id", disabledOrgs) } diff --git a/pkg/services/ngalert/store/alert_rule_test.go b/pkg/services/ngalert/store/alert_rule_test.go index 1b15c1db45e..e4db340b060 100644 --- a/pkg/services/ngalert/store/alert_rule_test.go +++ b/pkg/services/ngalert/store/alert_rule_test.go @@ -342,6 +342,8 @@ func TestIntegration_GetAlertRulesForScheduling(t *testing.T) { createFolder(t, store, rule1.NamespaceUID, rule1.Title, rule1.OrgID) createFolder(t, store, rule2.NamespaceUID, rule2.Title, rule2.OrgID) + createFolder(t, store, rule2.NamespaceUID, "same UID folder", generator().OrgID) // create a folder with the same UID but in the different org + tc := []struct { name string rules []string