Skip to content

Commit 6a0d09d

Browse files
committed
Fixed TestSyncerFlows unit test failure
1 parent aab7fd2 commit 6a0d09d

File tree

7 files changed

+68
-50
lines changed

7 files changed

+68
-50
lines changed

pkg/common/cns-lib/node/nodes.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,23 @@ type Nodes struct {
3737
// Initialize helps initialize node manager and node informer manager.
3838
func (nodes *Nodes) Initialize(ctx context.Context) error {
3939
nodes.cnsNodeManager = GetManager(ctx)
40+
4041
k8sclient, err := k8s.NewClient(ctx)
4142
if err != nil {
4243
log := logger.GetLogger(ctx)
4344
log.Errorf("Creating Kubernetes client failed. Err: %v", err)
4445
return err
4546
}
47+
48+
snapshotterClient, err := k8s.NewSnapshotterClient(ctx)
49+
if err != nil {
50+
log := logger.GetLogger(ctx)
51+
log.Errorf("Creating Snapshotter client failed. Err: %v", err)
52+
return err
53+
}
54+
4655
nodes.cnsNodeManager.SetKubernetesClient(k8sclient)
47-
nodes.informMgr = k8s.NewInformer(ctx, k8sclient, true)
56+
nodes.informMgr = k8s.NewInformer(ctx, k8sclient, snapshotterClient)
4857
err = nodes.informMgr.AddCSINodeListener(ctx, nodes.csiNodeAdd,
4958
nodes.csiNodeUpdate, nodes.csiNodeDelete)
5059
if err != nil {

pkg/csi/service/common/commonco/k8sorchestrator/k8sorchestrator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,7 @@ func Newk8sOrchestrator(ctx context.Context, controllerClusterFlavor cnstypes.Cn
386386
k8sOrchestratorInstance.clusterFlavor = controllerClusterFlavor
387387
k8sOrchestratorInstance.k8sClient = k8sClient
388388
k8sOrchestratorInstance.snapshotterClient = snapshotterClient
389-
k8sOrchestratorInstance.informerManager = k8s.NewInformer(ctx, k8sClient, true)
389+
k8sOrchestratorInstance.informerManager = k8s.NewInformer(ctx, k8sClient, snapshotterClient)
390390
coInstanceErr = initFSS(ctx, k8sClient, controllerClusterFlavor, params)
391391
if coInstanceErr != nil {
392392
log.Errorf("Failed to initialize the orchestrator. Error: %v", coInstanceErr)

pkg/internalapis/featurestates/featurestates.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,15 @@ func StartSvFSSReplicationService(ctx context.Context, svFeatureStatConfigMapNam
122122
return err
123123
}
124124

125+
// Create the snapshotter client.
126+
snapshotterClient, err := k8s.NewSnapshotterClient(ctx)
127+
if err != nil {
128+
log.Errorf("Creating Snapshotter client failed. Err: %v", err)
129+
return err
130+
}
131+
125132
// Create k8s Informer and watch on configmaps and namespaces.
126-
informer := k8s.NewInformer(ctx, k8sClient, true)
133+
informer := k8s.NewInformer(ctx, k8sClient, snapshotterClient)
127134
// Configmap informer to watch on SV featurestate config-map.
128135
err = informer.AddConfigMapListener(
129136
ctx,

pkg/kubernetes/informers.go

Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"sync"
2222
"time"
2323

24+
snapclientset "github.com/kubernetes-csi/external-snapshotter/client/v8/clientset/versioned"
2425
"github.com/kubernetes-csi/external-snapshotter/client/v8/informers/externalversions"
2526
"k8s.io/client-go/informers"
2627
v1 "k8s.io/client-go/informers/core/v1"
@@ -45,8 +46,6 @@ const (
4546
)
4647

4748
var (
48-
inClusterInformerManagerInstance *InformerManager = nil
49-
inClusterInformerInstanceLock = &sync.Mutex{}
5049
supervisorInformerManagerInstance *InformerManager = nil
5150
supervisorInformerInstanceLock = &sync.Mutex{}
5251
)
@@ -55,48 +54,30 @@ func noResyncPeriodFunc() time.Duration {
5554
return 0
5655
}
5756

58-
// NewInformer creates a new K8S client based on a service account.
59-
// NOTE: This function expects caller function to pass appropriate client
57+
// NewInformer creates a new K8S informer manager.
58+
// NOTE: This function expects caller function to pass appropriate clients
6059
// as per config to be created Informer for.
61-
// This function creates shared informer factory against the client provided.
62-
func NewInformer(ctx context.Context, client clientset.Interface, inClusterClnt bool) *InformerManager {
60+
// This function creates shared informer factories against the clients provided.
61+
func NewInformer(ctx context.Context,
62+
client clientset.Interface,
63+
snapshotClient snapclientset.Interface) *InformerManager {
6364
var informerInstance *InformerManager
6465
log := logger.GetLogger(ctx)
6566

66-
if inClusterClnt {
67-
inClusterInformerInstanceLock.Lock()
68-
defer inClusterInformerInstanceLock.Unlock()
69-
70-
informerInstance = inClusterInformerManagerInstance
71-
} else {
72-
supervisorInformerInstanceLock.Lock()
73-
defer supervisorInformerInstanceLock.Unlock()
74-
75-
informerInstance = supervisorInformerManagerInstance
76-
}
77-
78-
// TODO: check if callers can pass this
79-
snapClient, err := NewSnapshotterClient(ctx)
80-
if err != nil {
81-
// TODO: handle error appropriately
82-
log.Fatalf("unable to initialise snapshot client")
83-
}
67+
supervisorInformerInstanceLock.Lock()
68+
defer supervisorInformerInstanceLock.Unlock()
69+
informerInstance = supervisorInformerManagerInstance
8470

8571
if informerInstance == nil {
8672
informerInstance = &InformerManager{
8773
client: client,
8874
stopCh: signals.SetupSignalHandler().Done(),
8975
informerFactory: informers.NewSharedInformerFactory(client, noResyncPeriodFunc()),
90-
snapshotInformerFactory: externalversions.NewSharedInformerFactory(snapClient, 0),
76+
snapshotInformerFactory: externalversions.NewSharedInformerFactory(snapshotClient, 0),
9177
}
9278

93-
if inClusterClnt {
94-
inClusterInformerManagerInstance = informerInstance
95-
log.Info("Created new informer factory for in-cluster client")
96-
} else {
97-
supervisorInformerManagerInstance = informerInstance
98-
log.Info("Created new informer factory for supervisor client")
99-
}
79+
supervisorInformerManagerInstance = informerInstance
80+
log.Info("Created new informer factory for supervisor client")
10081
}
10182

10283
return informerInstance

pkg/syncer/metadatasyncer.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,13 @@ func InitMetadataSyncer(ctx context.Context, clusterFlavor cnstypes.CnsClusterFl
248248
return err
249249
}
250250

251+
// Create the snapshotter client.
252+
snapshotterClient, err := k8s.NewSnapshotterClient(ctx)
253+
if err != nil {
254+
log.Errorf("Creating Snapshotter client failed. Err: %v", err)
255+
return err
256+
}
257+
251258
// Initialize the k8s orchestrator interface.
252259
metadataSyncer.coCommonInterface, err = commonco.GetContainerOrchestratorInterface(ctx,
253260
common.Kubernetes, clusterFlavor, COInitParams)
@@ -633,7 +640,7 @@ func InitMetadataSyncer(ctx context.Context, clusterFlavor cnstypes.CnsClusterFl
633640
}
634641

635642
// Set up kubernetes resource listeners for metadata syncer.
636-
metadataSyncer.k8sInformerManager = k8s.NewInformer(ctx, k8sClient, true)
643+
metadataSyncer.k8sInformerManager = k8s.NewInformer(ctx, k8sClient, snapshotterClient)
637644
err = metadataSyncer.k8sInformerManager.AddPVCListener(
638645
ctx,
639646
nil, // Add.

pkg/syncer/storagepool/service.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,15 @@ func InitStoragePoolService(ctx context.Context,
120120
log.Errorf("Creating Kubernetes client failed. Err: %v", err)
121121
return
122122
}
123-
k8sInformerManager := k8s.NewInformer(ctx, k8sClient, true)
123+
124+
// Create the snapshotter client.
125+
snapshotterClient, err := k8s.NewSnapshotterClient(ctx)
126+
if err != nil {
127+
log.Errorf("Creating Snapshotter client failed. Err: %v", err)
128+
return
129+
}
130+
131+
k8sInformerManager := k8s.NewInformer(ctx, k8sClient, snapshotterClient)
124132
err = InitNodeAnnotationListener(ctx, k8sInformerManager, scWatchCntlr, spController)
125133
if err != nil {
126134
log.Errorf("InitNodeAnnotationListener failed. err: %v", err)

pkg/syncer/syncer_test.go

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import (
2626

2727
"github.com/davecgh/go-spew/spew"
2828
"github.com/google/uuid"
29+
"github.com/kubernetes-csi/external-snapshotter/client/v8/clientset/versioned"
30+
snapshotfake "github.com/kubernetes-csi/external-snapshotter/client/v8/clientset/versioned/fake"
2931
cnstypes "github.com/vmware/govmomi/cns/types"
3032
"github.com/vmware/govmomi/find"
3133
"github.com/vmware/govmomi/vim25/mo"
@@ -69,17 +71,18 @@ const (
6971
)
7072

7173
var (
72-
csiConfig *cnsconfig.Config
73-
ctx context.Context
74-
cnsVCenterConfig *cnsvsphere.VirtualCenterConfig
75-
err error
76-
virtualCenter *cnsvsphere.VirtualCenter
77-
metadataSyncer *metadataSyncInformer
78-
k8sclient clientset.Interface
79-
dc []*cnsvsphere.Datacenter
80-
volumeManager cnsvolumes.Manager
81-
dsList []vimtypes.ManagedObjectReference
82-
cancel context.CancelFunc
74+
csiConfig *cnsconfig.Config
75+
ctx context.Context
76+
cnsVCenterConfig *cnsvsphere.VirtualCenterConfig
77+
err error
78+
virtualCenter *cnsvsphere.VirtualCenter
79+
metadataSyncer *metadataSyncInformer
80+
k8sclient clientset.Interface
81+
snapshotterClient versioned.Interface
82+
dc []*cnsvsphere.Datacenter
83+
volumeManager cnsvolumes.Manager
84+
dsList []vimtypes.ManagedObjectReference
85+
cancel context.CancelFunc
8386
)
8487

8588
func TestSyncerWorkflows(t *testing.T) {
@@ -169,14 +172,17 @@ func TestSyncerWorkflows(t *testing.T) {
169172
// Here we should use a faked client to avoid test inteference with running
170173
// metadata syncer pod in real Kubernetes cluster.
171174
k8sclient = testclient.NewSimpleClientset()
172-
metadataSyncer.k8sInformerManager = k8s.NewInformer(ctx, k8sclient, true)
175+
// Create a fake snapshot client for testing.
176+
snapshotterClient = snapshotfake.NewSimpleClientset()
177+
var err error
178+
metadataSyncer.k8sInformerManager = k8s.NewInformer(ctx, k8sclient, snapshotterClient)
173179
metadataSyncer.k8sInformerManager.GetPodLister()
174180
metadataSyncer.pvLister = metadataSyncer.k8sInformerManager.GetPVLister()
175181
metadataSyncer.pvcLister = metadataSyncer.k8sInformerManager.GetPVCLister()
176182
metadataSyncer.podLister = metadataSyncer.k8sInformerManager.GetPodLister()
177183
metadataSyncer.k8sInformerManager.Listen()
178184

179-
_, err := unittestcommon.GetFakeVolumeMigrationService(ctx,
185+
_, err = unittestcommon.GetFakeVolumeMigrationService(ctx,
180186
&metadataSyncer.volumeManager, metadataSyncer.configInfo.Cfg)
181187
if err != nil {
182188
t.Fatalf("failed to get migration service. Err: %v", err)

0 commit comments

Comments
 (0)