From ad2ea44977c2fd2f19fe570fef336efca555d3f8 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Mon, 31 Oct 2022 18:17:48 +0100 Subject: [PATCH] Attempt to preserve UID from migrated channel (#57639) (#57919) (cherry picked from commit 0dfd78c88cbb97df6594dda57d73c705bda106e0) Co-authored-by: Alexander Weaver --- .../sqlstore/migrations/ualert/channel.go | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/pkg/services/sqlstore/migrations/ualert/channel.go b/pkg/services/sqlstore/migrations/ualert/channel.go index 8f98c3327ff..e6ce68cb93f 100644 --- a/pkg/services/sqlstore/migrations/ualert/channel.go +++ b/pkg/services/sqlstore/migrations/ualert/channel.go @@ -177,9 +177,22 @@ func (m *migration) getNotificationChannelMap() (channelsPerOrg, defaultChannels // Create a notifier (PostableGrafanaReceiver) from a legacy notification channel func (m *migration) createNotifier(c *notificationChannel) (*PostableGrafanaReceiver, error) { - uid, err := m.generateChannelUID() - if err != nil { - return nil, err + uid := c.Uid + if uid == "" { + new, err := m.generateChannelUID() + if err != nil { + return nil, err + } + m.mg.Logger.Info("Legacy notification had an empty uid, generating a new one", "id", c.ID, "uid", new) + uid = new + } + if _, seen := m.seenChannelUIDs[uid]; seen { + new, err := m.generateChannelUID() + if err != nil { + return nil, err + } + m.mg.Logger.Warn("Legacy notification had a UID that collides with a migrated record, generating a new one", "id", c.ID, "old", uid, "new", new) + uid = new } settings, secureSettings, err := migrateSettingsToSecureSettings(c.Type, c.Settings, c.SecureSettings)