refactor: improve CSI plugin code clarity and error handling

Signed-off-by: KunWuLuan <kunwuluan@gmail.com>
This commit is contained in:
KunWuLuan
2026-01-20 15:36:45 +08:00
parent f006a94562
commit c8c5a1653f
2 changed files with 25 additions and 25 deletions

View File

@@ -600,9 +600,8 @@ func NewCSI(_ context.Context, _ runtime.Object, handle fwk.Handle, fts feature.
scLister := informerFactory.Storage().V1().StorageClasses().Lister()
vaLister := informerFactory.Storage().V1().VolumeAttachments().Lister()
csiDriverLister := informerFactory.Storage().V1().CSIDrivers().Lister()
vaIndexer := informerFactory.Storage().V1().VolumeAttachments().Informer().GetIndexer()
if err := informerFactory.Storage().V1().VolumeAttachments().Informer().AddIndexers(cache.Indexers{vaIndexKey: volumeAttachmentIndexer}); err != nil {
vaInformer := informerFactory.Storage().V1().VolumeAttachments().Informer()
vaInformer := informerFactory.Storage().V1().VolumeAttachments().Informer()
if err := vaInformer.AddIndexers(cache.Indexers{vaIndexKey: volumeAttachmentIndexer}); err != nil {
if vaInformer.GetIndexer().GetIndexers()[vaIndexKey] == nil {
return nil, fmt.Errorf("failed to add index to VA informer: %w", err)
}
@@ -619,7 +618,7 @@ func NewCSI(_ context.Context, _ runtime.Object, handle fwk.Handle, fts feature.
enableVolumeLimitScaling: fts.EnableVolumeLimitScaling,
randomVolumeIDPrefix: rand.String(32),
translator: csiTranslator,
vaIndexer: vaIndexer,
vaIndexer: vaInformer.GetIndexer(),
}, nil
}
@@ -651,7 +650,8 @@ func (pl *CSILimits) getNodeVolumeAttachmentInfo(logger klog.Logger, nodeName st
for _, vao := range vas {
va, ok := vao.(*storagev1.VolumeAttachment)
if !ok {
utilruntime.HandleError(fmt.Errorf("unexpected object type in volume attachment indexer: %v", vao))
utilruntime.HandleErrorWithLogger(logger, fmt.Errorf("unexpected object type in volume attachment indexer: %v", vao),
"volume indexer not available")
continue
}
if va.Spec.NodeName == nodeName {

View File

@@ -645,21 +645,20 @@ func TestCSILimits(t *testing.T) {
enableMigrationOnNode(csiNode, csilibplugins.AWSEBSInTreePluginName)
}
csiTranslator := csitrans.New()
vas := getFakeVolumeAttachmentLister(test.vaCount, test.driverNames...)
fakecli := fake.NewClientset(vas...)
informerfactory := informers.NewSharedInformerFactory(fakecli, 0)
if err := informerfactory.Storage().V1().VolumeAttachments().Informer().AddIndexers(cache.Indexers{vaIndexKey: volumeAttachmentIndexer}); err != nil {
fakecli := buildFakeClientWithVALister(test.vaCount, test.driverNames...)
informerFactory := informers.NewSharedInformerFactory(fakecli, 0)
if err := informerFactory.Storage().V1().VolumeAttachments().Informer().AddIndexers(cache.Indexers{vaIndexKey: volumeAttachmentIndexer}); err != nil {
t.Error(err)
}
_, ctx := ktesting.NewTestContext(t)
informerfactory.Start(ctx.Done())
informerfactory.WaitForCacheSync(ctx.Done())
informerFactory.Start(ctx.Done())
informerFactory.WaitForCacheSync(ctx.Done())
p := &CSILimits{
csiManager: NewCSIManager(getFakeCSINodeLister(csiNode)),
pvLister: getFakeCSIPVLister(test.filterName, test.driverNames...),
pvcLister: append(getFakeCSIPVCLister(test.filterName, scName, test.driverNames...), test.extraClaims...),
scLister: getFakeCSIStorageClassLister(scName, test.driverNames[0]),
vaIndexer: informerfactory.Storage().V1().VolumeAttachments().Informer().GetIndexer(),
vaIndexer: informerFactory.Storage().V1().VolumeAttachments().Informer().GetIndexer(),
randomVolumeIDPrefix: rand.String(32),
translator: csiTranslator,
}
@@ -1086,12 +1085,12 @@ func TestCSILimitsAfterCSINodeUpdatedQHint(t *testing.T) {
}
}
func getFakeVolumeAttachmentLister(count int, driverNames ...string) []runtime.Object {
vaLister := []runtime.Object{}
func buildFakeClientWithVALister(count int, driverNames ...string) *fake.Clientset {
vas := []runtime.Object{}
for _, driver := range driverNames {
for j := 0; j < count; j++ {
pvName := fmt.Sprintf("csi-%s-%d", driver, j)
va := storagev1.VolumeAttachment{
va := &storagev1.VolumeAttachment{
ObjectMeta: metav1.ObjectMeta{
Name: fmt.Sprintf("va-%s-%d", driver, j),
},
@@ -1103,11 +1102,13 @@ func getFakeVolumeAttachmentLister(count int, driverNames ...string) []runtime.O
},
},
}
vaLister = append(vaLister, &va)
vas = append(vas, va)
}
}
return vaLister
fakeCli := fake.NewClientset(vas...)
return fakeCli
}
func getFakeCSIPVLister(volumeName string, driverNames ...string) tf.PersistentVolumeLister {
pvLister := tf.PersistentVolumeLister{}
for _, driver := range driverNames {
@@ -1336,15 +1337,14 @@ func TestVolumeLimitScalingGate(t *testing.T) {
for _, tt := range cases {
t.Run(tt.name, func(t *testing.T) {
node, csiNode := getNodeWithPodAndVolumeLimits(tt.limitSource, []*v1.Pod{}, tt.limit, ebsCSIDriverName)
vas := getFakeVolumeAttachmentLister(0, ebsCSIDriverName)
fakecli := fake.NewClientset(vas...)
informerfactory := informers.NewSharedInformerFactory(fakecli, 0)
if err := informerfactory.Storage().V1().VolumeAttachments().Informer().AddIndexers(cache.Indexers{vaIndexKey: volumeAttachmentIndexer}); err != nil {
fakecli := buildFakeClientWithVALister(0, ebsCSIDriverName)
informerFactory := informers.NewSharedInformerFactory(fakecli, 0)
if err := informerFactory.Storage().V1().VolumeAttachments().Informer().AddIndexers(cache.Indexers{vaIndexKey: volumeAttachmentIndexer}); err != nil {
t.Error(err)
}
_, ctx := ktesting.NewTestContext(t)
informerfactory.Start(ctx.Done())
informerfactory.WaitForCacheSync(ctx.Done())
informerFactory.Start(ctx.Done())
informerFactory.WaitForCacheSync(ctx.Done())
csiTranslator := csitrans.New()
p := &CSILimits{
@@ -1352,8 +1352,8 @@ func TestVolumeLimitScalingGate(t *testing.T) {
pvLister: getFakeCSIPVLister("csi", ebsCSIDriverName),
pvcLister: getFakeCSIPVCLister("csi", scName, ebsCSIDriverName),
scLister: getFakeCSIStorageClassLister(scName, ebsCSIDriverName),
vaLister: informerfactory.Storage().V1().VolumeAttachments().Lister(),
vaIndexer: informerfactory.Storage().V1().VolumeAttachments().Informer().GetIndexer(),
vaLister: informerFactory.Storage().V1().VolumeAttachments().Lister(),
vaIndexer: informerFactory.Storage().V1().VolumeAttachments().Informer().GetIndexer(),
csiDriverLister: func() fakeCSIDriverLister {
if tt.csiDriverPresent {
return getFakeCSIDriverLister(ebsCSIDriverName)