Skip to content

Commit f6558da

Browse files
authored
Merge pull request #4356 from zac-nixon/znixon/fix-tgb-error-metrics
fix metric population by requeueneeded error
2 parents 67de256 + 4313f45 commit f6558da

17 files changed

+141
-84
lines changed

controllers/elbv2/targetgroupbinding_controller.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import (
3232
"k8s.io/client-go/util/workqueue"
3333
"sigs.k8s.io/aws-load-balancer-controller/controllers/elbv2/eventhandlers"
3434
"sigs.k8s.io/aws-load-balancer-controller/pkg/config"
35-
errmetrics "sigs.k8s.io/aws-load-balancer-controller/pkg/error"
35+
ctrlerrors "sigs.k8s.io/aws-load-balancer-controller/pkg/error"
3636
"sigs.k8s.io/aws-load-balancer-controller/pkg/k8s"
3737
"sigs.k8s.io/aws-load-balancer-controller/pkg/runtime"
3838
"sigs.k8s.io/aws-load-balancer-controller/pkg/targetgroupbinding"
@@ -131,7 +131,7 @@ func (r *targetGroupBindingReconciler) reconcileTargetGroupBinding(ctx context.C
131131
r.metricsCollector.ObserveControllerReconcileLatency(controllerName, "add_finalizers", finalizerFn)
132132
if err != nil {
133133
r.eventRecorder.Event(tgb, corev1.EventTypeWarning, k8s.TargetGroupBindingEventReasonFailedAddFinalizer, fmt.Sprintf("Failed add finalizer due to %v", err))
134-
return errmetrics.NewErrorWithMetrics(controllerName, "add_finalizers_error", err, r.metricsCollector)
134+
return ctrlerrors.NewErrorWithMetrics(controllerName, "add_finalizers_error", err, r.metricsCollector)
135135
}
136136

137137
var deferred bool
@@ -140,7 +140,7 @@ func (r *targetGroupBindingReconciler) reconcileTargetGroupBinding(ctx context.C
140140
}
141141
r.metricsCollector.ObserveControllerReconcileLatency(controllerName, "reconcile_targetgroupbinding", tgbResourceFn)
142142
if err != nil {
143-
return errmetrics.NewErrorWithMetrics(controllerName, "reconcile_targetgroupbinding_error", err, r.metricsCollector)
143+
return ctrlerrors.NewErrorWithMetrics(controllerName, "reconcile_targetgroupbinding_error", err, r.metricsCollector)
144144
}
145145

146146
if deferred {
@@ -155,7 +155,7 @@ func (r *targetGroupBindingReconciler) reconcileTargetGroupBinding(ctx context.C
155155
}
156156
r.metricsCollector.ObserveControllerReconcileLatency(controllerName, "update_status", updateTargetGroupBindingStatusFn)
157157
if err != nil {
158-
return errmetrics.NewErrorWithMetrics(controllerName, "update_status_error", err, r.metricsCollector)
158+
return ctrlerrors.NewErrorWithMetrics(controllerName, "update_status_error", err, r.metricsCollector)
159159
}
160160

161161
r.eventRecorder.Event(tgb, corev1.EventTypeNormal, k8s.TargetGroupBindingEventReasonSuccessfullyReconciled, "Successfully reconciled")

controllers/gateway/gateway_controller.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy"
2121
elbv2deploy "sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/elbv2"
2222
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/tracking"
23+
ctrlerrors "sigs.k8s.io/aws-load-balancer-controller/pkg/error"
2324
"sigs.k8s.io/aws-load-balancer-controller/pkg/gateway/constants"
2425
gatewaymodel "sigs.k8s.io/aws-load-balancer-controller/pkg/gateway/model"
2526
"sigs.k8s.io/aws-load-balancer-controller/pkg/gateway/referencecounter"
@@ -336,7 +337,7 @@ func (r *gatewayReconciler) reconcileUpdate(ctx context.Context, gw *gwv1.Gatewa
336337

337338
func (r *gatewayReconciler) deployModel(ctx context.Context, gw *gwv1.Gateway, stack core.Stack, secrets []types.NamespacedName) error {
338339
if err := r.stackDeployer.Deploy(ctx, stack, r.metricsCollector, r.controllerName, nil); err != nil {
339-
var requeueNeededAfter *runtime.RequeueNeededAfter
340+
var requeueNeededAfter *ctrlerrors.RequeueNeededAfter
340341
if errors.As(err, &requeueNeededAfter) {
341342
return err
342343
}
@@ -401,7 +402,7 @@ func (r *gatewayReconciler) updateGatewayStatusSuccess(ctx context.Context, lbSt
401402
}
402403

403404
if requeueNeeded {
404-
return runtime.NewRequeueNeededAfter(requeueMessage, statusUpdateRequeueTime)
405+
return ctrlerrors.NewRequeueNeededAfter(requeueMessage, statusUpdateRequeueTime)
405406
}
406407

407408
return nil

controllers/gateway/listenerrule_configuration_controller.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"k8s.io/client-go/util/workqueue"
1313
elbv2gw "sigs.k8s.io/aws-load-balancer-controller/apis/gateway/v1beta1"
1414
"sigs.k8s.io/aws-load-balancer-controller/pkg/config"
15+
ctrlerrors "sigs.k8s.io/aws-load-balancer-controller/pkg/error"
1516
"sigs.k8s.io/aws-load-balancer-controller/pkg/gateway/constants"
1617
"sigs.k8s.io/aws-load-balancer-controller/pkg/gateway/routeutils"
1718
"sigs.k8s.io/aws-load-balancer-controller/pkg/k8s"
@@ -101,7 +102,7 @@ func (r *listenerRuleConfigurationReconciler) handleUpdate(ctx context.Context,
101102
if err := r.updateStatus(ctx, listenerRuleConf, false, secretValidationErr.Error()); err != nil {
102103
return err
103104
}
104-
return runtime.NewRequeueNeededAfter("Required secret not yet available", secretValidationRequeueInterval)
105+
return ctrlerrors.NewRequeueNeededAfter("Required secret not yet available", secretValidationRequeueInterval)
105106
}
106107
return secretValidationErr
107108
}

controllers/ingress/group_controller.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy"
2424
elbv2deploy "sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/elbv2"
2525
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/tracking"
26-
errmetrics "sigs.k8s.io/aws-load-balancer-controller/pkg/error"
26+
ctrlerrors "sigs.k8s.io/aws-load-balancer-controller/pkg/error"
2727
"sigs.k8s.io/aws-load-balancer-controller/pkg/ingress"
2828
"sigs.k8s.io/aws-load-balancer-controller/pkg/k8s"
2929
lbcmetrics "sigs.k8s.io/aws-load-balancer-controller/pkg/metrics/lbc"
@@ -141,7 +141,7 @@ func (r *groupReconciler) reconcile(ctx context.Context, req reconcile.Request)
141141
}
142142
r.metricsCollector.ObserveControllerReconcileLatency(controllerName, "fetch_ingress", loadIngressFn)
143143
if err != nil {
144-
return errmetrics.NewErrorWithMetrics(controllerName, "fetch_ingress_error", err, r.metricsCollector)
144+
return ctrlerrors.NewErrorWithMetrics(controllerName, "fetch_ingress_error", err, r.metricsCollector)
145145
}
146146

147147
addFinalizerFn := func() {
@@ -150,7 +150,7 @@ func (r *groupReconciler) reconcile(ctx context.Context, req reconcile.Request)
150150
r.metricsCollector.ObserveControllerReconcileLatency(controllerName, "add_group_finalizer", addFinalizerFn)
151151
if err != nil {
152152
r.recordIngressGroupEvent(ctx, ingGroup, corev1.EventTypeWarning, k8s.IngressEventReasonFailedAddFinalizer, fmt.Sprintf("Failed add finalizer due to %v", err))
153-
return errmetrics.NewErrorWithMetrics(controllerName, "add_group_finalizer_error", err, r.metricsCollector)
153+
return ctrlerrors.NewErrorWithMetrics(controllerName, "add_group_finalizer_error", err, r.metricsCollector)
154154
}
155155

156156
_, lb, frontendNlb, err := r.buildAndDeployModel(ctx, ingGroup)
@@ -181,7 +181,7 @@ func (r *groupReconciler) reconcile(ctx context.Context, req reconcile.Request)
181181
}
182182
r.metricsCollector.ObserveControllerReconcileLatency(controllerName, "dns_resolve_and_update_status", dnsResolveAndUpdateStatus)
183183
if statusErr != nil {
184-
return errmetrics.NewErrorWithMetrics(controllerName, "dns_resolve_and_update_status_error", statusErr, r.metricsCollector)
184+
return ctrlerrors.NewErrorWithMetrics(controllerName, "dns_resolve_and_update_status_error", statusErr, r.metricsCollector)
185185
}
186186
}
187187

@@ -192,7 +192,7 @@ func (r *groupReconciler) reconcile(ctx context.Context, req reconcile.Request)
192192
r.metricsCollector.ObserveControllerReconcileLatency(controllerName, "remove_group_finalizer", removeGroupFinalizerFn)
193193
if err != nil {
194194
r.recordIngressGroupEvent(ctx, ingGroup, corev1.EventTypeWarning, k8s.IngressEventReasonFailedRemoveFinalizer, fmt.Sprintf("Failed remove finalizer due to %v", err))
195-
return errmetrics.NewErrorWithMetrics(controllerName, "remove_group_finalizer_error", err, r.metricsCollector)
195+
return ctrlerrors.NewErrorWithMetrics(controllerName, "remove_group_finalizer_error", err, r.metricsCollector)
196196
}
197197
}
198198

@@ -214,7 +214,7 @@ func (r *groupReconciler) buildAndDeployModel(ctx context.Context, ingGroup ingr
214214
r.metricsCollector.ObserveControllerReconcileLatency(controllerName, "build_model", buildModelFn)
215215
if err != nil {
216216
r.recordIngressGroupEvent(ctx, ingGroup, corev1.EventTypeWarning, k8s.IngressEventReasonFailedBuildModel, fmt.Sprintf("Failed build model due to %v", err))
217-
return nil, nil, nil, errmetrics.NewErrorWithMetrics(controllerName, "build_model_error", err, r.metricsCollector)
217+
return nil, nil, nil, ctrlerrors.NewErrorWithMetrics(controllerName, "build_model_error", err, r.metricsCollector)
218218
}
219219
stackJSON, err := r.stackMarshaller.Marshal(stack)
220220
if err != nil {
@@ -228,12 +228,12 @@ func (r *groupReconciler) buildAndDeployModel(ctx context.Context, ingGroup ingr
228228
}
229229
r.metricsCollector.ObserveControllerReconcileLatency(controllerName, "deploy_model", deployModelFn)
230230
if err != nil {
231-
var requeueNeededAfter *runtime.RequeueNeededAfter
231+
var requeueNeededAfter *ctrlerrors.RequeueNeededAfter
232232
if errors.As(err, &requeueNeededAfter) {
233233
return nil, nil, nil, err
234234
}
235235
r.recordIngressGroupEvent(ctx, ingGroup, corev1.EventTypeWarning, k8s.IngressEventReasonFailedDeployModel, fmt.Sprintf("Failed deploy model due to %v", err))
236-
return nil, nil, nil, errmetrics.NewErrorWithMetrics(controllerName, "deploy_model_error", err, r.metricsCollector)
236+
return nil, nil, nil, ctrlerrors.NewErrorWithMetrics(controllerName, "deploy_model_error", err, r.metricsCollector)
237237
}
238238
r.logger.Info("successfully deployed model", "ingressGroup", ingGroup.ID)
239239
r.secretsManager.MonitorSecrets(ingGroup.ID.String(), secrets)
@@ -243,7 +243,7 @@ func (r *groupReconciler) buildAndDeployModel(ctx context.Context, ingGroup ingr
243243
inactiveResources = append(inactiveResources, k8s.ToSliceOfNamespacedNames(ingGroup.Members)...)
244244
}
245245
if err := r.backendSGProvider.Release(ctx, networkingpkg.ResourceTypeIngress, inactiveResources); err != nil {
246-
return nil, nil, nil, errmetrics.NewErrorWithMetrics(controllerName, "release_auto_generated_backend_sg_error", err, r.metricsCollector)
246+
return nil, nil, nil, ctrlerrors.NewErrorWithMetrics(controllerName, "release_auto_generated_backend_sg_error", err, r.metricsCollector)
247247
}
248248
return stack, lb, frontendNlb, nil
249249
}

controllers/service/service_controller.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy"
2121
elbv2deploy "sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/elbv2"
2222
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/tracking"
23-
errmetrics "sigs.k8s.io/aws-load-balancer-controller/pkg/error"
23+
ctrlerrors "sigs.k8s.io/aws-load-balancer-controller/pkg/error"
2424
"sigs.k8s.io/aws-load-balancer-controller/pkg/k8s"
2525
lbcmetrics "sigs.k8s.io/aws-load-balancer-controller/pkg/metrics/lbc"
2626
metricsutil "sigs.k8s.io/aws-load-balancer-controller/pkg/metrics/util"
@@ -123,7 +123,7 @@ func (r *serviceReconciler) reconcile(ctx context.Context, req reconcile.Request
123123
}
124124
r.metricsCollector.ObserveControllerReconcileLatency(controllerName, "build_model", buildModelFn)
125125
if err != nil {
126-
return errmetrics.NewErrorWithMetrics(controllerName, "build_model_error", err, r.metricsCollector)
126+
return ctrlerrors.NewErrorWithMetrics(controllerName, "build_model_error", err, r.metricsCollector)
127127
}
128128

129129
if lb == nil {
@@ -132,7 +132,7 @@ func (r *serviceReconciler) reconcile(ctx context.Context, req reconcile.Request
132132
}
133133
r.metricsCollector.ObserveControllerReconcileLatency(controllerName, "cleanup_load_balancer", cleanupLoadBalancerFn)
134134
if err != nil {
135-
return errmetrics.NewErrorWithMetrics(controllerName, "cleanup_load_balancer_error", err, r.metricsCollector)
135+
return ctrlerrors.NewErrorWithMetrics(controllerName, "cleanup_load_balancer_error", err, r.metricsCollector)
136136
}
137137
}
138138
return r.reconcileLoadBalancerResources(ctx, svc, stack, lb, backendSGRequired)
@@ -155,7 +155,7 @@ func (r *serviceReconciler) buildModel(ctx context.Context, svc *corev1.Service)
155155

156156
func (r *serviceReconciler) deployModel(ctx context.Context, svc *corev1.Service, stack core.Stack) error {
157157
if err := r.stackDeployer.Deploy(ctx, stack, r.metricsCollector, "service", nil); err != nil {
158-
var requeueNeededAfter *runtime.RequeueNeededAfter
158+
var requeueNeededAfter *ctrlerrors.RequeueNeededAfter
159159
if errors.As(err, &requeueNeededAfter) {
160160
return err
161161
}
@@ -177,15 +177,15 @@ func (r *serviceReconciler) reconcileLoadBalancerResources(ctx context.Context,
177177
r.metricsCollector.ObserveControllerReconcileLatency(controllerName, "add_finalizers", addFinalizersFn)
178178
if err != nil {
179179
r.eventRecorder.Event(svc, corev1.EventTypeWarning, k8s.ServiceEventReasonFailedAddFinalizer, fmt.Sprintf("Failed add finalizer due to %v", err))
180-
return errmetrics.NewErrorWithMetrics(controllerName, "add_finalizers_error", err, r.metricsCollector)
180+
return ctrlerrors.NewErrorWithMetrics(controllerName, "add_finalizers_error", err, r.metricsCollector)
181181
}
182182

183183
deployModelFn := func() {
184184
err = r.deployModel(ctx, svc, stack)
185185
}
186186
r.metricsCollector.ObserveControllerReconcileLatency(controllerName, "deploy_model", deployModelFn)
187187
if err != nil {
188-
return errmetrics.NewErrorWithMetrics(controllerName, "deploy_model_error", err, r.metricsCollector)
188+
return ctrlerrors.NewErrorWithMetrics(controllerName, "deploy_model_error", err, r.metricsCollector)
189189
}
190190

191191
var lbDNS string
@@ -194,12 +194,12 @@ func (r *serviceReconciler) reconcileLoadBalancerResources(ctx context.Context,
194194
}
195195
r.metricsCollector.ObserveControllerReconcileLatency(controllerName, "DNS_resolve", dnsResolveFn)
196196
if err != nil {
197-
return errmetrics.NewErrorWithMetrics(controllerName, "dns_resolve_error", err, r.metricsCollector)
197+
return ctrlerrors.NewErrorWithMetrics(controllerName, "dns_resolve_error", err, r.metricsCollector)
198198
}
199199

200200
if !backendSGRequired {
201201
if err := r.backendSGProvider.Release(ctx, networking.ResourceTypeService, []types.NamespacedName{k8s.NamespacedName(svc)}); err != nil {
202-
return errmetrics.NewErrorWithMetrics(controllerName, "release_auto_generated_backend_sg_error", err, r.metricsCollector)
202+
return ctrlerrors.NewErrorWithMetrics(controllerName, "release_auto_generated_backend_sg_error", err, r.metricsCollector)
203203
}
204204
}
205205

@@ -209,7 +209,7 @@ func (r *serviceReconciler) reconcileLoadBalancerResources(ctx context.Context,
209209
r.metricsCollector.ObserveControllerReconcileLatency(controllerName, "update_status", updateStatusFn)
210210
if err != nil {
211211
r.eventRecorder.Event(svc, corev1.EventTypeWarning, k8s.ServiceEventReasonFailedUpdateStatus, fmt.Sprintf("Failed update status due to %v", err))
212-
return errmetrics.NewErrorWithMetrics(controllerName, "update_status_error", err, r.metricsCollector)
212+
return ctrlerrors.NewErrorWithMetrics(controllerName, "update_status_error", err, r.metricsCollector)
213213
}
214214
r.eventRecorder.Event(svc, corev1.EventTypeNormal, k8s.ServiceEventReasonSuccessfullyReconciled, "Successfully reconciled")
215215
return nil

pkg/deploy/elbv2/frontend_nlb_target_synthesizer.go

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

33
import (
44
"context"
5+
ctrlerrors "sigs.k8s.io/aws-load-balancer-controller/pkg/error"
56
"time"
67

78
awssdk "github.com/aws/aws-sdk-go-v2/aws"
@@ -12,7 +13,6 @@ import (
1213
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/tracking"
1314
"sigs.k8s.io/aws-load-balancer-controller/pkg/model/core"
1415
elbv2model "sigs.k8s.io/aws-load-balancer-controller/pkg/model/elbv2"
15-
"sigs.k8s.io/aws-load-balancer-controller/pkg/runtime"
1616
"sigs.k8s.io/controller-runtime/pkg/client"
1717
)
1818

@@ -147,7 +147,7 @@ func (s *frontendNlbTargetSynthesizer) PostSynthesize(ctx context.Context) error
147147

148148
if err != nil {
149149
requeueMsg := "Failed to register target, retrying after deplay for target group: " + resTG.Status.TargetGroupARN
150-
return runtime.NewRequeueNeededAfter(requeueMsg, 15*time.Second)
150+
return ctrlerrors.NewRequeueNeededAfter(requeueMsg, 15*time.Second)
151151
}
152152

153153
}

pkg/deploy/elbv2/load_balancer_synthesizer.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ import (
1111
"sigs.k8s.io/aws-load-balancer-controller/pkg/aws/services"
1212
"sigs.k8s.io/aws-load-balancer-controller/pkg/config"
1313
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/tracking"
14+
ctrlerrors "sigs.k8s.io/aws-load-balancer-controller/pkg/error"
1415
"sigs.k8s.io/aws-load-balancer-controller/pkg/model/core"
1516
elbv2model "sigs.k8s.io/aws-load-balancer-controller/pkg/model/elbv2"
16-
"sigs.k8s.io/aws-load-balancer-controller/pkg/runtime"
1717
"sigs.k8s.io/aws-load-balancer-controller/pkg/shared_constants"
1818
"strings"
1919
)
@@ -131,7 +131,7 @@ func (s *loadBalancerSynthesizer) PostSynthesize(ctx context.Context) error {
131131
}
132132
if isLoadBalancerProvisioning {
133133
requeueMsg := "monitor provisioning state for load balancer: " + awssdk.ToString(resAndSDKLB.sdkLB.LoadBalancer.LoadBalancerName)
134-
return runtime.NewRequeueNeededAfter(requeueMsg, s.controllerConfig.LBStabilizationMonitorInterval)
134+
return ctrlerrors.NewRequeueNeededAfter(requeueMsg, s.controllerConfig.LBStabilizationMonitorInterval)
135135
}
136136
if err := s.capacityReservationReconciler.Reconcile(ctx, resAndSDKLB.resLB, resAndSDKLB.sdkLB); err != nil {
137137
return err

pkg/deploy/stack_deployer.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/tracking"
1616
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/wafregional"
1717
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/wafv2"
18-
errmetrics "sigs.k8s.io/aws-load-balancer-controller/pkg/error"
18+
ctrlerrors "sigs.k8s.io/aws-load-balancer-controller/pkg/error"
1919
lbcmetrics "sigs.k8s.io/aws-load-balancer-controller/pkg/metrics/lbc"
2020
"sigs.k8s.io/aws-load-balancer-controller/pkg/model/core"
2121
"sigs.k8s.io/aws-load-balancer-controller/pkg/networking"
@@ -157,7 +157,7 @@ func (d *defaultStackDeployer) Deploy(ctx context.Context, stack core.Stack, met
157157
}
158158
d.metricsCollector.ObserveControllerReconcileLatency(controllerName, synthesizerType, synthesizeFn)
159159
if err != nil {
160-
return errmetrics.NewErrorWithMetrics(controllerName, synthesizerType, err, d.metricsCollector)
160+
return ctrlerrors.NewErrorWithMetrics(controllerName, synthesizerType, err, d.metricsCollector)
161161
}
162162
}
163163
for i := len(synthesizers) - 1; i >= 0; i-- {

pkg/error/error_with_metrics.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
package errmetrics
1+
package ctrlerrors
22

33
import (
4+
"github.com/pkg/errors"
45
lbcmetrics "sigs.k8s.io/aws-load-balancer-controller/pkg/metrics/lbc"
56
)
67

@@ -16,7 +17,18 @@ func NewErrorWithMetrics(resourceType string, errorCategory string, err error, m
1617
ErrorCategory: errorCategory,
1718
Err: err,
1819
}
19-
metricCollector.ObserveControllerReconcileError(resourceType, errorCategory)
20+
21+
var skipErrorMetric bool
22+
var requeueNeededAfter *RequeueNeededAfter
23+
var requeueAfter *RequeueNeeded
24+
if errors.As(err, &requeueNeededAfter) || errors.As(err, &requeueAfter) {
25+
skipErrorMetric = true
26+
}
27+
28+
if !skipErrorMetric {
29+
metricCollector.ObserveControllerReconcileError(resourceType, errorCategory)
30+
}
31+
2032
return reconcileErr
2133
}
2234

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package ctrlerrors
2+
3+
import (
4+
"github.com/pkg/errors"
5+
"github.com/stretchr/testify/assert"
6+
lbcmetrics "sigs.k8s.io/aws-load-balancer-controller/pkg/metrics/lbc"
7+
"testing"
8+
)
9+
10+
func Test_NewErrorWithMetrics(t *testing.T) {
11+
resourceType := "test-resource"
12+
category := "test-category"
13+
testCases := []struct {
14+
name string
15+
err error
16+
expectedInvocations int
17+
}{
18+
{
19+
name: "real error",
20+
err: errors.New("bad thing"),
21+
expectedInvocations: 1,
22+
},
23+
{
24+
name: "requeue needed error",
25+
err: &RequeueNeeded{},
26+
},
27+
{
28+
name: "requeue needed after error",
29+
err: &RequeueNeededAfter{},
30+
},
31+
}
32+
33+
for _, tc := range testCases {
34+
t.Run(tc.name, func(t *testing.T) {
35+
collector := lbcmetrics.NewMockCollector()
36+
res := NewErrorWithMetrics(resourceType, category, tc.err, collector)
37+
assert.Equal(t, tc.err, res.Err)
38+
assert.Equal(t, resourceType, res.ResourceType)
39+
assert.Equal(t, category, res.ErrorCategory)
40+
mc := collector.(*lbcmetrics.MockCollector)
41+
assert.Equal(t, tc.expectedInvocations, len(mc.Invocations[lbcmetrics.MetricControllerReconcileErrors]))
42+
})
43+
}
44+
}

0 commit comments

Comments
 (0)