refactor(controller): canary reconcile pipeline with guaranteed status sync. Fixes #4626 - #4963
refactor(controller): canary reconcile pipeline with guaranteed status sync. Fixes #4626#4963zachaller wants to merge 6 commits into
Conversation
Ensure syncRolloutStatusCanary always runs after actuation stages so progressDeadline/abort evaluation cannot be skipped (argoproj#4626). Hold step progression and stable promotion while actuation is deferred, and port argoproj#4962's weight-verification safety for stable scale-down and promotion. Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>
…nditions Replace the per-pass actuationDeferred flag with persisted stage conditions (TrafficRoutingApplied, ServicesReconciled, ActuationSucceeded) merged during status sync. Progression gates read current-pass stage condition state, and conditions are only introduced on failure or when recovering from False. Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>
…eline Introduce a stage table and executor for canary actuation with centralized condition recording, event emission, and requeue policy. Traffic routing errors use stageHold (status sync + verify-interval requeue); other stage failures remain fatal with workqueue backoff. Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>
|
Follow up work:
|
Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>
Published E2E Test Results 4 files 4 suites 4h 7m 28s ⏱️ For more details on these failures, see this check. Results for commit ea191c9. ♻️ This comment has been updated with latest results. |
Published Unit Test Results2 643 tests 2 643 ✅ 3m 30s ⏱️ Results for commit ea191c9. ♻️ This comment has been updated with latest results. |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #4963 +/- ##
==========================================
+ Coverage 85.17% 85.22% +0.04%
==========================================
Files 166 168 +2
Lines 19453 19569 +116
==========================================
+ Hits 16570 16677 +107
- Misses 2030 2038 +8
- Partials 853 854 +1
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…availableCanary Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>
…availableCanary Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>
|



Summary
syncRolloutStatusCanary()runs after every canary actuation pass soevaluateProgressDeadlineAbort, progress deadline timeout, andrequeueStuckRolloutcannot be skipped when a stage errors (progressDeadlineSeconds/progressDeadlineAbort silently non-functional on canary rollouts with Istio traffic routing when canary ReplicaSet is unavailable #4626). Ports fix(controller)!: do not block abort/progressDeadline on traffic routing errors. Fixes #4626 #4962's weight-verification safety (stable scale-down hold,shouldFullPromoteverified-weight check, end-of-rollout unverified-weight handling).TrafficRoutingApplied,ServicesReconciled,ActuationSucceeded) merged during status sync; progression gates read current-pass stage condition state.stageHold(status sync + verify-interval requeue, no reconcile error); other failures remain fatal with workqueue backoff. Centralizes condition recording andTrafficRoutingErrorevent emission.Supersedes #4962 — same #4626 fix, generalized to all canary actuation stages.
Behavior change (release note)
Rollouts stuck on a persistently failing traffic router (or other actuation stage) will now evaluate
progressDeadlineAbortevery reconcile and can time out / auto-abort whenprogressDeadlineAbort: true. Previously they could stayProgressingforever.Test plan
go test ./rollout/... ./utils/conditions/...make test-e2e—TestCanarySuite,TestFunctionalSuitemake test-e2e— Istio progress-deadline abort scenario (optional; covered in fix(controller)!: do not block abort/progressDeadline on traffic routing errors. Fixes #4626 #4962)Made with Cursor