Skip to content

Commit 51d4a37

Browse files
[improvement] Refactor code blocks ignored by errorlint (#370)
* Swapped linodego.Error blocks for errors.As() * Swapped switch cases for lbNotFoundError blocks with errors.As() * WIP: Fix unit test results * Finished resolving unit test failures * WIP: EnsureLoadBalancerDeleted targetError as non-pointer * Added default case that got removed --------- Co-authored-by: Rahul Sharma <[email protected]>
1 parent ac5a2b5 commit 51d4a37

File tree

3 files changed

+58
-73
lines changed

3 files changed

+58
-73
lines changed

cloud/linode/loadbalancers.go

Lines changed: 44 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -126,15 +126,13 @@ func (l *loadbalancers) cleanupOldNodeBalancer(ctx context.Context, service *v1.
126126
}
127127

128128
previousNB, err := l.getNodeBalancerByStatus(ctx, service)
129-
//nolint: errorlint //conversion to errors.Is() may break chainsaw tests
130-
switch err.(type) {
131-
case nil:
132-
// continue execution
133-
break
134-
case lbNotFoundError:
135-
return nil
136-
default:
137-
return err
129+
if err != nil {
130+
var targetError lbNotFoundError
131+
if errors.As(err, &targetError) {
132+
return nil
133+
} else {
134+
return err
135+
}
138136
}
139137

140138
nb, err := l.getNodeBalancerForService(ctx, service)
@@ -178,17 +176,14 @@ func (l *loadbalancers) GetLoadBalancer(ctx context.Context, clusterName string,
178176
}
179177

180178
nb, err := l.getNodeBalancerForService(ctx, service)
181-
//nolint: errorlint //conversion to errors.Is() may break chainsaw tests
182-
switch err.(type) {
183-
case nil:
184-
break
185-
186-
case lbNotFoundError:
187-
return nil, false, nil
188-
189-
default:
190-
sentry.CaptureError(ctx, err)
191-
return nil, false, err
179+
if err != nil {
180+
var targetError lbNotFoundError
181+
if errors.As(err, &targetError) {
182+
return nil, false, nil
183+
} else {
184+
sentry.CaptureError(ctx, err)
185+
return nil, false, err
186+
}
192187
}
193188

194189
return makeLoadBalancerStatus(service, nb), true, nil
@@ -257,31 +252,30 @@ func (l *loadbalancers) EnsureLoadBalancer(ctx context.Context, clusterName stri
257252
var nb *linodego.NodeBalancer
258253

259254
nb, err = l.getNodeBalancerForService(ctx, service)
260-
//nolint: errorlint //conversion to errors.Is() may break chainsaw tests
261-
switch err.(type) {
262-
case lbNotFoundError:
263-
if service.GetAnnotations()[annotations.AnnLinodeNodeBalancerID] != "" {
264-
// a load balancer annotation has been created so a NodeBalancer is coming, error out and retry later
265-
klog.Infof("NodeBalancer created but not available yet, waiting...")
266-
sentry.CaptureError(ctx, err)
267-
return nil, err
268-
}
269-
270-
if nb, err = l.buildLoadBalancerRequest(ctx, clusterName, service, nodes); err != nil {
255+
if err == nil {
256+
if err = l.updateNodeBalancer(ctx, clusterName, service, nodes, nb); err != nil {
271257
sentry.CaptureError(ctx, err)
272258
return nil, err
273259
}
274-
klog.Infof("created new NodeBalancer (%d) for service (%s)", nb.ID, serviceNn)
260+
} else {
261+
var targetError lbNotFoundError
262+
if errors.As(err, &targetError) {
263+
if service.GetAnnotations()[annotations.AnnLinodeNodeBalancerID] != "" {
264+
// a load balancer annotation has been created so a NodeBalancer is coming, error out and retry later
265+
klog.Infof("NodeBalancer created but not available yet, waiting...")
266+
sentry.CaptureError(ctx, err)
267+
return nil, err
268+
}
275269

276-
case nil:
277-
if err = l.updateNodeBalancer(ctx, clusterName, service, nodes, nb); err != nil {
270+
if nb, err = l.buildLoadBalancerRequest(ctx, clusterName, service, nodes); err != nil {
271+
sentry.CaptureError(ctx, err)
272+
return nil, err
273+
}
274+
klog.Infof("created new NodeBalancer (%d) for service (%s)", nb.ID, serviceNn)
275+
} else {
278276
sentry.CaptureError(ctx, err)
279277
return nil, err
280278
}
281-
282-
default:
283-
sentry.CaptureError(ctx, err)
284-
return nil, err
285279
}
286280

287281
klog.Infof("NodeBalancer (%d) has been ensured for service (%s)", nb.ID, serviceNn)
@@ -558,19 +552,16 @@ func (l *loadbalancers) EnsureLoadBalancerDeleted(ctx context.Context, clusterNa
558552
}
559553

560554
nb, err := l.getNodeBalancerForService(ctx, service)
561-
//nolint: errorlint //conversion to errors.Is() may break chainsaw tests
562-
switch getErr := err.(type) {
563-
case nil:
564-
break
565-
566-
case lbNotFoundError:
567-
klog.Infof("short-circuiting deletion for NodeBalancer for service (%s) as one does not exist: %s", serviceNn, err)
568-
return nil
569-
570-
default:
571-
klog.Errorf("failed to get NodeBalancer for service (%s): %s", serviceNn, err)
572-
sentry.CaptureError(ctx, getErr)
573-
return err
555+
if err != nil {
556+
var targetError lbNotFoundError
557+
if errors.As(err, &targetError) {
558+
klog.Infof("short-circuiting deletion for NodeBalancer for service (%s) as one does not exist: %s", serviceNn, err)
559+
return nil
560+
} else {
561+
klog.Errorf("failed to get NodeBalancer for service (%s): %s", serviceNn, err)
562+
sentry.CaptureError(ctx, err)
563+
return err
564+
}
574565
}
575566

576567
if l.shouldPreserveNodeBalancer(service) {
@@ -628,8 +619,8 @@ func (l *loadbalancers) getNodeBalancerByIPv4(ctx context.Context, service *v1.S
628619
func (l *loadbalancers) getNodeBalancerByID(ctx context.Context, service *v1.Service, id int) (*linodego.NodeBalancer, error) {
629620
nb, err := l.client.GetNodeBalancer(ctx, id)
630621
if err != nil {
631-
//nolint: errorlint //need type assertion for code field to work
632-
if apiErr, ok := err.(*linodego.Error); ok && apiErr.Code == http.StatusNotFound {
622+
var targetError *linodego.Error
623+
if errors.As(err, &targetError) && targetError.Code == http.StatusNotFound {
633624
return nil, lbNotFoundError{serviceNn: getServiceNn(service), nodeBalancerID: id}
634625
}
635626
return nil, err

cloud/linode/node_controller.go

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package linode
22

33
import (
44
"context"
5+
"errors"
56
"net/http"
67
"os"
78
"strconv"
@@ -235,19 +236,15 @@ func (s *nodeController) processNext() bool {
235236
return true
236237
}
237238
err := s.handleNode(context.TODO(), request.node)
238-
//nolint: errorlint //switching to errors.Is()/errors.As() causes errors with Code field
239-
switch deleteErr := err.(type) {
240-
case nil:
241-
break
242-
243-
case *linodego.Error:
244-
if deleteErr.Code >= http.StatusInternalServerError || deleteErr.Code == http.StatusTooManyRequests {
239+
if err != nil {
240+
var targetError *linodego.Error
241+
if errors.As(err, &targetError) &&
242+
(targetError.Code >= http.StatusInternalServerError || targetError.Code == http.StatusTooManyRequests) {
245243
klog.Errorf("failed to add metadata for node (%s); retrying in 1 minute: %s", request.node.Name, err)
246244
s.queue.AddAfter(request, retryInterval)
245+
} else {
246+
klog.Errorf("failed to add metadata for node (%s); will not retry: %s", request.node.Name, err)
247247
}
248-
249-
default:
250-
klog.Errorf("failed to add metadata for node (%s); will not retry: %s", request.node.Name, err)
251248
}
252249

253250
registeredK8sNodeCache.updateCache(s.kubeclient)

cloud/linode/service_controller.go

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package linode
22

33
import (
44
"context"
5+
"errors"
56
"net/http"
67
"strings"
78
"time"
@@ -91,19 +92,15 @@ func (s *serviceController) processNextDeletion() bool {
9192
}
9293

9394
err := s.handleServiceDeleted(service)
94-
//nolint: errorlint //switching to errors.Is()/errors.As() causes errors with Code field
95-
switch deleteErr := err.(type) {
96-
case nil:
97-
break
98-
99-
case *linodego.Error:
100-
if deleteErr.Code >= http.StatusInternalServerError || deleteErr.Code == http.StatusTooManyRequests {
95+
var targetError *linodego.Error
96+
if err != nil {
97+
if errors.As(err, &targetError) &&
98+
(targetError.Code >= http.StatusInternalServerError || targetError.Code == http.StatusTooManyRequests) {
10199
klog.Errorf("failed to delete NodeBalancer for service (%s); retrying in 1 minute: %s", getServiceNn(service), err)
102100
s.queue.AddAfter(service, retryInterval)
101+
} else {
102+
klog.Errorf("failed to delete NodeBalancer for service (%s); will not retry: %s", getServiceNn(service), err)
103103
}
104-
105-
default:
106-
klog.Errorf("failed to delete NodeBalancer for service (%s); will not retry: %s", getServiceNn(service), err)
107104
}
108105

109106
return true

0 commit comments

Comments
 (0)