Skip to content

Commit 2a03e6c

Browse files
authored
Merge pull request #1023 from vboulineau/bugfix/segfault-external-19
internal/store/hpa.go: Fix segfault with External metrics
2 parents 952c71f + 56455e2 commit 2a03e6c

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

internal/store/hpa.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,10 @@ var (
245245
// Skip unsupported metric type
246246
continue
247247
}
248+
if value == nil {
249+
// Some types might have a nil value (e.g. External.CurrentAverageValue can be nil)
250+
continue
251+
}
248252
var metricValue float64
249253
if c.Type == autoscaling.ResourceMetricSourceType {
250254
switch c.Resource.Name {

internal/store/hpa_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,13 @@ func TestHPAStore(t *testing.T) {
232232
TargetValue: resourcePtr(resource.MustParse("100")),
233233
},
234234
},
235+
{
236+
Type: autoscaling.ExternalMetricSourceType,
237+
External: &autoscaling.ExternalMetricSource{
238+
MetricName: "traefik_backend_errors_per_second",
239+
TargetValue: resourcePtr(resource.MustParse("100")),
240+
},
241+
},
235242
},
236243
ScaleTargetRef: autoscaling.CrossVersionObjectReference{
237244
APIVersion: "apps/v1",
@@ -274,6 +281,13 @@ func TestHPAStore(t *testing.T) {
274281
CurrentAverageValue: resourcePtr(resource.MustParse("2900m")),
275282
},
276283
},
284+
{
285+
Type: "External",
286+
External: &autoscaling.ExternalMetricStatus{
287+
MetricName: "traefik_backend_errors_per_second",
288+
CurrentValue: resource.MustParse("0"),
289+
},
290+
},
277291
},
278292
},
279293
},
@@ -284,6 +298,7 @@ func TestHPAStore(t *testing.T) {
284298
kube_hpa_spec_min_replicas{hpa="hpa2",namespace="ns1"} 2
285299
kube_hpa_spec_target_metric{hpa="hpa2",metric_name="cpu",metric_target_type="utilization",namespace="ns1"} 80
286300
kube_hpa_spec_target_metric{hpa="hpa2",metric_name="memory",metric_target_type="utilization",namespace="ns1"} 75
301+
kube_hpa_spec_target_metric{hpa="hpa2",metric_name="traefik_backend_errors_per_second",metric_target_type="value",namespace="ns1"} 100
287302
kube_hpa_spec_target_metric{hpa="hpa2",metric_name="traefik_backend_requests_per_second",metric_target_type="value",namespace="ns1"} 100
288303
kube_hpa_status_condition{condition="AbleToScale",hpa="hpa2",namespace="ns1",status="false"} 0
289304
kube_hpa_status_condition{condition="AbleToScale",hpa="hpa2",namespace="ns1",status="true"} 1

0 commit comments

Comments
 (0)