Skip to content

Commit 549d7c7

Browse files
committed
Fix bug where CanaryWeight is reset to 0 during CanaryPhasePromoting
1 parent 3a27fd1 commit 549d7c7

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

pkg/canary/status.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ func setStatusPhase(flaggerClient clientset.Interface, cd *flaggerv1.Canary, pha
158158
cdCopy.Status.Phase = phase
159159
cdCopy.Status.LastTransitionTime = metav1.Now()
160160

161-
if phase != flaggerv1.CanaryPhaseProgressing && phase != flaggerv1.CanaryPhaseWaiting {
161+
if phase != flaggerv1.CanaryPhaseProgressing && phase != flaggerv1.CanaryPhaseWaiting && phase != flaggerv1.CanaryPhasePromoting {
162162
cdCopy.Status.CanaryWeight = 0
163163
cdCopy.Status.Iterations = 0
164164
if phase == flaggerv1.CanaryPhaseWaitingPromotion {

pkg/controller/scheduler_deployment_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,27 +179,33 @@ func TestScheduler_DeploymentAnalysisPhases(t *testing.T) {
179179
// detect changes
180180
mocks.ctrl.advanceCanary("podinfo", "default")
181181
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseProgressing))
182+
require.NoError(t, assertCanaryWeight(mocks.flaggerClient, "podinfo", 0))
182183
mocks.makeCanaryReady(t)
183184

184185
// progressing
185186
mocks.ctrl.advanceCanary("podinfo", "default")
186187
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseProgressing))
188+
require.NoError(t, assertCanaryWeight(mocks.flaggerClient, "podinfo", 100))
187189

188190
// start promotion
189191
mocks.ctrl.advanceCanary("podinfo", "default")
190192
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhasePromoting))
193+
require.NoError(t, assertCanaryWeight(mocks.flaggerClient, "podinfo", 100))
191194

192195
// end promotion
193196
mocks.ctrl.advanceCanary("podinfo", "default")
194197
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhasePromoting))
198+
require.NoError(t, assertCanaryWeight(mocks.flaggerClient, "podinfo", 50))
195199

196200
// finalising
197201
mocks.ctrl.advanceCanary("podinfo", "default")
198202
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseFinalising))
203+
require.NoError(t, assertCanaryWeight(mocks.flaggerClient, "podinfo", 0))
199204

200205
// succeeded
201206
mocks.ctrl.advanceCanary("podinfo", "default")
202207
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseSucceeded))
208+
require.NoError(t, assertCanaryWeight(mocks.flaggerClient, "podinfo", 0))
203209
}
204210

205211
func TestScheduler_DeploymentBlueGreenAnalysisPhases(t *testing.T) {

pkg/controller/scheduler_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,19 @@ func assertPhase(flaggerClient clientset.Interface, canary string, phase flagger
6060
return nil
6161
}
6262

63+
func assertCanaryWeight(flaggerClient clientset.Interface, canary string, canaryWeight int) error {
64+
c, err := flaggerClient.FlaggerV1beta1().Canaries("default").Get(context.TODO(), canary, metav1.GetOptions{})
65+
if err != nil {
66+
return err
67+
}
68+
69+
if c.Status.CanaryWeight != canaryWeight {
70+
return fmt.Errorf("got canary weight %d wanted %d", c.Status.CanaryWeight, canaryWeight)
71+
}
72+
73+
return nil
74+
}
75+
6376
func alwaysReady() bool {
6477
return true
6578
}

0 commit comments

Comments
 (0)