From 4d9d3f2c85d46db8746b67af02575af7f8cf7ea2 Mon Sep 17 00:00:00 2001 From: Jorge Turrado Ferrero Date: Thu, 28 Dec 2023 13:34:11 +0100 Subject: [PATCH] fix: Reconcile SO's status.GVKR if there is any mismatch (#5300) * fix: Reconcille SO's status.GVKR if there is any mismatch Signed-off-by: Jorge Turrado * fix nill reference Signed-off-by: Jorge Turrado --------- Signed-off-by: Jorge Turrado --- controllers/keda/scaledobject_controller.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/controllers/keda/scaledobject_controller.go b/controllers/keda/scaledobject_controller.go index 55d83a03b8f..ece87ebfe32 100755 --- a/controllers/keda/scaledobject_controller.go +++ b/controllers/keda/scaledobject_controller.go @@ -361,10 +361,20 @@ func (r *ScaledObjectReconciler) checkTargetResourceIsScalable(ctx context.Conte gvkString := gvkr.GVKString() logger.V(1).Info("Parsed Group, Version, Kind, Resource", "GVK", gvkString, "Resource", gvkr.Resource) + statusGvkString := "" + if scaledObject.Status.ScaleTargetGVKR != nil { + statusGvkr, _ := kedav1alpha1.ParseGVKR(r.restMapper, scaledObject.Status.ScaleTargetGVKR.Version, scaledObject.Status.ScaleTargetGVKR.Kind) + statusGvkString = statusGvkr.GVKString() + logger.V(1).Info("Status Group, Version, Kind, Resource", "GVK", statusGvkString, "Resource", statusGvkr.Resource) + } + // do we need the scale to update the status later? present := scaledObject.HasPausedAnnotation() removePausedStatus := scaledObject.Status.PausedReplicaCount != nil && !present - wantStatusUpdate := scaledObject.Status.ScaleTargetKind != gvkString || scaledObject.Status.OriginalReplicaCount == nil || removePausedStatus + wantStatusUpdate := scaledObject.Status.ScaleTargetKind != gvkString || + statusGvkString != gvkString || + scaledObject.Status.OriginalReplicaCount == nil || + removePausedStatus // check if we already know. var scale *autoscalingv1.Scale @@ -398,7 +408,7 @@ func (r *ScaledObjectReconciler) checkTargetResourceIsScalable(ctx context.Conte // - store original scaleTarget's replica count (before scaling with KEDA) if wantStatusUpdate { status := scaledObject.Status.DeepCopy() - if scaledObject.Status.ScaleTargetKind != gvkString { + if scaledObject.Status.ScaleTargetKind != gvkString || gvkString != statusGvkString { status.ScaleTargetKind = gvkString status.ScaleTargetGVKR = &gvkr }