From 471da0abba68752074b117a09a2b9a3bf012b39a Mon Sep 17 00:00:00 2001 From: LiZhenCheng9527 Date: Wed, 17 Jan 2024 19:12:54 +0800 Subject: [PATCH 1/3] return an error for missing metric templates and count that towards the failure threshold Signed-off-by: LiZhenCheng9527 --- pkg/controller/scheduler_metrics.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/controller/scheduler_metrics.go b/pkg/controller/scheduler_metrics.go index 960db811..6d2d3c82 100644 --- a/pkg/controller/scheduler_metrics.go +++ b/pkg/controller/scheduler_metrics.go @@ -306,6 +306,9 @@ func (c *Controller) runMetricChecks(canary *flaggerv1.Canary) bool { canary.Name, canary.Namespace, metric.Name, val, metric.Threshold) return false } + } else if metric.Name != "request-success-rate" && metric.Name != "request-duration" { + c.recordEventErrorf(canary, "Metric query failed for no usable metrics template were configured") + return false } } From d618cfcedd0b4af8fdea12480d76124d42a36cb2 Mon Sep 17 00:00:00 2001 From: LiZhenCheng9527 Date: Thu, 18 Jan 2024 16:52:18 +0800 Subject: [PATCH 2/3] fix ut failed Signed-off-by: LiZhenCheng9527 --- pkg/controller/scheduler_daemonset_fixture_test.go | 4 ++++ pkg/controller/scheduler_deployment_fixture_test.go | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/pkg/controller/scheduler_daemonset_fixture_test.go b/pkg/controller/scheduler_daemonset_fixture_test.go index 7b7cfb7d..354874f5 100644 --- a/pkg/controller/scheduler_daemonset_fixture_test.go +++ b/pkg/controller/scheduler_daemonset_fixture_test.go @@ -356,6 +356,10 @@ func newDaemonSetTestCanaryAB() *flaggerv1.Canary { Min: toFloatPtr(0), Max: toFloatPtr(500000), }, + TemplateRef: &flaggerv1.CrossNamespaceObjectReference{ + Name: "envoy", + Namespace: "default", + }, Interval: "1m", Query: "fake", }, diff --git a/pkg/controller/scheduler_deployment_fixture_test.go b/pkg/controller/scheduler_deployment_fixture_test.go index c08c4541..4ad0ad6e 100644 --- a/pkg/controller/scheduler_deployment_fixture_test.go +++ b/pkg/controller/scheduler_deployment_fixture_test.go @@ -396,6 +396,10 @@ func newDeploymentTestCanaryAB() *flaggerv1.Canary { Min: toFloatPtr(0), Max: toFloatPtr(500000), }, + TemplateRef: &flaggerv1.CrossNamespaceObjectReference{ + Name: "envoy", + Namespace: "default", + }, Interval: "1m", Query: "fake", }, From 5f8aeb878bfc2fd3494c87b8ac166be62b0bf2a2 Mon Sep 17 00:00:00 2001 From: LiZhenCheng9527 Date: Thu, 18 Jan 2024 18:14:44 +0800 Subject: [PATCH 3/3] add ut for function runMetricChecks Signed-off-by: LiZhenCheng9527 --- pkg/controller/scheduler_metrics_test.go | 32 ++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/pkg/controller/scheduler_metrics_test.go b/pkg/controller/scheduler_metrics_test.go index 0f70c17e..13ebcb59 100644 --- a/pkg/controller/scheduler_metrics_test.go +++ b/pkg/controller/scheduler_metrics_test.go @@ -107,4 +107,36 @@ func TestController_runMetricChecks(t *testing.T) { } assert.Equal(t, true, ctrl.runMetricChecks(canary)) }) + + t.Run("undefined metric", func(t *testing.T) { + ctrl := newDeploymentFixture(nil).ctrl + analysis := &flaggerv1.CanaryAnalysis{Metrics: []flaggerv1.CanaryMetric{{ + Name: "undefined metric", + ThresholdRange: &flaggerv1.CanaryThresholdRange{ + Min: toFloatPtr(0), + Max: toFloatPtr(100), + }, + }}} + canary := &flaggerv1.Canary{ + ObjectMeta: metav1.ObjectMeta{Namespace: "default"}, + Spec: flaggerv1.CanarySpec{Analysis: analysis}, + } + assert.Equal(t, false, ctrl.runMetricChecks(canary)) + }) + + t.Run("builtinMetric", func(t *testing.T) { + ctrl := newDeploymentFixture(nil).ctrl + analysis := &flaggerv1.CanaryAnalysis{Metrics: []flaggerv1.CanaryMetric{{ + Name: "request-success-rate", + ThresholdRange: &flaggerv1.CanaryThresholdRange{ + Min: toFloatPtr(0), + Max: toFloatPtr(100), + }, + }}} + canary := &flaggerv1.Canary{ + ObjectMeta: metav1.ObjectMeta{Namespace: "default"}, + Spec: flaggerv1.CanarySpec{Analysis: analysis}, + } + assert.Equal(t, true, ctrl.runMetricChecks(canary)) + }) }