fix(controller): honor scaleDownDelaySeconds before scaling down the intermediate RS - #4645
Conversation
75ffe54 to
c96475f
Compare
Published E2E Test Results 4 files 4 suites 4h 14m 2s ⏱️ For more details on these failures, see this check. Results for commit 1523afc. ♻️ This comment has been updated with latest results. |
Published Unit Test Results2 629 tests 2 629 ✅ 3m 31s ⏱️ Results for commit 1523afc. ♻️ This comment has been updated with latest results. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #4645 +/- ##
==========================================
+ Coverage 85.17% 85.20% +0.02%
==========================================
Files 166 166
Lines 19453 19456 +3
==========================================
+ Hits 16570 16578 +8
+ Misses 2030 2027 -3
+ Partials 853 851 -2
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:
|
917b5f0 to
cd62806
Compare
|
|
|
Hello @andrewjamesbrown, I see after you merged master, one of the unit test has failed, could you check and see if you could fix it? |
…intermediate RS Signed-off-by: Andrew Brown <andrew.brown@wealthsimple.com>
Signed-off-by: Andrew Brown <andrew.brown@wealthsimple.com>
Signed-off-by: Andrew Brown <andrew.brown@wealthsimple.com>
Signed-off-by: Andrew Brown <andrew.brown@wealthsimple.com>
8728263 to
8c087ab
Compare
|
There was a problem hiding this comment.
I have no major comments regarding the code just a question for backwards compatibiility.
The original purpose of dynamicStableScale was for cost reasons where users
don't want to keep too many pods active.
But if this PR is merged, then canary users that have enabled dynamicStableScale will see
out of the blue the intermediate RS still running for 30 seconds (default value for scaleDownDelaySeconds) in interrupted canaries even though they have explicitly defined that they don't want any extra pods. So their workflow will change simply by upgrading to a new version of Rollouts.
Not only that, but if they try to add scaleDownDelaySeconds to 0, it turns out that existing validation doesn't allow both scaleDownDelaySeconds and dynamicStableScale to be active.
Do I get that correctly?
Also it turns out that there is a similar PR at #4925 It has a quick fix that drops the validation and allows people to define both scaleDownDelaySeconds and dynamicStableScale. But I am not sure if this is the correct solution either. It will open a can of worms as it doesn't make sense to have both of them enabled at the same time (for the happy path scenario).
I think the bigger question to ask here is if scaleDownDelaySeconds needs to be overloaded with this responsibility. Maybe we need a brand new field here?
I see three ways forward with this PR
-
Merge it as is and note in the release notes the behavior change. Accept the risk of breaking existing users
-
Drop the validation of both fields together. Merge and then accept the future risk of opening a can of worms. Users will set
scaleDownDelaySecondsexpecting it to apply even in the happy path scenario and it won't. -
Create a brand new variable (needs design and discussion) specifically about intermediate/interrupted canaries.
@zachaller any thoughts?



We are experiencing a problem with our use of Istio and Argo Rollouts. During an "interrupted canary", we see:
The issue occurs because the Istio control plane is async - it takes time for the configuration to sync to all the proxies, and during this time, we've started to scale down the intermediate replicaset. In this case, it's desirable to delay the scale-down of the intermediate replicaset until the Istio data plane is in sync.
We see this on a 1.9-equivalent release that we build internally.
Checklist:
"fix(controller): Updates such and such. Fixes #1234".