From b1b7b22590e4a5385c3cc0420a4744ebdf947125 Mon Sep 17 00:00:00 2001 From: Vincent Shen Date: Thu, 13 Feb 2025 07:53:04 -0800 Subject: [PATCH] Fix an issue in the ComplianceScan controller MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We were doing two updates without re‐fetching. This fixs it. --- .../compliancescan_controller.go | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/pkg/controller/compliancescan/compliancescan_controller.go b/pkg/controller/compliancescan/compliancescan_controller.go index 78309b2a6..67af49727 100644 --- a/pkg/controller/compliancescan/compliancescan_controller.go +++ b/pkg/controller/compliancescan/compliancescan_controller.go @@ -606,7 +606,7 @@ func (r *ReconcileComplianceScan) phaseAggregatingHandler(h scanTypeHandler, log logger.Info("Creating an aggregator pod for scan") aggregator := r.newAggregatorPod(instance, logger) if priorityClassExist, why := utils.ValidatePriorityClassExist(aggregator.Spec.PriorityClassName, r.Client); !priorityClassExist { - log.Info(why, "aggregator", aggregator.Name) + logger.Info(why, "aggregator", aggregator.Name) r.Recorder.Eventf(aggregator, corev1.EventTypeWarning, "PriorityClass", why+" aggregator:"+aggregator.Name) aggregator.Spec.PriorityClassName = "" } @@ -658,19 +658,21 @@ func (r *ReconcileComplianceScan) phaseAggregatingHandler(h scanTypeHandler, log return reconcile.Result{}, err } - instanceCopy := instance.DeepCopy() - - if instanceCopy.Annotations == nil { - instanceCopy.Annotations = make(map[string]string) + // check if instance has any annotation before checking for check count + // to avoid nil pointer exception in case of missing annotation + if instance.Annotations == nil { + instance.Annotations = make(map[string]string) } - - // adding check count annotation - instanceCopy.Annotations[compv1alpha1.ComplianceCheckCountAnnotation] = strconv.Itoa(checkCount) - - if err := r.Client.Update(context.TODO(), instanceCopy); err != nil { - logger.Error(err, "Cannot update the scan with the check count") - return reconcile.Result{}, err + if _, ok := instance.Annotations[compv1alpha1.ComplianceCheckCountAnnotation]; !ok { + instanceCopy := instance.DeepCopy() + instanceCopy.Annotations[compv1alpha1.ComplianceCheckCountAnnotation] = strconv.Itoa(checkCount) + if err := r.Client.Update(context.TODO(), instanceCopy); err != nil { + logger.Error(err, "Cannot update the scan with the check count") + return reconcile.Result{}, err + } + return reconcile.Result{Requeue: true}, nil } + instance.Status.Phase = compv1alpha1.PhaseDone instance.Status.EndTimestamp = &metav1.Time{Time: time.Now()} instance.Status.SetConditionReady()