Skip to content

Commit 16f8e15

Browse files
authored
Merge pull request #1582 from LiZhenCheng9527/fix-metric-bug
return an error for missing metric templates
2 parents b562ddd + 5f8aeb8 commit 16f8e15

4 files changed

+43
-0
lines changed

pkg/controller/scheduler_daemonset_fixture_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,10 @@ func newDaemonSetTestCanaryAB() *flaggerv1.Canary {
356356
Min: toFloatPtr(0),
357357
Max: toFloatPtr(500000),
358358
},
359+
TemplateRef: &flaggerv1.CrossNamespaceObjectReference{
360+
Name: "envoy",
361+
Namespace: "default",
362+
},
359363
Interval: "1m",
360364
Query: "fake",
361365
},

pkg/controller/scheduler_deployment_fixture_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,10 @@ func newDeploymentTestCanaryAB() *flaggerv1.Canary {
396396
Min: toFloatPtr(0),
397397
Max: toFloatPtr(500000),
398398
},
399+
TemplateRef: &flaggerv1.CrossNamespaceObjectReference{
400+
Name: "envoy",
401+
Namespace: "default",
402+
},
399403
Interval: "1m",
400404
Query: "fake",
401405
},

pkg/controller/scheduler_metrics.go

+3
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,9 @@ func (c *Controller) runMetricChecks(canary *flaggerv1.Canary) bool {
306306
canary.Name, canary.Namespace, metric.Name, val, metric.Threshold)
307307
return false
308308
}
309+
} else if metric.Name != "request-success-rate" && metric.Name != "request-duration" {
310+
c.recordEventErrorf(canary, "Metric query failed for no usable metrics template were configured")
311+
return false
309312
}
310313
}
311314

pkg/controller/scheduler_metrics_test.go

+32
Original file line numberDiff line numberDiff line change
@@ -107,4 +107,36 @@ func TestController_runMetricChecks(t *testing.T) {
107107
}
108108
assert.Equal(t, true, ctrl.runMetricChecks(canary))
109109
})
110+
111+
t.Run("undefined metric", func(t *testing.T) {
112+
ctrl := newDeploymentFixture(nil).ctrl
113+
analysis := &flaggerv1.CanaryAnalysis{Metrics: []flaggerv1.CanaryMetric{{
114+
Name: "undefined metric",
115+
ThresholdRange: &flaggerv1.CanaryThresholdRange{
116+
Min: toFloatPtr(0),
117+
Max: toFloatPtr(100),
118+
},
119+
}}}
120+
canary := &flaggerv1.Canary{
121+
ObjectMeta: metav1.ObjectMeta{Namespace: "default"},
122+
Spec: flaggerv1.CanarySpec{Analysis: analysis},
123+
}
124+
assert.Equal(t, false, ctrl.runMetricChecks(canary))
125+
})
126+
127+
t.Run("builtinMetric", func(t *testing.T) {
128+
ctrl := newDeploymentFixture(nil).ctrl
129+
analysis := &flaggerv1.CanaryAnalysis{Metrics: []flaggerv1.CanaryMetric{{
130+
Name: "request-success-rate",
131+
ThresholdRange: &flaggerv1.CanaryThresholdRange{
132+
Min: toFloatPtr(0),
133+
Max: toFloatPtr(100),
134+
},
135+
}}}
136+
canary := &flaggerv1.Canary{
137+
ObjectMeta: metav1.ObjectMeta{Namespace: "default"},
138+
Spec: flaggerv1.CanarySpec{Analysis: analysis},
139+
}
140+
assert.Equal(t, true, ctrl.runMetricChecks(canary))
141+
})
110142
}

0 commit comments

Comments
 (0)