Skip to content

Commit 1e5bc17

Browse files
authored
Merge pull request #1408 from grant-he/master
Address various linter (staticcheck, modernize, etc.) comments.
2 parents c5dbcee + 3cdec69 commit 1e5bc17

19 files changed

+194
-207
lines changed

cmd/csi-provisioner/csi-provisioner.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -392,18 +392,19 @@ func main() {
392392

393393
// -------------------------------
394394
// PersistentVolumeClaims informer
395-
rateLimiter := workqueue.NewItemExponentialFailureRateLimiter(*retryIntervalStart, *retryIntervalMax)
396-
claimQueue := workqueue.NewNamedRateLimitingQueue(rateLimiter, "claims")
395+
genericRateLimiter := workqueue.NewTypedItemExponentialFailureRateLimiter[any](*retryIntervalStart, *retryIntervalMax)
396+
claimRateLimiter := workqueue.NewTypedItemExponentialFailureRateLimiter[string](*retryIntervalStart, *retryIntervalMax)
397+
claimQueue := workqueue.NewTypedRateLimitingQueueWithConfig(claimRateLimiter, workqueue.TypedRateLimitingQueueConfig[string]{Name: "claims"})
397398
claimInformer := factory.Core().V1().PersistentVolumeClaims().Informer()
398399

399400
// Setup options
400401
provisionerOptions := []func(*controller.ProvisionController) error{
401402
controller.LeaderElection(false), // Always disable leader election in provisioner lib. Leader election should be done here in the CSI provisioner level instead.
402403
controller.FailedProvisionThreshold(0),
403404
controller.FailedDeleteThreshold(0),
404-
controller.RateLimiter(rateLimiter),
405+
controller.RateLimiter(genericRateLimiter),
405406
controller.Threadiness(int(*workerThreads)),
406-
controller.CreateProvisionedPVLimiter(workqueue.DefaultControllerRateLimiter()),
407+
controller.CreateProvisionedPVLimiter(workqueue.DefaultTypedControllerRateLimiter[any]()),
407408
controller.ClaimsInformer(claimInformer),
408409
controller.NodesLister(nodeLister),
409410
controller.RetryIntervalMax(*retryIntervalMax),
@@ -483,12 +484,13 @@ func main() {
483484

484485
var topologyInformer topology.Informer
485486
if nodeDeployment == nil {
487+
topologyRateLimiter := workqueue.NewTypedItemExponentialFailureRateLimiter[string](*retryIntervalStart, *retryIntervalMax)
486488
topologyInformer = topology.NewNodeTopology(
487489
provisionerName,
488490
clientset,
489491
factory.Core().V1().Nodes(),
490492
factory.Storage().V1().CSINodes(),
491-
workqueue.NewNamedRateLimitingQueue(rateLimiter, "csitopology"),
493+
workqueue.NewTypedRateLimitingQueueWithConfig(topologyRateLimiter, workqueue.TypedRateLimitingQueueConfig[string]{Name: "csitopology"}),
492494
)
493495
} else {
494496
var segment topology.Segment
@@ -548,12 +550,13 @@ func main() {
548550
klog.Fatalf("unexpected error when checking for the V1 CSIStorageCapacity API: %v", err)
549551
}
550552

553+
capacityRateLimiter := workqueue.NewTypedItemExponentialFailureRateLimiter[capacity.QueueKey](*retryIntervalStart, *retryIntervalMax)
551554
capacityController = capacity.NewCentralCapacityController(
552555
csi.NewControllerClient(grpcClient),
553556
provisionerName,
554557
clientFactory,
555558
// Metrics for the queue is available in the default registry.
556-
workqueue.NewNamedRateLimitingQueue(rateLimiter, "csistoragecapacity"),
559+
workqueue.NewTypedRateLimitingQueueWithConfig(capacityRateLimiter, workqueue.TypedRateLimitingQueueConfig[capacity.QueueKey]{Name: "csistoragecapacity"}),
557560
controller,
558561
managedByID,
559562
namespace,

cmd/csi-provisioner/util_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func TestGetNameWithMaxLength(t *testing.T) {
3838
base: externalProvisioner,
3939
},
4040
"with empty base": {
41-
expected: fmt.Sprintf("%s", "node01"),
41+
expected: "node01",
4242
nodeName: "node01",
4343
base: "",
4444
},
@@ -70,7 +70,7 @@ func TestGetNameWithMaxLength(t *testing.T) {
7070
base: externalProvisioner,
7171
},
7272
"long node name ,with empty base": {
73-
expected: fmt.Sprintf("%s", "fa65587e"),
73+
expected: "fa65587e",
7474
nodeName: fmt.Sprintf("node%s", strings.Repeat("a", 63)),
7575
base: "",
7676
},

pkg/capacity/apibridge.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,15 +117,15 @@ var _ cache.SharedIndexInformer = csiStorageCapacityIndexInformerBridge{}
117117

118118
func (iib csiStorageCapacityIndexInformerBridge) AddEventHandler(handlerv1 cache.ResourceEventHandler) (cache.ResourceEventHandlerRegistration, error) {
119119
handlerv1beta1 := cache.ResourceEventHandlerFuncs{
120-
AddFunc: func(obj interface{}) {
120+
AddFunc: func(obj any) {
121121
csc, ok := obj.(*storagev1beta1.CSIStorageCapacity)
122122
if !ok {
123123
klog.Errorf("added object: expected v1beta1.CSIStorageCapacity, got %T -> ignoring it", obj)
124124
return
125125
}
126126
handlerv1.OnAdd(v1beta1Tov1(csc), iib.HasSynced())
127127
},
128-
UpdateFunc: func(oldObj interface{}, newObj interface{}) {
128+
UpdateFunc: func(oldObj any, newObj any) {
129129
oldCsc, ok := oldObj.(*storagev1beta1.CSIStorageCapacity)
130130
if !ok {
131131
klog.Errorf("updated object: expected v1beta1.CSIStorageCapacity, got %T -> ignoring it", oldObj)
@@ -138,7 +138,7 @@ func (iib csiStorageCapacityIndexInformerBridge) AddEventHandler(handlerv1 cache
138138
}
139139
handlerv1.OnUpdate(v1beta1Tov1(oldCsc), v1beta1Tov1(newCsc))
140140
},
141-
DeleteFunc: func(obj interface{}) {
141+
DeleteFunc: func(obj any) {
142142
// Beware of "xxx deleted" events
143143
if unknown, ok := obj.(cache.DeletedFinalStateUnknown); ok && unknown.Obj != nil {
144144
obj = unknown.Obj

pkg/capacity/capacity.go

Lines changed: 39 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ type Controller struct {
7979
csiController CSICapacityClient
8080
driverName string
8181
clientFactory CSIStorageCapacityFactory
82-
queue workqueue.RateLimitingInterface
82+
queue workqueue.TypedRateLimitingInterface[QueueKey]
8383
owner *metav1.OwnerReference
8484
managedByID string
8585
ownerNamespace string
@@ -95,29 +95,28 @@ type Controller struct {
9595
// have a non-nil pointer. Those get added and updated
9696
// exclusively through the informer event handler to avoid
9797
// races.
98-
capacities map[workItem]*storagev1.CSIStorageCapacity
98+
capacities map[WorkItem]*storagev1.CSIStorageCapacity
9999
capacitiesLock sync.Mutex
100100
}
101101

102-
type workItem struct {
102+
type WorkItem struct {
103103
segment *topology.Segment
104104
storageClassName string
105105
}
106106

107-
func (w workItem) equals(capacity *storagev1.CSIStorageCapacity) bool {
107+
func (w WorkItem) equals(capacity *storagev1.CSIStorageCapacity) bool {
108108
return w.storageClassName == capacity.StorageClassName &&
109109
reflect.DeepEqual(w.segment.GetLabelSelector(), capacity.NodeTopology)
110110
}
111111

112-
var (
113-
// Defines parameters for ExponentialBackoff used while starting up
114-
// and listing CSIStorageCapacity objects.
115-
listCSIStorageCapacityBackoff = wait.Backoff{
116-
Duration: time.Second * 5,
117-
Factor: 1.1,
118-
Steps: 10,
119-
}
112+
type QueueKey struct {
113+
// item is for sync/create/update of a CSIStorageCapacity object.
114+
item *WorkItem
115+
// capacity is for deleting an obsolete CSIStorageCapacity object.
116+
capacity *storagev1.CSIStorageCapacity
117+
}
120118

119+
var (
121120
objectsGoalDesc = metrics.NewDesc(
122121
"csistoragecapacities_desired_goal",
123122
"Number of CSIStorageCapacity objects that are supposed to be managed automatically.",
@@ -165,7 +164,7 @@ func NewCentralCapacityController(
165164
csiController CSICapacityClient,
166165
driverName string,
167166
clientFactory CSIStorageCapacityFactory,
168-
queue workqueue.RateLimitingInterface,
167+
queue workqueue.TypedRateLimitingInterface[QueueKey],
169168
owner *metav1.OwnerReference,
170169
managedByID string,
171170
ownerNamespace string,
@@ -190,29 +189,29 @@ func NewCentralCapacityController(
190189
pollPeriod: pollPeriod,
191190
immediateBinding: immediateBinding,
192191
timeout: timeout,
193-
capacities: map[workItem]*storagev1.CSIStorageCapacity{},
192+
capacities: map[WorkItem]*storagev1.CSIStorageCapacity{},
194193
}
195194

196195
// Now register for changes. Depending on the implementation of the informers,
197196
// this may already invoke callbacks.
198197
handler := cache.ResourceEventHandlerFuncs{
199-
AddFunc: func(obj interface{}) {
198+
AddFunc: func(obj any) {
200199
sc, ok := obj.(*storagev1.StorageClass)
201200
if !ok {
202201
klog.Errorf("added object: expected StorageClass, got %T -> ignoring it", obj)
203202
return
204203
}
205204
c.onSCAddOrUpdate(sc)
206205
},
207-
UpdateFunc: func(_ interface{}, newObj interface{}) {
206+
UpdateFunc: func(_ any, newObj any) {
208207
sc, ok := newObj.(*storagev1.StorageClass)
209208
if !ok {
210209
klog.Errorf("updated object: expected StorageClass, got %T -> ignoring it", newObj)
211210
return
212211
}
213212
c.onSCAddOrUpdate(sc)
214213
},
215-
DeleteFunc: func(obj interface{}) {
214+
DeleteFunc: func(obj any) {
216215
// Beware of "xxx deleted" events
217216
if unknown, ok := obj.(cache.DeletedFinalStateUnknown); ok && unknown.Obj != nil {
218217
obj = unknown.Obj
@@ -244,7 +243,7 @@ func (c *Controller) Run(ctx context.Context, threadiness int) {
244243
defer c.queue.ShutDown()
245244

246245
c.prepare(ctx)
247-
for i := 0; i < threadiness; i++ {
246+
for range threadiness {
248247
go wait.UntilWithContext(ctx, func(ctx context.Context) {
249248
c.runWorker(ctx)
250249
}, time.Second)
@@ -289,23 +288,23 @@ func (c *Controller) prepare(ctx context.Context) {
289288
// for all objects immediately when adding it.
290289
klog.V(3).Info("Checking for existing CSIStorageCapacity objects")
291290
handler := cache.ResourceEventHandlerFuncs{
292-
AddFunc: func(obj interface{}) {
291+
AddFunc: func(obj any) {
293292
csc, ok := obj.(*storagev1.CSIStorageCapacity)
294293
if !ok {
295294
klog.Errorf("added object: expected CSIStorageCapacity, got %T -> ignoring it", obj)
296295
return
297296
}
298297
c.onCAddOrUpdate(ctx, csc)
299298
},
300-
UpdateFunc: func(_ interface{}, newObj interface{}) {
299+
UpdateFunc: func(_ any, newObj any) {
301300
csc, ok := newObj.(*storagev1.CSIStorageCapacity)
302301
if !ok {
303302
klog.Errorf("updated object: expected CSIStorageCapacity, got %T -> ignoring it", newObj)
304303
return
305304
}
306305
c.onCAddOrUpdate(ctx, csc)
307306
},
308-
DeleteFunc: func(obj interface{}) {
307+
DeleteFunc: func(obj any) {
309308
// Beware of "xxx deleted" events
310309
if unknown, ok := obj.(cache.DeletedFinalStateUnknown); ok && unknown.Obj != nil {
311310
obj = unknown.Obj
@@ -422,7 +421,7 @@ func (c *Controller) refreshTopology(nodeAffinity v1.VolumeNodeAffinity) {
422421
for item := range c.capacities {
423422
if item.segment.Compare(segment) == 0 {
424423
klog.V(5).Infof("Capacity Controller: skipping refresh: enqueuing %+v because of the topology", item)
425-
c.queue.Add(item)
424+
c.queue.Add(QueueKey{item: &item})
426425
}
427426
}
428427
}
@@ -457,15 +456,15 @@ func (c *Controller) refreshSC(storageClassName string) {
457456
for item := range c.capacities {
458457
if item.storageClassName == storageClassName {
459458
klog.V(5).Infof("Capacity Controller: enqueuing %+v because of the storage class", item)
460-
c.queue.Add(item)
459+
c.queue.Add(QueueKey{item: &item})
461460
}
462461
}
463462
}
464463

465464
// addWorkItem ensures that there is an item in c.capacities. It
466465
// must be called while holding c.capacitiesLock!
467466
func (c *Controller) addWorkItem(segment *topology.Segment, sc *storagev1.StorageClass) {
468-
item := workItem{
467+
item := WorkItem{
469468
segment: segment,
470469
storageClassName: sc.Name,
471470
}
@@ -478,13 +477,13 @@ func (c *Controller) addWorkItem(segment *topology.Segment, sc *storagev1.Storag
478477
// ... and then tell our workers to update
479478
// or create that capacity object.
480479
klog.V(5).Infof("Capacity Controller: enqueuing %+v", item)
481-
c.queue.Add(item)
480+
c.queue.Add(QueueKey{item: &item})
482481
}
483482

484483
// removeWorkItem ensures that the item gets removed from c.capacities. It
485484
// must be called while holding c.capacitiesLock!
486485
func (c *Controller) removeWorkItem(segment *topology.Segment, sc *storagev1.StorageClass) {
487-
item := workItem{
486+
item := WorkItem{
488487
segment: segment,
489488
storageClassName: sc.Name,
490489
}
@@ -506,7 +505,7 @@ func (c *Controller) removeWorkItem(segment *topology.Segment, sc *storagev1.Sto
506505

507506
// Any capacity object in the queue will be deleted.
508507
klog.V(5).Infof("Capacity Controller: enqueuing CSIStorageCapacity %s for removal", capacity.Name)
509-
c.queue.Add(capacity)
508+
c.queue.Add(QueueKey{capacity: capacity})
510509
}
511510

512511
// pollCapacities must be called periodically to detect when the underlying storage capacity has changed.
@@ -516,7 +515,7 @@ func (c *Controller) pollCapacities() {
516515

517516
for item := range c.capacities {
518517
klog.V(5).Infof("Capacity Controller: enqueuing %+v for periodic update", item)
519-
c.queue.Add(item)
518+
c.queue.Add(QueueKey{item: &item})
520519
}
521520
}
522521

@@ -535,11 +534,11 @@ func (c *Controller) processNextWorkItem(ctx context.Context) bool {
535534
err := func() error {
536535
defer c.queue.Done(obj)
537536

538-
switch obj := obj.(type) {
539-
case workItem:
540-
return c.syncCapacity(ctx, obj)
541-
case *storagev1.CSIStorageCapacity:
542-
return c.deleteCapacity(ctx, obj)
537+
switch {
538+
case obj.item != nil:
539+
return c.syncCapacity(ctx, *obj.item)
540+
case obj.capacity != nil:
541+
return c.deleteCapacity(ctx, obj.capacity)
543542
default:
544543
klog.Warningf("unexpected work item %#v", obj)
545544
}
@@ -559,7 +558,7 @@ func (c *Controller) processNextWorkItem(ctx context.Context) bool {
559558
}
560559

561560
// syncCapacity gets the capacity and then updates or creates the object.
562-
func (c *Controller) syncCapacity(ctx context.Context, item workItem) error {
561+
func (c *Controller) syncCapacity(ctx context.Context, item WorkItem) error {
563562
// We lock only while accessing c.capacities, but not during
564563
// the potentially long-running operations. That is okay
565564
// because there is only a single worker per item. In the
@@ -682,7 +681,7 @@ func (c *Controller) deleteCapacity(ctx context.Context, capacity *storagev1.CSI
682681
// and either remembers the pointer to it for future updates or
683682
// ensures that it gets deleted if no longer needed. Foreign objects
684683
// are ignored.
685-
func (c *Controller) onCAddOrUpdate(ctx context.Context, capacity *storagev1.CSIStorageCapacity) {
684+
func (c *Controller) onCAddOrUpdate(_ context.Context, capacity *storagev1.CSIStorageCapacity) {
686685
if !c.isManaged(capacity) {
687686
// Not ours (anymore?). For the unlikely case that someone removed our owner reference,
688687
// we also must remove our reference to the object.
@@ -692,7 +691,7 @@ func (c *Controller) onCAddOrUpdate(ctx context.Context, capacity *storagev1.CSI
692691
if capacity2 != nil && capacity2.UID == capacity.UID {
693692
c.capacities[item] = nil
694693
klog.V(5).Infof("Capacity Controller: CSIStorageCapacity %s owner was modified by someone, enqueueing %v for re-creation", capacity.Name, item)
695-
c.queue.Add(item)
694+
c.queue.Add(QueueKey{item: &item})
696695
}
697696
}
698697
return
@@ -720,10 +719,10 @@ func (c *Controller) onCAddOrUpdate(ctx context.Context, capacity *storagev1.CSI
720719
}
721720
// The CSIStorageCapacity object is obsolete, delete it.
722721
klog.V(5).Infof("Capacity Controller: CSIStorageCapacity %s with resource version %s is obsolete, enqueue for removal", capacity.Name, capacity.ResourceVersion)
723-
c.queue.Add(capacity)
722+
c.queue.Add(QueueKey{capacity: capacity})
724723
}
725724

726-
func (c *Controller) onCDelete(ctx context.Context, capacity *storagev1.CSIStorageCapacity) {
725+
func (c *Controller) onCDelete(_ context.Context, capacity *storagev1.CSIStorageCapacity) {
727726
c.capacitiesLock.Lock()
728727
defer c.capacitiesLock.Unlock()
729728
for item, capacity2 := range c.capacities {
@@ -732,7 +731,7 @@ func (c *Controller) onCDelete(ctx context.Context, capacity *storagev1.CSIStora
732731
// Re-create it...
733732
klog.V(5).Infof("Capacity Controller: CSIStorageCapacity %s was removed by someone, enqueue %v for re-creation", capacity.Name, item)
734733
c.capacities[item] = nil
735-
c.queue.Add(item)
734+
c.queue.Add(QueueKey{item: &item})
736735
return
737736
}
738737
}
@@ -806,7 +805,7 @@ func (c *Controller) getObjectsObsolete() int64 {
806805
}
807806

808807
func (c *Controller) isObsolete(capacity *storagev1.CSIStorageCapacity) bool {
809-
for item, _ := range c.capacities {
808+
for item := range c.capacities {
810809
if item.equals(capacity) {
811810
return false
812811
}

0 commit comments

Comments
 (0)