From 2f80f6516ff9d388b3c4648d61b7ed6eeb4e51c7 Mon Sep 17 00:00:00 2001 From: binjip978 Date: Wed, 27 Apr 2022 15:43:53 +0300 Subject: [PATCH] Set replicas to MaxReplicas if HPA is enabled (#833) * Set replicas to MaxReplicas if HPA is enabled If number of replicas in current deployment status is bigger than MaxReplicas and HPA is enabled set deployment replicas to MaxReplicas. * Move replicas calculation in seperate function Signed-off-by: binjip978 --- pkg/collector/reconcile/deployment.go | 22 +++++++++++++++------- pkg/collector/reconcile/deployment_test.go | 18 ++++++++++++++++++ 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/pkg/collector/reconcile/deployment.go b/pkg/collector/reconcile/deployment.go index 247a932579..d8bb01d54e 100644 --- a/pkg/collector/reconcile/deployment.go +++ b/pkg/collector/reconcile/deployment.go @@ -24,6 +24,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + "github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1" "github.com/open-telemetry/opentelemetry-operator/pkg/collector" "github.com/open-telemetry/opentelemetry-operator/pkg/targetallocator" ) @@ -98,14 +99,8 @@ func expectedDeployments(ctx context.Context, params Params, expected []appsv1.D updated.ObjectMeta.Labels[k] = v } - // if autoscale is enabled, use replicas from current Status if params.Instance.Spec.MaxReplicas != nil { - currentReplicas := existing.Status.Replicas - // if replicas (minReplicas from HPA perspective) is bigger than - // current status use it. - if params.Instance.Spec.Replicas != nil && *params.Instance.Spec.Replicas > currentReplicas { - currentReplicas = *params.Instance.Spec.Replicas - } + currentReplicas := currentReplicasWithHPA(params.Instance.Spec, existing.Status.Replicas) updated.Spec.Replicas = ¤tReplicas } @@ -154,3 +149,16 @@ func deleteDeployments(ctx context.Context, params Params, expected []appsv1.Dep return nil } + +// currentReplicasWithHPA calculates deployment replicas if HPA is enabled. +func currentReplicasWithHPA(spec v1alpha1.OpenTelemetryCollectorSpec, curr int32) int32 { + if curr < *spec.Replicas { + return *spec.Replicas + } + + if curr > *spec.MaxReplicas { + return *spec.MaxReplicas + } + + return curr +} diff --git a/pkg/collector/reconcile/deployment_test.go b/pkg/collector/reconcile/deployment_test.go index aa955af3a8..5a513d098b 100644 --- a/pkg/collector/reconcile/deployment_test.go +++ b/pkg/collector/reconcile/deployment_test.go @@ -234,3 +234,21 @@ func TestExpectedDeployments(t *testing.T) { }) } + +func TestCurrentReplicasWithHPA(t *testing.T) { + minReplicas := int32(2) + maxReplicas := int32(5) + spec := v1alpha1.OpenTelemetryCollectorSpec{ + Replicas: &minReplicas, + MaxReplicas: &maxReplicas, + } + + res := currentReplicasWithHPA(spec, 10) + assert.Equal(t, int32(5), res) + + res = currentReplicasWithHPA(spec, 1) + assert.Equal(t, int32(2), res) + + res = currentReplicasWithHPA(spec, 3) + assert.Equal(t, int32(3), res) +}