diff --git a/pkg/controller/podautoscaler/replica_calculator.go b/pkg/controller/podautoscaler/replica_calculator.go index ace9803bdf3..d479a4edd84 100644 --- a/pkg/controller/podautoscaler/replica_calculator.go +++ b/pkg/controller/podautoscaler/replica_calculator.go @@ -265,6 +265,7 @@ func (c *ReplicaCalculator) GetObjectPerPodMetricReplicas(currentReplicas int32, return 0, 0, time.Time{}, fmt.Errorf("unable to get metric %s: %v on %s %s/%s", metricName, objectRef.Kind, namespace, objectRef.Name, err) } + replicaCount = currentReplicas usageRatio := float64(utilization) / (float64(targetAverageUtilization) * float64(replicaCount)) if math.Abs(1.0-usageRatio) > c.tolerance { // update number of replicas if change is large enough diff --git a/pkg/controller/podautoscaler/replica_calculator_test.go b/pkg/controller/podautoscaler/replica_calculator_test.go index 0638f89341f..c07d7b2bb5c 100644 --- a/pkg/controller/podautoscaler/replica_calculator_test.go +++ b/pkg/controller/podautoscaler/replica_calculator_test.go @@ -970,6 +970,26 @@ func TestReplicaCalcToleranceCMObject(t *testing.T) { tc.runTest(t) } +func TestReplicaCalcTolerancePerPodCMObject(t *testing.T) { + tc := replicaCalcTestCase{ + currentReplicas: 4, + expectedReplicas: 4, + metric: &metricInfo{ + metricType: objectPerPodMetric, + name: "qps", + levels: []int64{20166}, + perPodTargetUtilization: 5000, + expectedUtilization: 5042, + singleObject: &autoscalingv2.CrossVersionObjectReference{ + Kind: "Deployment", + APIVersion: "apps/v1", + Name: "some-deployment", + }, + }, + } + tc.runTest(t) +} + func TestReplicaCalcToleranceCMExternal(t *testing.T) { tc := replicaCalcTestCase{ currentReplicas: 3,