Skip to content

Commit 2b979c0

Browse files
author
Jim Ryan
authored
Fix make staticcheck, (use NewInformerWithOptions and TypedRateLimitingInterface) (#6647)
* use NewInformerWithOptions and TypedRateLimitingInterface * delete new lines
1 parent 8714aa2 commit 2b979c0

File tree

3 files changed

+80
-50
lines changed

3 files changed

+80
-50
lines changed

internal/externaldns/controller.go

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
extdnslisters "github.com/nginxinc/kubernetes-ingress/pkg/client/listers/externaldns/v1"
1515
apierrors "k8s.io/apimachinery/pkg/api/errors"
1616
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
17+
"k8s.io/apimachinery/pkg/types"
1718
"k8s.io/apimachinery/pkg/util/runtime"
1819
"k8s.io/client-go/tools/cache"
1920
"k8s.io/client-go/tools/record"
@@ -31,7 +32,7 @@ const (
3132
type ExtDNSController struct {
3233
sync SyncFn
3334
ctx context.Context
34-
queue workqueue.RateLimitingInterface
35+
queue workqueue.TypedRateLimitingInterface[types.NamespacedName]
3536
recorder record.EventRecorder
3637
client k8s_nginx.Interface
3738
informerGroup map[string]*namespacedInformer
@@ -60,9 +61,14 @@ type ExtDNSOpts struct {
6061
// NewController takes external dns config and return a new External DNS Controller.
6162
func NewController(opts *ExtDNSOpts) *ExtDNSController {
6263
ig := make(map[string]*namespacedInformer)
64+
65+
rateLimiter := workqueue.DefaultTypedControllerRateLimiter[types.NamespacedName]()
66+
67+
queue := workqueue.NewTypedRateLimitingQueueWithConfig(rateLimiter, workqueue.TypedRateLimitingQueueConfig[types.NamespacedName]{Name: ControllerName})
68+
6369
c := &ExtDNSController{
6470
ctx: opts.context,
65-
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), ControllerName),
71+
queue: queue,
6672
informerGroup: ig,
6773
recorder: opts.eventRecorder,
6874
client: opts.client,
@@ -155,39 +161,31 @@ func (c *ExtDNSController) runWorker(ctx context.Context) {
155161
l := nl.LoggerFromContext(ctx)
156162
nl.Debugf(l, "processing items on the workqueue")
157163
for {
158-
obj, shutdown := c.queue.Get()
164+
key, shutdown := c.queue.Get()
159165
if shutdown {
160166
break
161167
}
162168

163169
func() {
164-
defer c.queue.Done(obj)
165-
key, ok := obj.(string)
166-
if !ok {
167-
return
168-
}
169-
170+
defer c.queue.Done(key)
170171
if err := c.processItem(ctx, key); err != nil {
171172
nl.Debugf(l, "Re-queuing item due to error processing: %v", err)
172-
c.queue.AddRateLimited(obj)
173+
c.queue.AddRateLimited(key)
173174
return
174175
}
175176
nl.Debugf(l, "finished processing work item")
176-
c.queue.Forget(obj)
177+
c.queue.Forget(key)
177178
}()
178179
}
179180
}
180181

181-
func (c *ExtDNSController) processItem(ctx context.Context, key string) error {
182-
namespace, name, err := cache.SplitMetaNamespaceKey(key)
183-
if err != nil {
184-
runtime.HandleError(fmt.Errorf("invalid resource key: %s", key))
185-
return err
186-
}
182+
func (c *ExtDNSController) processItem(ctx context.Context, key types.NamespacedName) error {
183+
namespace := key.Namespace
184+
name := key.Name
187185
l := nl.LoggerFromContext(ctx)
188186
var vs *conf_v1.VirtualServer
189187
nsi := getNamespacedInformer(namespace, c.informerGroup)
190-
vs, err = nsi.vsLister.VirtualServers(namespace).Get(name)
188+
vs, err := nsi.vsLister.VirtualServers(namespace).Get(name)
191189

192190
// VS has been deleted
193191
if apierrors.IsNotFound(err) {
@@ -201,7 +199,7 @@ func (c *ExtDNSController) processItem(ctx context.Context, key string) error {
201199
return c.sync(ctx, vs)
202200
}
203201

204-
func externalDNSHandler(queue workqueue.RateLimitingInterface) func(obj interface{}) {
202+
func externalDNSHandler(queue workqueue.TypedRateLimitingInterface[types.NamespacedName]) func(obj interface{}) {
205203
return func(obj interface{}) {
206204
ep, ok := obj.(*extdns_v1.DNSEndpoint)
207205
if !ok {
@@ -223,7 +221,8 @@ func externalDNSHandler(queue workqueue.RateLimitingInterface) func(obj interfac
223221
return
224222
}
225223

226-
queue.Add(ep.Namespace + "/" + ref.Name)
224+
key := types.NamespacedName{Namespace: ep.Namespace, Name: ref.Name}
225+
queue.Add(key)
227226
}
228227
}
229228

internal/externaldns/handlers.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"reflect"
55
"time"
66

7+
"k8s.io/apimachinery/pkg/api/meta"
8+
"k8s.io/apimachinery/pkg/types"
79
"k8s.io/apimachinery/pkg/util/runtime"
810
"k8s.io/client-go/tools/cache"
911
"k8s.io/client-go/util/workqueue"
@@ -16,23 +18,27 @@ var KeyFunc = cache.DeletionHandlingMetaNamespaceKeyFunc
1618

1719
// DefaultItemBasedRateLimiter returns a new rate limiter with base delay of 5
1820
// seconds, max delay of 5 minutes.
19-
func DefaultItemBasedRateLimiter() workqueue.RateLimiter {
20-
return workqueue.NewItemExponentialFailureRateLimiter(time.Second*5, time.Minute*5)
21+
func DefaultItemBasedRateLimiter() workqueue.TypedRateLimiter[types.NamespacedName] {
22+
return workqueue.NewTypedItemExponentialFailureRateLimiter[types.NamespacedName](5*time.Second, 5*time.Minute)
2123
}
2224

2325
// QueuingEventHandler is an implementation of cache.ResourceEventHandler that
2426
// simply queues objects that are added/updated/deleted.
2527
type QueuingEventHandler struct {
26-
Queue workqueue.RateLimitingInterface
28+
Queue workqueue.TypedRateLimitingInterface[types.NamespacedName]
2729
}
2830

2931
// Enqueue adds a key for an object to the workqueue.
3032
func (q *QueuingEventHandler) Enqueue(obj interface{}) {
31-
key, err := KeyFunc(obj)
33+
accessor, err := meta.Accessor(obj)
3234
if err != nil {
3335
runtime.HandleError(err)
3436
return
3537
}
38+
key := types.NamespacedName{
39+
Namespace: accessor.GetNamespace(),
40+
Name: accessor.GetName(),
41+
}
3642
q.Queue.Add(key)
3743
}
3844

internal/k8s/status_test.go

Lines changed: 51 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"log/slog"
77
"reflect"
88
"testing"
9+
"time"
910

1011
"github.com/google/go-cmp/cmp"
1112
nic_glog "github.com/nginxinc/kubernetes-ingress/internal/logger/glog"
@@ -94,16 +95,18 @@ func TestUpdateTransportServerStatusIgnoreNoChange(t *testing.T) {
9495
},
9596
})
9697

97-
tsLister, _ := cache.NewInformer(
98-
cache.NewListWatchFromClient(
99-
fakeClient.K8sV1().RESTClient(),
100-
"transportservers",
101-
"nginx-ingress",
102-
fields.Everything(),
103-
),
104-
&conf_v1.TransportServer{},
105-
2,
106-
nil,
98+
tsLister, _ := cache.NewInformerWithOptions(
99+
cache.InformerOptions{
100+
ListerWatcher: cache.NewListWatchFromClient(
101+
fakeClient.K8sV1().RESTClient(),
102+
"transportservers",
103+
"nginx-ingress",
104+
fields.Everything(),
105+
),
106+
ObjectType: &conf_v1.TransportServer{},
107+
ResyncPeriod: 2 * time.Second,
108+
Handler: nil,
109+
},
107110
)
108111

109112
err := tsLister.Add(ts)
@@ -156,16 +159,18 @@ func TestUpdateTransportServerStatusMissingTransportServer(t *testing.T) {
156159
Items: []conf_v1.TransportServer{},
157160
})
158161

159-
tsLister, _ := cache.NewInformer(
160-
cache.NewListWatchFromClient(
161-
fakeClient.K8sV1().RESTClient(),
162-
"transportservers",
163-
"nginx-ingress",
164-
fields.Everything(),
165-
),
166-
&conf_v1.TransportServer{},
167-
2,
168-
nil,
162+
tsLister, _ := cache.NewInformerWithOptions(
163+
cache.InformerOptions{
164+
ListerWatcher: cache.NewListWatchFromClient(
165+
fakeClient.K8sV1().RESTClient(),
166+
"transportservers",
167+
"nginx-ingress",
168+
fields.Everything(),
169+
),
170+
ObjectType: &conf_v1.TransportServer{},
171+
ResyncPeriod: 2 * time.Second,
172+
Handler: nil,
173+
},
169174
)
170175

171176
nsi := make(map[string]*namespacedInformer)
@@ -219,9 +224,19 @@ func TestStatusUpdateWithExternalStatusAndExternalService(t *testing.T) {
219224
}},
220225
)
221226
ingLister := storeToIngressLister{}
222-
ingLister.Store, _ = cache.NewInformer(
223-
cache.NewListWatchFromClient(fakeClient.NetworkingV1().RESTClient(), "ingresses", "nginx-ingress", fields.Everything()),
224-
&networking.Ingress{}, 2, nil)
227+
ingLister.Store, _ = cache.NewInformerWithOptions(
228+
cache.InformerOptions{
229+
ListerWatcher: cache.NewListWatchFromClient(
230+
fakeClient.NetworkingV1().RESTClient(),
231+
"ingresses",
232+
"nginx-ingress",
233+
fields.Everything(),
234+
),
235+
ObjectType: &networking.Ingress{},
236+
ResyncPeriod: 2 * time.Second,
237+
Handler: nil,
238+
},
239+
)
225240

226241
err := ingLister.Store.Add(&ing)
227242
if err != nil {
@@ -328,9 +343,19 @@ func TestStatusUpdateWithExternalStatusAndIngressLink(t *testing.T) {
328343
}},
329344
)
330345
ingLister := storeToIngressLister{}
331-
ingLister.Store, _ = cache.NewInformer(
332-
cache.NewListWatchFromClient(fakeClient.NetworkingV1().RESTClient(), "ingresses", "nginx-ingress", fields.Everything()),
333-
&networking.Ingress{}, 2, nil)
346+
ingLister.Store, _ = cache.NewInformerWithOptions(
347+
cache.InformerOptions{
348+
ListerWatcher: cache.NewListWatchFromClient(
349+
fakeClient.NetworkingV1().RESTClient(),
350+
"ingresses",
351+
"nginx-ingress",
352+
fields.Everything(),
353+
),
354+
ObjectType: &networking.Ingress{},
355+
ResyncPeriod: 2 * time.Second,
356+
Handler: nil,
357+
},
358+
)
334359

335360
err := ingLister.Store.Add(&ing)
336361
if err != nil {

0 commit comments

Comments
 (0)