Skip to content

Commit 01a107f

Browse files
Merge pull request cert-manager#7242 from inteon/linter_fix
Fix staticcheck linter: use types.NamespacedName in workqueue
2 parents d3124ac + 6348a68 commit 01a107f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+614
-476
lines changed

.golangci.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
issues:
22
exclude-rules:
33
- linters:
4-
- staticcheck
54
- govet
65
- usestdlibvars
76
- misspell

pkg/acme/webhook/apiserver/apiserver.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ func (c completedConfig) New() (*ChallengeServer, error) {
162162
}
163163
s.GenericAPIServer.AddPostStartHookOrDie(postStartName,
164164
func(context genericapiserver.PostStartHookContext) error {
165-
return solver.Initialize(c.restConfig, context.StopCh)
165+
return solver.Initialize(c.restConfig, context.Done())
166166
},
167167
)
168168
}

pkg/acme/webhook/cmd/server/start.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,5 +142,5 @@ func (o WebhookServerOptions) RunWebhookServer(ctx context.Context) error {
142142
if err != nil {
143143
return err
144144
}
145-
return server.GenericAPIServer.PrepareRun().Run(ctx.Done())
145+
return server.GenericAPIServer.PrepareRun().RunWithContext(ctx)
146146
}

pkg/controller/acmechallenges/controller.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"github.com/go-logr/logr"
2525
corev1 "k8s.io/api/core/v1"
2626
k8sErrors "k8s.io/apimachinery/pkg/api/errors"
27+
"k8s.io/apimachinery/pkg/types"
2728
"k8s.io/client-go/tools/cache"
2829
"k8s.io/client-go/tools/record"
2930
"k8s.io/client-go/util/workqueue"
@@ -68,7 +69,7 @@ type controller struct {
6869

6970
// maintain a reference to the workqueue for this controller
7071
// so the handleOwnedResource method can enqueue resources
71-
queue workqueue.RateLimitingInterface
72+
queue workqueue.TypedRateLimitingInterface[types.NamespacedName]
7273

7374
// logger to be used by this controller
7475
log logr.Logger
@@ -82,12 +83,17 @@ type controller struct {
8283
objectUpdater
8384
}
8485

85-
func (c *controller) Register(ctx *controllerpkg.Context) (workqueue.RateLimitingInterface, []cache.InformerSynced, error) {
86+
func (c *controller) Register(ctx *controllerpkg.Context) (workqueue.TypedRateLimitingInterface[types.NamespacedName], []cache.InformerSynced, error) {
8687
// construct a new named logger to be reused throughout the controller
8788
c.log = logf.FromContext(ctx.RootContext, ControllerName)
8889

8990
// create a queue used to queue up items to be processed
90-
c.queue = workqueue.NewNamedRateLimitingQueue(workqueue.NewItemExponentialFailureRateLimiter(time.Second*5, time.Minute*30), ControllerName)
91+
c.queue = workqueue.NewTypedRateLimitingQueueWithConfig(
92+
controllerpkg.DefaultACMERateLimiter(),
93+
workqueue.TypedRateLimitingQueueConfig[types.NamespacedName]{
94+
Name: ControllerName,
95+
},
96+
)
9197

9298
// obtain references to all the informers used by this controller
9399
challengeInformer := ctx.SharedInformerFactory.Acme().V1().Challenges()
@@ -196,13 +202,9 @@ func (c *controller) runScheduler(ctx context.Context) {
196202
}
197203
}
198204

199-
func (c *controller) ProcessItem(ctx context.Context, key string) error {
205+
func (c *controller) ProcessItem(ctx context.Context, key types.NamespacedName) error {
200206
log := logf.FromContext(ctx)
201-
namespace, name, err := cache.SplitMetaNamespaceKey(key)
202-
if err != nil {
203-
log.Error(err, "invalid resource key")
204-
return nil
205-
}
207+
namespace, name := key.Namespace, key.Name
206208

207209
ch, err := c.challengeLister.Challenges(namespace).Get(name)
208210

pkg/controller/acmechallenges/sync.go

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ import (
2424

2525
acmeapi "golang.org/x/crypto/acme"
2626
corev1 "k8s.io/api/core/v1"
27+
"k8s.io/apimachinery/pkg/types"
2728
utilerrors "k8s.io/apimachinery/pkg/util/errors"
2829

2930
"github.com/cert-manager/cert-manager/internal/controller/feature"
3031
"github.com/cert-manager/cert-manager/pkg/acme"
3132
acmecl "github.com/cert-manager/cert-manager/pkg/acme/client"
3233
cmacme "github.com/cert-manager/cert-manager/pkg/apis/acme/v1"
3334
cmapi "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1"
34-
controllerpkg "github.com/cert-manager/cert-manager/pkg/controller"
3535
dnsutil "github.com/cert-manager/cert-manager/pkg/issuer/acme/dns/util"
3636
logf "github.com/cert-manager/cert-manager/pkg/logs"
3737
utilfeature "github.com/cert-manager/cert-manager/pkg/util/feature"
@@ -195,13 +195,10 @@ func (c *controller) Sync(ctx context.Context, chOriginal *cmacme.Challenge) (er
195195
log.Error(err, "propagation check failed")
196196
ch.Status.Reason = fmt.Sprintf("Waiting for %s challenge propagation: %s", ch.Spec.Type, err)
197197

198-
key, err := controllerpkg.KeyFunc(ch)
199-
// This is an unexpected edge case and should never occur
200-
if err != nil {
201-
return err
202-
}
203-
204-
c.queue.AddAfter(key, c.DNS01CheckRetryPeriod)
198+
c.queue.AddAfter(types.NamespacedName{
199+
Namespace: ch.Namespace,
200+
Name: ch.Name,
201+
}, c.DNS01CheckRetryPeriod)
205202

206203
return nil
207204
}

pkg/controller/acmeorders/checks.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"fmt"
2121

2222
"k8s.io/apimachinery/pkg/labels"
23+
"k8s.io/apimachinery/pkg/types"
2324
"k8s.io/apimachinery/pkg/util/runtime"
2425
"k8s.io/client-go/util/workqueue"
2526

@@ -29,7 +30,7 @@ import (
2930
)
3031

3132
func handleGenericIssuerFunc(
32-
queue workqueue.RateLimitingInterface,
33+
queue workqueue.TypedRateLimitingInterface[types.NamespacedName],
3334
orderLister cmacmelisters.OrderLister,
3435
) func(interface{}) {
3536
return func(obj interface{}) {
@@ -45,12 +46,10 @@ func handleGenericIssuerFunc(
4546
return
4647
}
4748
for _, crt := range certs {
48-
key, err := keyFunc(crt)
49-
if err != nil {
50-
runtime.HandleError(err)
51-
continue
52-
}
53-
queue.Add(key)
49+
queue.Add(types.NamespacedName{
50+
Namespace: crt.Namespace,
51+
Name: crt.Name,
52+
})
5453
}
5554
}
5655
}

pkg/controller/acmeorders/controller.go

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,18 @@ package acmeorders
1919
import (
2020
"context"
2121
"fmt"
22-
"time"
2322

2423
"github.com/go-logr/logr"
2524
k8sErrors "k8s.io/apimachinery/pkg/api/errors"
25+
"k8s.io/apimachinery/pkg/types"
2626
"k8s.io/client-go/tools/cache"
2727
"k8s.io/client-go/tools/record"
2828
"k8s.io/client-go/util/workqueue"
2929
"k8s.io/utils/clock"
3030

3131
internalinformers "github.com/cert-manager/cert-manager/internal/informers"
3232
"github.com/cert-manager/cert-manager/pkg/acme/accounts"
33+
cmacme "github.com/cert-manager/cert-manager/pkg/apis/acme/v1"
3334
cmclient "github.com/cert-manager/cert-manager/pkg/client/clientset/versioned"
3435
cmacmelisters "github.com/cert-manager/cert-manager/pkg/client/listers/acme/v1"
3536
cmlisters "github.com/cert-manager/cert-manager/pkg/client/listers/certmanager/v1"
@@ -39,8 +40,6 @@ import (
3940
"github.com/cert-manager/cert-manager/pkg/scheduler"
4041
)
4142

42-
var keyFunc = controllerpkg.KeyFunc
43-
4443
type controller struct {
4544
// issuer helper is used to obtain references to issuers, used by Sync()
4645
helper issuer.Helper
@@ -67,23 +66,25 @@ type controller struct {
6766

6867
// maintain a reference to the workqueue for this controller
6968
// so the handleOwnedResource method can enqueue resources
70-
queue workqueue.RateLimitingInterface
69+
queue workqueue.TypedRateLimitingInterface[types.NamespacedName]
7170

7271
// scheduledWorkQueue holds items to be re-queued after a period of time.
73-
scheduledWorkQueue scheduler.ScheduledWorkQueue
72+
scheduledWorkQueue scheduler.ScheduledWorkQueue[types.NamespacedName]
7473
}
7574

7675
// NewController constructs an orders controller using the provided options.
7776
func NewController(
7877
log logr.Logger,
7978
ctx *controllerpkg.Context,
8079
isNamespaced bool,
81-
) (*controller, workqueue.RateLimitingInterface, []cache.InformerSynced, error) {
80+
) (*controller, workqueue.TypedRateLimitingInterface[types.NamespacedName], []cache.InformerSynced, error) {
8281

8382
// Create a queue used to queue up Orders to be processed.
84-
queue := workqueue.NewNamedRateLimitingQueue(
85-
workqueue.NewItemExponentialFailureRateLimiter(time.Second*5, time.Minute*30),
86-
ControllerName,
83+
queue := workqueue.NewTypedRateLimitingQueueWithConfig(
84+
controllerpkg.DefaultACMERateLimiter(),
85+
workqueue.TypedRateLimitingQueueConfig[types.NamespacedName]{
86+
Name: ControllerName,
87+
},
8788
)
8889

8990
// Create a scheduledWorkQueue to schedule Orders for re-processing.
@@ -160,13 +161,9 @@ func NewController(
160161

161162
}
162163

163-
func (c *controller) ProcessItem(ctx context.Context, key string) error {
164+
func (c *controller) ProcessItem(ctx context.Context, key types.NamespacedName) error {
164165
log := logf.FromContext(ctx)
165-
namespace, name, err := cache.SplitMetaNamespaceKey(key)
166-
if err != nil {
167-
log.Error(err, "invalid resource key")
168-
return nil
169-
}
166+
namespace, name := key.Namespace, key.Name
170167

171168
order, err := c.orderLister.Orders(namespace).Get(name)
172169
if err != nil {
@@ -183,8 +180,8 @@ func (c *controller) ProcessItem(ctx context.Context, key string) error {
183180
}
184181

185182
// Returns a function that finds a named Order in a particular namespace.
186-
func orderGetterFunc(orderLister cmacmelisters.OrderLister) func(string, string) (interface{}, error) {
187-
return func(namespace, name string) (interface{}, error) {
183+
func orderGetterFunc(orderLister cmacmelisters.OrderLister) func(string, string) (*cmacme.Order, error) {
184+
return func(namespace, name string) (*cmacme.Order, error) {
188185
return orderLister.Orders(namespace).Get(name)
189186
}
190187
}
@@ -204,7 +201,7 @@ type controllerWrapper struct {
204201
// Register registers a controller, created using the provided context.
205202
// It returns the workqueue to be used to enqueue items, a list of
206203
// InformerSynced functions that must be synced, or an error.
207-
func (c *controllerWrapper) Register(ctx *controllerpkg.Context) (workqueue.RateLimitingInterface, []cache.InformerSynced, error) {
204+
func (c *controllerWrapper) Register(ctx *controllerpkg.Context) (workqueue.TypedRateLimitingInterface[types.NamespacedName], []cache.InformerSynced, error) {
208205
// Construct a new named logger to be reused throughout the controller.
209206
log := logf.FromContext(ctx.RootContext, ControllerName)
210207

pkg/controller/acmeorders/sync.go

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ import (
3030
apierrors "k8s.io/apimachinery/pkg/api/errors"
3131
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3232
"k8s.io/apimachinery/pkg/labels"
33+
"k8s.io/apimachinery/pkg/types"
3334
utilerrors "k8s.io/apimachinery/pkg/util/errors"
3435
"k8s.io/apimachinery/pkg/util/sets"
35-
"k8s.io/client-go/tools/cache"
3636

3737
"github.com/cert-manager/cert-manager/internal/controller/feature"
3838
internalorders "github.com/cert-manager/cert-manager/internal/controller/orders"
@@ -226,18 +226,13 @@ func (c *controller) Sync(ctx context.Context, o *cmacme.Order) (err error) {
226226
// This is probably not needed as at this point the Order's status
227227
// should already be Pending, but set it anyway to be explicit.
228228
c.setOrderState(&o.Status, string(cmacme.Pending))
229-
key, err := cache.MetaNamespaceKeyFunc(o)
230-
if err != nil {
231-
log.Error(err, "failed to construct key for pending Order")
232-
// We should never end up here as this error would have been
233-
// encountered in informers callback already. This probably cannot
234-
// be fixed by re-queueing. If we do start encountering this
235-
// scenario, we should consider whether the Order should be marked
236-
// as failed here.
237-
return nil
238-
}
229+
239230
// Re-queue the Order to be processed again after 5 seconds.
240-
c.scheduledWorkQueue.Add(key, RequeuePeriod)
231+
c.scheduledWorkQueue.Add(types.NamespacedName{
232+
Name: o.Name,
233+
Namespace: o.Namespace,
234+
}, RequeuePeriod)
235+
241236
return nil
242237

243238
case !anyChallengesFailed(challenges) && allChallengesFinal(challenges):

pkg/controller/acmeorders/sync_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
acmeapi "golang.org/x/crypto/acme"
2828
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2929
"k8s.io/apimachinery/pkg/runtime"
30+
"k8s.io/apimachinery/pkg/types"
3031
coretesting "k8s.io/client-go/testing"
3132
fakeclock "k8s.io/utils/clock/testing"
3233

@@ -933,7 +934,7 @@ func runTest(t *testing.T, test testT) {
933934
}
934935
gotScheduled := false
935936
fakeScheduler := schedulertest.FakeScheduler{
936-
AddFunc: func(obj interface{}, duration time.Duration) {
937+
AddFunc: func(obj types.NamespacedName, duration time.Duration) {
937938
gotScheduled = true
938939
},
939940
}

pkg/controller/certificate-shim/gateways/controller.go

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222

2323
k8sErrors "k8s.io/apimachinery/pkg/api/errors"
2424
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
25+
"k8s.io/apimachinery/pkg/types"
2526
"k8s.io/apimachinery/pkg/util/runtime"
2627
"k8s.io/client-go/tools/cache"
2728
"k8s.io/client-go/util/workqueue"
@@ -42,10 +43,10 @@ type controller struct {
4243
sync shimhelper.SyncFn
4344

4445
// For testing purposes.
45-
queue workqueue.RateLimitingInterface
46+
queue workqueue.TypedRateLimitingInterface[types.NamespacedName]
4647
}
4748

48-
func (c *controller) Register(ctx *controllerpkg.Context) (workqueue.RateLimitingInterface, []cache.InformerSynced, error) {
49+
func (c *controller) Register(ctx *controllerpkg.Context) (workqueue.TypedRateLimitingInterface[types.NamespacedName], []cache.InformerSynced, error) {
4950
c.gatewayLister = ctx.GWShared.Gateway().V1().Gateways().Lister()
5051
log := logf.FromContext(ctx.RootContext, ControllerName)
5152
c.sync = shimhelper.SyncFnFor(ctx.Recorder, log, ctx.CMClient, ctx.SharedInformerFactory.Certmanager().V1().Certificates().Lister(), ctx.IngressShimOptions, ctx.FieldManager)
@@ -83,12 +84,8 @@ func (c *controller) Register(ctx *controllerpkg.Context) (workqueue.RateLimitin
8384
return c.queue, mustSync, nil
8485
}
8586

86-
func (c *controller) ProcessItem(ctx context.Context, key string) error {
87-
namespace, name, err := cache.SplitMetaNamespaceKey(key)
88-
if err != nil {
89-
runtime.HandleError(fmt.Errorf("invalid resource key: %s", key))
90-
return nil
91-
}
87+
func (c *controller) ProcessItem(ctx context.Context, key types.NamespacedName) error {
88+
namespace, name := key.Namespace, key.Name
9289

9390
gateway, err := c.gatewayLister.Gateways(namespace).Get(name)
9491

@@ -119,7 +116,7 @@ func (c *controller) ProcessItem(ctx context.Context, key string) error {
119116
// name: gateway-1
120117
// blockOwnerDeletion: true
121118
// uid: 7d3897c2-ce27-4144-883a-e1b5f89bd65a
122-
func certificateHandler(queue workqueue.RateLimitingInterface) func(obj interface{}) {
119+
func certificateHandler(queue workqueue.TypedRateLimitingInterface[types.NamespacedName]) func(obj interface{}) {
123120
return func(obj interface{}) {
124121
crt, ok := obj.(*cmapi.Certificate)
125122
if !ok {
@@ -141,14 +138,22 @@ func certificateHandler(queue workqueue.RateLimitingInterface) func(obj interfac
141138
return
142139
}
143140

144-
queue.Add(crt.Namespace + "/" + ref.Name)
141+
queue.Add(types.NamespacedName{
142+
Namespace: crt.Namespace,
143+
Name: ref.Name,
144+
})
145145
}
146146
}
147147

148148
func init() {
149149
controllerpkg.Register(ControllerName, func(ctx *controllerpkg.ContextFactory) (controllerpkg.Interface, error) {
150150
return controllerpkg.NewBuilder(ctx, ControllerName).
151-
For(&controller{queue: workqueue.NewNamedRateLimitingQueue(controllerpkg.DefaultItemBasedRateLimiter(), ControllerName)}).
151+
For(&controller{queue: workqueue.NewTypedRateLimitingQueueWithConfig(
152+
controllerpkg.DefaultItemBasedRateLimiter(),
153+
workqueue.TypedRateLimitingQueueConfig[types.NamespacedName]{
154+
Name: ControllerName,
155+
},
156+
)}).
152157
Complete()
153158
})
154159
}

0 commit comments

Comments
 (0)