Skip to content

Commit

Permalink
fix:TargetAverageValue (#1235)
Browse files Browse the repository at this point in the history
Signed-off-by: Tsuyoshi Ushio <ushio@simplearchitect.com>
  • Loading branch information
TsuyoshiUshio authored and silenceper committed Oct 10, 2020
1 parent 4e483e3 commit 7287d9c
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 13 deletions.
51 changes: 51 additions & 0 deletions pkg/scaling/scale_hander_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package scaling

import (
"testing"

"github.com/stretchr/testify/assert"
"k8s.io/api/autoscaling/v2beta2"
"k8s.io/apimachinery/pkg/api/resource"
)

func TestTargetAverageValue(t *testing.T) {
// count = 0
specs := []v2beta2.MetricSpec{}
targetAverageValue := getTargetAverageValue(specs)
assert.Equal(t, int64(0), targetAverageValue)
// 1 1
specs = []v2beta2.MetricSpec{
createMetricSpec(1),
createMetricSpec(1),
}
targetAverageValue = getTargetAverageValue(specs)
assert.Equal(t, int64(1), targetAverageValue)
// 5 5 3
specs = []v2beta2.MetricSpec{
createMetricSpec(5),
createMetricSpec(5),
createMetricSpec(3),
}
targetAverageValue = getTargetAverageValue(specs)
assert.Equal(t, int64(4), targetAverageValue)

// 5 5 4
specs = []v2beta2.MetricSpec{
createMetricSpec(5),
createMetricSpec(5),
createMetricSpec(3),
}
targetAverageValue = getTargetAverageValue(specs)
assert.Equal(t, int64(4), targetAverageValue)
}

func createMetricSpec(averageValue int) v2beta2.MetricSpec {
qty := resource.NewQuantity(int64(averageValue), resource.DecimalSI)
return v2beta2.MetricSpec{
External: &v2beta2.ExternalMetricSource{
Target: v2beta2.MetricTarget{
AverageValue: qty,
},
},
}
}
40 changes: 27 additions & 13 deletions pkg/scaling/scale_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"time"

"github.com/go-logr/logr"
"k8s.io/api/autoscaling/v2beta2"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
Expand Down Expand Up @@ -235,24 +236,14 @@ func (h *scaleHandler) checkScaledJobScalers(ctx context.Context, scalers []scal

scalerLogger.Info("Active trigger", "isTriggerActive", isTriggerActive)

var metricValue int64
var flag bool
for _, metric := range metricSpecs {
if metric.External.Target.AverageValue == nil {
metricValue = 0
} else {
metricValue, flag = metric.External.Target.AverageValue.AsInt64()
if !flag {
metricValue = 0
}
}
targetAverageValue = getTargetAverageValue(metricSpecs)

targetAverageValue += metricValue
}
scalerLogger.Info("Scaler targetAverageValue", "targetAverageValue", targetAverageValue)

metrics, _ := scaler.GetMetrics(ctx, "queueLength", nil)

var metricValue int64

for _, m := range metrics {
if m.MetricName == "queueLength" {
metricValue, _ = m.Value.AsInt64()
Expand All @@ -277,6 +268,29 @@ func (h *scaleHandler) checkScaledJobScalers(ctx context.Context, scalers []scal
return isActive, queueLength, maxValue
}

func getTargetAverageValue(metricSpecs []v2beta2.MetricSpec) int64 {
var targetAverageValue int64
var metricValue int64
var flag bool
for _, metric := range metricSpecs {
if metric.External.Target.AverageValue == nil {
metricValue = 0
} else {
metricValue, flag = metric.External.Target.AverageValue.AsInt64()
if !flag {
metricValue = 0
}
}

targetAverageValue += metricValue
}
count := int64(len(metricSpecs))
if count != 0 {
return targetAverageValue / count
}
return 0
}

func devideWithCeil(x, y int64) int64 {
ans := x / y
reminder := x % y
Expand Down

0 comments on commit 7287d9c

Please # to comment.