From 6aba7c7502307dd28dab14d56123e41710bb4f66 Mon Sep 17 00:00:00 2001 From: Armando Ruocco Date: Mon, 10 Mar 2025 13:39:07 +0100 Subject: [PATCH] chore: make metadata access type safe Signed-off-by: Armando Ruocco --- internal/cnpgi/instance/backup.go | 11 +----- internal/cnpgi/instance/retention.go | 5 ++- internal/cnpgi/instance/types.go | 56 ++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 12 deletions(-) create mode 100644 internal/cnpgi/instance/types.go diff --git a/internal/cnpgi/instance/backup.go b/internal/cnpgi/instance/backup.go index c763ab9..d432fe3 100644 --- a/internal/cnpgi/instance/backup.go +++ b/internal/cnpgi/instance/backup.go @@ -4,7 +4,6 @@ import ( "context" "fmt" "os" - "strconv" "time" barmanBackup "github.com/cloudnative-pg/barman-cloud/pkg/backup" @@ -20,7 +19,6 @@ import ( barmancloudv1 "github.com/cloudnative-pg/plugin-barman-cloud/api/v1" "github.com/cloudnative-pg/plugin-barman-cloud/internal/cnpgi/common" - "github.com/cloudnative-pg/plugin-barman-cloud/internal/cnpgi/metadata" "github.com/cloudnative-pg/plugin-barman-cloud/internal/cnpgi/operator/config" ) @@ -148,13 +146,6 @@ func (b BackupServiceImplementation) Backup( EndLsn: executedBackupInfo.EndLSN, InstanceId: b.InstanceName, Online: true, - Metadata: map[string]string{ - "timeline": strconv.Itoa(executedBackupInfo.TimeLine), - "version": metadata.Data.Version, - "name": metadata.Data.Name, - "displayName": metadata.Data.DisplayName, - "clusterUID": string(configuration.Cluster.ObjectMeta.UID), - "pluginName": metadata.PluginName, - }, + Metadata: newBackupResultMetadata(configuration.Cluster.ObjectMeta.UID, executedBackupInfo.TimeLine).toMap(), }, nil } diff --git a/internal/cnpgi/instance/retention.go b/internal/cnpgi/instance/retention.go index c10eac4..0a7bcbc 100644 --- a/internal/cnpgi/instance/retention.go +++ b/internal/cnpgi/instance/retention.go @@ -279,6 +279,7 @@ func useSameBackupLocation(backup *cnpgv1.BackupStatus, cluster *cnpgv1.Cluster) return false } - return backup.PluginMetadata["clusterUID"] == string(cluster.UID) && - backup.PluginMetadata["pluginName"] == metadata.PluginName + meta := newBackupResultMetadataFromMap(backup.PluginMetadata) + + return meta.clusterUID == string(cluster.UID) && meta.pluginName == metadata.PluginName } diff --git a/internal/cnpgi/instance/types.go b/internal/cnpgi/instance/types.go new file mode 100644 index 0000000..f2d4412 --- /dev/null +++ b/internal/cnpgi/instance/types.go @@ -0,0 +1,56 @@ +package instance + +import ( + "strconv" + + "k8s.io/apimachinery/pkg/types" + + "github.com/cloudnative-pg/plugin-barman-cloud/internal/cnpgi/metadata" +) + +type backupResultMetadata struct { + timeline string + version string + name string + displayName string + clusterUID string + pluginName string +} + +func (b backupResultMetadata) toMap() map[string]string { + return map[string]string{ + "timeline": b.timeline, + "version": b.version, + "name": b.name, + "displayName": b.displayName, + "clusterUID": b.clusterUID, + "pluginName": b.pluginName, + } +} + +func newBackupResultMetadata(clusterUID types.UID, timeline int) backupResultMetadata { + return backupResultMetadata{ + timeline: strconv.Itoa(timeline), + clusterUID: string(clusterUID), + // static values + version: metadata.Data.Version, + name: metadata.Data.Name, + displayName: metadata.Data.DisplayName, + pluginName: metadata.PluginName, + } +} + +func newBackupResultMetadataFromMap(m map[string]string) backupResultMetadata { + if m == nil { + return backupResultMetadata{} + } + + return backupResultMetadata{ + timeline: m["timeline"], + version: m["version"], + name: m["name"], + displayName: m["displayName"], + clusterUID: m["clusterUID"], + pluginName: m["pluginName"], + } +}