@@ -17,6 +17,7 @@ package controllers
1717import (
1818 "context"
1919 "os"
20+ "sync"
2021
2122 repv1 "github.com/dell/csm-replication/api/v1"
2223 "google.golang.org/grpc/codes"
@@ -244,43 +245,48 @@ var (
244245 MigrationGroup string
245246 // MigrationFinalizer — finalizer used by the migration sidecar for pre delete hook
246247 MigrationFinalizer string
248+
249+ // responsible for ensuring the above global vars are set only once to avoid data races.
250+ initVars * sync.Once = & sync.Once {}
247251)
248252
249253// InitLabelsAndAnnotations initializes package visible constants by using customizable domain variable
250254func InitLabelsAndAnnotations (domain string ) {
251- StorageClassReplicationParam = domain + storageClassReplicationParam
252- StorageClassRemoteStorageClassParam = domain + storageClassRemoteStorageClassParam
253- StorageClassRemoteClusterParam = domain + storageClassRemoteClusterParam
254- ReplicationFinalizer = domain + replicationFinalizer
255- RGFinalizer = domain + rgFinalizer
256- RemoteVolumeAnnotation = domain + remoteVolumeAnnotation
257- RemoteStorageClassAnnotation = domain + remoteStorageClassAnnotation
258- PVCProtectionComplete = domain + pVCProtectionComplete
259- PVProtectionComplete = domain + pVProtectionComplete
260- PVCSyncComplete = domain + pVCSyncComplete
261- PVSyncComplete = domain + pVSyncComplete
262- ContextPrefix = domain + contextPrefix
263- ProtectionGroupRemovedAnnotation = domain + protectionGroupRemovedAnnotation
264- DriverName = domain + driverName
265- RemoteClusterID = domain + remoteClusterID
266- RemoteReplicationGroup = domain + remoteReplicationGroup
267- RGSyncComplete = domain + rGSyncComplete
268- RemotePV = domain + remotePV
269- RemotePVC = domain + remotePVC
270- RemotePVCNamespace = domain + remotePVCNamespace
271- ReplicationGroup = domain + replicationGroup
272- CreatedBy = domain + createdBy
273- ResourceRequest = domain + resourceRequest
274- DeletionRequested = domain + deletionRequested
275- SynchronizedDeletionStatus = domain + synchronizedDeletionStatus
276- RemotePVRetentionPolicy = domain + remotePVRetentionPolicy
277- RemoteRGRetentionPolicy = domain + remoteRGRetentionPolicy
278- MigrationRequested = domain + migrateTo
279- MigrationNamespace = domain + migrateNS
280- CreatedByMigrator = domain + createdByMigrator
281- SnapshotClass = domain + snapshotClass
282- SnapshotNamespace = domain + snapshotNamespace
283- ActionProcessedTime = domain + actionProcessedTime
284- MigrationGroup = domain + migrationGroup
285- MigrationFinalizer = domain + migrationFinalizer
255+ initVars .Do (func () {
256+ StorageClassReplicationParam = domain + storageClassReplicationParam
257+ StorageClassRemoteStorageClassParam = domain + storageClassRemoteStorageClassParam
258+ StorageClassRemoteClusterParam = domain + storageClassRemoteClusterParam
259+ ReplicationFinalizer = domain + replicationFinalizer
260+ RGFinalizer = domain + rgFinalizer
261+ RemoteVolumeAnnotation = domain + remoteVolumeAnnotation
262+ RemoteStorageClassAnnotation = domain + remoteStorageClassAnnotation
263+ PVCProtectionComplete = domain + pVCProtectionComplete
264+ PVProtectionComplete = domain + pVProtectionComplete
265+ PVCSyncComplete = domain + pVCSyncComplete
266+ PVSyncComplete = domain + pVSyncComplete
267+ ContextPrefix = domain + contextPrefix
268+ ProtectionGroupRemovedAnnotation = domain + protectionGroupRemovedAnnotation
269+ DriverName = domain + driverName
270+ RemoteClusterID = domain + remoteClusterID
271+ RemoteReplicationGroup = domain + remoteReplicationGroup
272+ RGSyncComplete = domain + rGSyncComplete
273+ RemotePV = domain + remotePV
274+ RemotePVC = domain + remotePVC
275+ RemotePVCNamespace = domain + remotePVCNamespace
276+ ReplicationGroup = domain + replicationGroup
277+ CreatedBy = domain + createdBy
278+ ResourceRequest = domain + resourceRequest
279+ DeletionRequested = domain + deletionRequested
280+ SynchronizedDeletionStatus = domain + synchronizedDeletionStatus
281+ RemotePVRetentionPolicy = domain + remotePVRetentionPolicy
282+ RemoteRGRetentionPolicy = domain + remoteRGRetentionPolicy
283+ MigrationRequested = domain + migrateTo
284+ MigrationNamespace = domain + migrateNS
285+ CreatedByMigrator = domain + createdByMigrator
286+ SnapshotClass = domain + snapshotClass
287+ SnapshotNamespace = domain + snapshotNamespace
288+ ActionProcessedTime = domain + actionProcessedTime
289+ MigrationGroup = domain + migrationGroup
290+ MigrationFinalizer = domain + migrationFinalizer
291+ })
286292}
0 commit comments