Skip to content

Commit 76357d3

Browse files
committed
fix data races in unit tests.
- utilizes a `sync.Once` struct to make sure a set of global vars is initialized only once.
1 parent cb994ce commit 76357d3

File tree

2 files changed

+43
-36
lines changed

2 files changed

+43
-36
lines changed

controllers/common.go

Lines changed: 41 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package controllers
1717
import (
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
250254
func 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
}

controllers/common_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323

2424
repv1 "github.com/dell/csm-replication/api/v1"
2525
"github.com/dell/csm-replication/controllers"
26+
"github.com/dell/csm-replication/pkg/common/constants"
2627
"github.com/stretchr/testify/assert"
2728
"google.golang.org/grpc/codes"
2829
"google.golang.org/grpc/status"
@@ -144,5 +145,5 @@ func TestUpdateConditions(t *testing.T) {
144145
}
145146

146147
func TestInitLabelsAndAnnotations(_ *testing.T) {
147-
controllers.InitLabelsAndAnnotations("test-domain")
148+
controllers.InitLabelsAndAnnotations(constants.DefaultDomain)
148149
}

0 commit comments

Comments
 (0)