fix: handle dashboards without version entries in unified storage migration (#108139)

* fix: handle dashboards without version entries in migration

Signed-off-by: Bruno Abrantes <bruno@brunoabrantes.com>

* fix: adds AllowFallback flag to enable COALESCE logic explicitly during migrations

Signed-off-by: Bruno Abrantes <bruno@brunoabrantes.com>

* fix: update dependencies

Signed-off-by: Bruno Abrantes <bruno@brunoabrantes.com>

* fix: maintain original behavior when not using AllowFallback option

Signed-off-by: Bruno Abrantes <bruno@brunoabrantes.com>

---------

Signed-off-by: Bruno Abrantes <bruno@brunoabrantes.com>
This commit is contained in:
Bruno Abrantes
2025-07-21 15:32:24 +02:00
committed by GitHub
parent 73c09efd03
commit be79eb0ace
18 changed files with 386 additions and 43 deletions
@@ -12,9 +12,9 @@ SELECT
dashboard.created,
created_user.uid as created_by,
dashboard.created_by as created_by_id,
dashboard_version.created,
dashboard_version.created as updated,
updated_user.uid as updated_by,
updated_user.id as created_by_id,
dashboard_version.created_by as updated_by_id,
dashboard_version.version,
dashboard_version.message,
dashboard_version.data,
@@ -12,23 +12,23 @@ SELECT
dashboard.created,
created_user.uid as created_by,
dashboard.created_by as created_by_id,
dashboard_version.created,
COALESCE(dashboard_version.created, dashboard.updated) as updated,
updated_user.uid as updated_by,
updated_user.id as created_by_id,
dashboard_version.version,
dashboard_version.message,
dashboard_version.data,
dashboard_version.api_version
COALESCE(dashboard_version.created_by, dashboard.updated_by) as updated_by_id,
COALESCE(dashboard_version.version, dashboard.version) as version,
COALESCE(dashboard_version.message, '') as message,
COALESCE(dashboard_version.data, dashboard.data) as data,
COALESCE(dashboard_version.api_version, dashboard.api_version) as api_version
FROM `grafana`.`dashboard` as dashboard
LEFT OUTER JOIN `grafana`.`dashboard_version` as dashboard_version ON dashboard.id = dashboard_version.dashboard_id
LEFT OUTER JOIN `grafana`.`dashboard_provisioning` as provisioning ON dashboard.id = provisioning.dashboard_id
LEFT OUTER JOIN `grafana`.`user` as created_user ON dashboard.created_by = created_user.id
LEFT OUTER JOIN `grafana`.`user` as updated_user ON dashboard_version.created_by = updated_user.id
LEFT OUTER JOIN `grafana`.`user` as updated_user ON COALESCE(dashboard_version.created_by, dashboard.updated_by) = updated_user.id
WHERE dashboard.is_folder = FALSE
AND dashboard.org_id = 2
AND dashboard.uid = 'UUU'
AND dashboard_version.version = 3
ORDER BY
dashboard_version.created DESC,
dashboard_version.version DESC,
COALESCE(dashboard_version.created, dashboard.updated) DESC,
COALESCE(dashboard_version.version, dashboard.version) DESC,
dashboard.uid ASC
@@ -0,0 +1,32 @@
SELECT
dashboard.org_id,
dashboard.id,
dashboard.uid,
dashboard.folder_uid,
dashboard.deleted,
plugin_id,
provisioning.name as repo_name,
provisioning.external_id as repo_path,
provisioning.check_sum as repo_hash,
provisioning.updated as repo_ts,
dashboard.created,
created_user.uid as created_by,
dashboard.created_by as created_by_id,
COALESCE(dashboard_version.created, dashboard.updated) as updated,
updated_user.uid as updated_by,
COALESCE(dashboard_version.created_by, dashboard.updated_by) as updated_by_id,
COALESCE(dashboard_version.version, dashboard.version) as version,
COALESCE(dashboard_version.message, '') as message,
COALESCE(dashboard_version.data, dashboard.data) as data,
COALESCE(dashboard_version.api_version, dashboard.api_version) as api_version
FROM `grafana`.`dashboard` as dashboard
LEFT OUTER JOIN `grafana`.`dashboard_version` as dashboard_version ON dashboard.id = dashboard_version.dashboard_id
LEFT OUTER JOIN `grafana`.`dashboard_provisioning` as provisioning ON dashboard.id = provisioning.dashboard_id
LEFT OUTER JOIN `grafana`.`user` as created_user ON dashboard.created_by = created_user.id
LEFT OUTER JOIN `grafana`.`user` as updated_user ON COALESCE(dashboard_version.created_by, dashboard.updated_by) = updated_user.id
WHERE dashboard.is_folder = FALSE
AND dashboard.org_id = 1
ORDER BY
COALESCE(dashboard_version.created, dashboard.updated) ASC,
COALESCE(dashboard_version.version, dashboard.version) ASC,
dashboard.uid ASC
@@ -12,9 +12,9 @@ SELECT
dashboard.created,
created_user.uid as created_by,
dashboard.created_by as created_by_id,
dashboard_version.created,
dashboard_version.created as updated,
updated_user.uid as updated_by,
updated_user.id as created_by_id,
dashboard_version.created_by as updated_by_id,
dashboard_version.version,
dashboard_version.message,
dashboard_version.data,
@@ -12,23 +12,23 @@ SELECT
dashboard.created,
created_user.uid as created_by,
dashboard.created_by as created_by_id,
dashboard_version.created,
COALESCE(dashboard_version.created, dashboard.updated) as updated,
updated_user.uid as updated_by,
updated_user.id as created_by_id,
dashboard_version.version,
dashboard_version.message,
dashboard_version.data,
dashboard_version.api_version
COALESCE(dashboard_version.created_by, dashboard.updated_by) as updated_by_id,
COALESCE(dashboard_version.version, dashboard.version) as version,
COALESCE(dashboard_version.message, '') as message,
COALESCE(dashboard_version.data, dashboard.data) as data,
COALESCE(dashboard_version.api_version, dashboard.api_version) as api_version
FROM "grafana"."dashboard" as dashboard
LEFT OUTER JOIN "grafana"."dashboard_version" as dashboard_version ON dashboard.id = dashboard_version.dashboard_id
LEFT OUTER JOIN "grafana"."dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id
LEFT OUTER JOIN "grafana"."user" as created_user ON dashboard.created_by = created_user.id
LEFT OUTER JOIN "grafana"."user" as updated_user ON dashboard_version.created_by = updated_user.id
LEFT OUTER JOIN "grafana"."user" as updated_user ON COALESCE(dashboard_version.created_by, dashboard.updated_by) = updated_user.id
WHERE dashboard.is_folder = FALSE
AND dashboard.org_id = 2
AND dashboard.uid = 'UUU'
AND dashboard_version.version = 3
ORDER BY
dashboard_version.created DESC,
dashboard_version.version DESC,
COALESCE(dashboard_version.created, dashboard.updated) DESC,
COALESCE(dashboard_version.version, dashboard.version) DESC,
dashboard.uid ASC
@@ -0,0 +1,32 @@
SELECT
dashboard.org_id,
dashboard.id,
dashboard.uid,
dashboard.folder_uid,
dashboard.deleted,
plugin_id,
provisioning.name as repo_name,
provisioning.external_id as repo_path,
provisioning.check_sum as repo_hash,
provisioning.updated as repo_ts,
dashboard.created,
created_user.uid as created_by,
dashboard.created_by as created_by_id,
COALESCE(dashboard_version.created, dashboard.updated) as updated,
updated_user.uid as updated_by,
COALESCE(dashboard_version.created_by, dashboard.updated_by) as updated_by_id,
COALESCE(dashboard_version.version, dashboard.version) as version,
COALESCE(dashboard_version.message, '') as message,
COALESCE(dashboard_version.data, dashboard.data) as data,
COALESCE(dashboard_version.api_version, dashboard.api_version) as api_version
FROM "grafana"."dashboard" as dashboard
LEFT OUTER JOIN "grafana"."dashboard_version" as dashboard_version ON dashboard.id = dashboard_version.dashboard_id
LEFT OUTER JOIN "grafana"."dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id
LEFT OUTER JOIN "grafana"."user" as created_user ON dashboard.created_by = created_user.id
LEFT OUTER JOIN "grafana"."user" as updated_user ON COALESCE(dashboard_version.created_by, dashboard.updated_by) = updated_user.id
WHERE dashboard.is_folder = FALSE
AND dashboard.org_id = 1
ORDER BY
COALESCE(dashboard_version.created, dashboard.updated) ASC,
COALESCE(dashboard_version.version, dashboard.version) ASC,
dashboard.uid ASC
@@ -12,9 +12,9 @@ SELECT
dashboard.created,
created_user.uid as created_by,
dashboard.created_by as created_by_id,
dashboard_version.created,
dashboard_version.created as updated,
updated_user.uid as updated_by,
updated_user.id as created_by_id,
dashboard_version.created_by as updated_by_id,
dashboard_version.version,
dashboard_version.message,
dashboard_version.data,
@@ -12,23 +12,23 @@ SELECT
dashboard.created,
created_user.uid as created_by,
dashboard.created_by as created_by_id,
dashboard_version.created,
COALESCE(dashboard_version.created, dashboard.updated) as updated,
updated_user.uid as updated_by,
updated_user.id as created_by_id,
dashboard_version.version,
dashboard_version.message,
dashboard_version.data,
dashboard_version.api_version
COALESCE(dashboard_version.created_by, dashboard.updated_by) as updated_by_id,
COALESCE(dashboard_version.version, dashboard.version) as version,
COALESCE(dashboard_version.message, '') as message,
COALESCE(dashboard_version.data, dashboard.data) as data,
COALESCE(dashboard_version.api_version, dashboard.api_version) as api_version
FROM "grafana"."dashboard" as dashboard
LEFT OUTER JOIN "grafana"."dashboard_version" as dashboard_version ON dashboard.id = dashboard_version.dashboard_id
LEFT OUTER JOIN "grafana"."dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id
LEFT OUTER JOIN "grafana"."user" as created_user ON dashboard.created_by = created_user.id
LEFT OUTER JOIN "grafana"."user" as updated_user ON dashboard_version.created_by = updated_user.id
LEFT OUTER JOIN "grafana"."user" as updated_user ON COALESCE(dashboard_version.created_by, dashboard.updated_by) = updated_user.id
WHERE dashboard.is_folder = FALSE
AND dashboard.org_id = 2
AND dashboard.uid = 'UUU'
AND dashboard_version.version = 3
ORDER BY
dashboard_version.created DESC,
dashboard_version.version DESC,
COALESCE(dashboard_version.created, dashboard.updated) DESC,
COALESCE(dashboard_version.version, dashboard.version) DESC,
dashboard.uid ASC
@@ -0,0 +1,32 @@
SELECT
dashboard.org_id,
dashboard.id,
dashboard.uid,
dashboard.folder_uid,
dashboard.deleted,
plugin_id,
provisioning.name as repo_name,
provisioning.external_id as repo_path,
provisioning.check_sum as repo_hash,
provisioning.updated as repo_ts,
dashboard.created,
created_user.uid as created_by,
dashboard.created_by as created_by_id,
COALESCE(dashboard_version.created, dashboard.updated) as updated,
updated_user.uid as updated_by,
COALESCE(dashboard_version.created_by, dashboard.updated_by) as updated_by_id,
COALESCE(dashboard_version.version, dashboard.version) as version,
COALESCE(dashboard_version.message, '') as message,
COALESCE(dashboard_version.data, dashboard.data) as data,
COALESCE(dashboard_version.api_version, dashboard.api_version) as api_version
FROM "grafana"."dashboard" as dashboard
LEFT OUTER JOIN "grafana"."dashboard_version" as dashboard_version ON dashboard.id = dashboard_version.dashboard_id
LEFT OUTER JOIN "grafana"."dashboard_provisioning" as provisioning ON dashboard.id = provisioning.dashboard_id
LEFT OUTER JOIN "grafana"."user" as created_user ON dashboard.created_by = created_user.id
LEFT OUTER JOIN "grafana"."user" as updated_user ON COALESCE(dashboard_version.created_by, dashboard.updated_by) = updated_user.id
WHERE dashboard.is_folder = FALSE
AND dashboard.org_id = 1
ORDER BY
COALESCE(dashboard_version.created, dashboard.updated) ASC,
COALESCE(dashboard_version.version, dashboard.version) ASC,
dashboard.uid ASC