Skip to content

Commit

Permalink
Merge pull request #1215 from aryan9600/scaler-reconciler
Browse files Browse the repository at this point in the history
Fix primary HPA label reconciliation
  • Loading branch information
stefanprodan authored Jun 9, 2022
2 parents 4d2a03c + 9d89411 commit 498f065
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 27 deletions.
44 changes: 19 additions & 25 deletions pkg/canary/hpa_reconciler.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,15 +123,15 @@ func (hr *HPAReconciler) reconcilePrimaryHpaV2(cd *flaggerv1.Canary, hpa *hpav2.
if err != nil {
return err
}
hpaClone := primaryHpa.DeepCopy()
hpaClone.Spec.MaxReplicas = hpaSpec.MaxReplicas
hpaClone.Spec.MinReplicas = hpaSpec.MinReplicas
hpaClone.Spec.Metrics = hpaSpec.Metrics
hpaClone.Spec.Behavior = hpaSpec.Behavior
primaryHpaClone := primaryHpa.DeepCopy()
primaryHpaClone.Spec.MaxReplicas = hpaSpec.MaxReplicas
primaryHpaClone.Spec.MinReplicas = hpaSpec.MinReplicas
primaryHpaClone.Spec.Metrics = hpaSpec.Metrics
primaryHpaClone.Spec.Behavior = hpaSpec.Behavior

hr.updateObjectMeta(hpaClone.ObjectMeta)
hr.updateObjectMeta(primaryHpaClone.ObjectMeta, hpa.ObjectMeta)

_, err = hr.kubeClient.AutoscalingV2().HorizontalPodAutoscalers(cd.Namespace).Update(context.TODO(), hpaClone, metav1.UpdateOptions{})
_, err = hr.kubeClient.AutoscalingV2().HorizontalPodAutoscalers(cd.Namespace).Update(context.TODO(), primaryHpaClone, metav1.UpdateOptions{})
return err
})
if err != nil {
Expand Down Expand Up @@ -207,15 +207,15 @@ func (hr *HPAReconciler) reconcilePrimaryHpaV2Beta2(cd *flaggerv1.Canary, hpa *h
if err != nil {
return err
}
hpaClone := primaryHpa.DeepCopy()
hpaClone.Spec.MaxReplicas = hpaSpec.MaxReplicas
hpaClone.Spec.MinReplicas = hpaSpec.MinReplicas
hpaClone.Spec.Metrics = hpaSpec.Metrics
hpaClone.Spec.Behavior = hpaSpec.Behavior
primaryHpaClone := primaryHpa.DeepCopy()
primaryHpaClone.Spec.MaxReplicas = hpaSpec.MaxReplicas
primaryHpaClone.Spec.MinReplicas = hpaSpec.MinReplicas
primaryHpaClone.Spec.Metrics = hpaSpec.Metrics
primaryHpaClone.Spec.Behavior = hpaSpec.Behavior

hr.updateObjectMeta(hpaClone.ObjectMeta)
hr.updateObjectMeta(primaryHpaClone.ObjectMeta, hpa.ObjectMeta)

_, err = hr.kubeClient.AutoscalingV2beta2().HorizontalPodAutoscalers(cd.Namespace).Update(context.TODO(), hpaClone, metav1.UpdateOptions{})
_, err = hr.kubeClient.AutoscalingV2beta2().HorizontalPodAutoscalers(cd.Namespace).Update(context.TODO(), primaryHpaClone, metav1.UpdateOptions{})
return err
})
if err != nil {
Expand All @@ -237,19 +237,13 @@ func (hr *HPAReconciler) ResumeTargetScaler(cd *flaggerv1.Canary) error {
return nil
}

func (hr *HPAReconciler) updateObjectMeta(meta metav1.ObjectMeta) {
func (hr *HPAReconciler) updateObjectMeta(updateMeta, readMeta metav1.ObjectMeta) {
// update hpa annotations
meta.Annotations = make(map[string]string)
filteredAnnotations := includeLabelsByPrefix(meta.Annotations, hr.includeLabelPrefix)
for k, v := range filteredAnnotations {
meta.Annotations[k] = v
}
filteredAnnotations := includeLabelsByPrefix(readMeta.Annotations, hr.includeLabelPrefix)
updateMeta.Annotations = filteredAnnotations
// update hpa labels
meta.Labels = make(map[string]string)
filteredLabels := includeLabelsByPrefix(meta.Labels, hr.includeLabelPrefix)
for k, v := range filteredLabels {
meta.Labels[k] = v
}
filteredLabels := includeLabelsByPrefix(readMeta.Labels, hr.includeLabelPrefix)
updateMeta.Labels = filteredLabels
}

type hpaFields struct {
Expand Down
2 changes: 0 additions & 2 deletions pkg/canary/hpa_reconciler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ func Test_reconcilePrimaryHpaV2(t *testing.T) {

primaryHPA, err := mocks.kubeClient.AutoscalingV2().HorizontalPodAutoscalers("default").Get(context.TODO(), "podinfo-primary", metav1.GetOptions{})
require.NoError(t, err)
assert.Equal(t, primaryHPA.Spec.ScaleTargetRef.Name, "podinfo-primary")
assert.Equal(t, int(*primaryHPA.Spec.Metrics[0].Resource.Target.AverageUtilization), 99)

hpa.Spec.Metrics[0].Resource.Target = hpav2.MetricTarget{AverageUtilization: int32p(50)}
Expand Down Expand Up @@ -92,7 +91,6 @@ func Test_reconcilePrimaryHpaV2Beta2(t *testing.T) {

primaryHPA, err := mocks.kubeClient.AutoscalingV2beta2().HorizontalPodAutoscalers("default").Get(context.TODO(), "podinfo-primary", metav1.GetOptions{})
require.NoError(t, err)
assert.Equal(t, primaryHPA.Spec.ScaleTargetRef.Name, "podinfo-primary")
assert.Equal(t, int(*primaryHPA.Spec.Metrics[0].Resource.Target.AverageUtilization), 99)

hpa.Spec.Metrics[0].Resource.Target = hpav2beta2.MetricTarget{AverageUtilization: int32p(50)}
Expand Down

0 comments on commit 498f065

Please sign in to comment.