Fix bug where CanaryWeight is reset to 0 during CanaryPhasePromoting

Signed-off-by: Yap Sok Ann <sokann@gmail.com>
This commit is contained in:
Yap Sok Ann
2026-03-07 15:02:09 +05:30
committed by Sanskar Jaiswal
parent b10e7cfcb8
commit ceab3ec96b
3 changed files with 20 additions and 1 deletions
+1 -1
View File
@@ -158,7 +158,7 @@ func setStatusPhase(flaggerClient clientset.Interface, cd *flaggerv1.Canary, pha
cdCopy.Status.Phase = phase
cdCopy.Status.LastTransitionTime = metav1.Now()
if phase != flaggerv1.CanaryPhaseProgressing && phase != flaggerv1.CanaryPhaseWaiting {
if phase != flaggerv1.CanaryPhaseProgressing && phase != flaggerv1.CanaryPhaseWaiting && phase != flaggerv1.CanaryPhasePromoting {
cdCopy.Status.CanaryWeight = 0
cdCopy.Status.Iterations = 0
if phase == flaggerv1.CanaryPhaseWaitingPromotion {
@@ -179,27 +179,33 @@ func TestScheduler_DeploymentAnalysisPhases(t *testing.T) {
// detect changes
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseProgressing))
require.NoError(t, assertCanaryWeight(mocks.flaggerClient, "podinfo", 0))
mocks.makeCanaryReady(t)
// progressing
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseProgressing))
require.NoError(t, assertCanaryWeight(mocks.flaggerClient, "podinfo", 100))
// start promotion
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhasePromoting))
require.NoError(t, assertCanaryWeight(mocks.flaggerClient, "podinfo", 100))
// end promotion
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhasePromoting))
require.NoError(t, assertCanaryWeight(mocks.flaggerClient, "podinfo", 50))
// finalising
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseFinalising))
require.NoError(t, assertCanaryWeight(mocks.flaggerClient, "podinfo", 0))
// succeeded
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseSucceeded))
require.NoError(t, assertCanaryWeight(mocks.flaggerClient, "podinfo", 0))
}
func TestScheduler_DeploymentBlueGreenAnalysisPhases(t *testing.T) {
+13
View File
@@ -60,6 +60,19 @@ func assertPhase(flaggerClient clientset.Interface, canary string, phase flagger
return nil
}
func assertCanaryWeight(flaggerClient clientset.Interface, canary string, canaryWeight int) error {
c, err := flaggerClient.FlaggerV1beta1().Canaries("default").Get(context.TODO(), canary, metav1.GetOptions{})
if err != nil {
return err
}
if c.Status.CanaryWeight != canaryWeight {
return fmt.Errorf("got canary weight %d wanted %d", c.Status.CanaryWeight, canaryWeight)
}
return nil
}
func alwaysReady() bool {
return true
}