Skip to content

fix(deploy): tolerate transient Get errors in wait loops - #5097

Draft
lubien wants to merge 1 commit into
retry/update-in-placefrom
retry/wait-loops
Draft

fix(deploy): tolerate transient Get errors in wait loops#5097
lubien wants to merge 1 commit into
retry/update-in-placefrom
retry/wait-loops

Conversation

@lubien

@lubien lubien commented Aug 19, 2026

Copy link
Copy Markdown
Member

Four poll loops \u2014 WaitForSmokeChecksToPass, WaitForHealthchecksToPass,
WaitForEventType, WaitForEventTypeAfterType, plus the bluegreen
strategy's WaitForGreenMachinesToBeHealthy \u2014 all called flapsClient.Get
inside a for-loop and aborted the whole wait on any error. A single
transient 408 or 5xx during health polling would fail a deploy that was
otherwise about to succeed.

Get is idempotent, and these loops already exist because state
propagation takes time. The loops now check IsTransientFlapsError and
keep polling on transient failures; only genuinely permanent errors
(4xx other than 408/429, or non-flaps errors that aren't network
hiccups) still abort the wait. The outer wait context caps total time.

@lubien
lubien requested a review from dangra August 20, 2026 17:12
Four poll loops \u2014 WaitForSmokeChecksToPass, WaitForHealthchecksToPass,
WaitForEventType, WaitForEventTypeAfterType, plus the bluegreen
strategy's WaitForGreenMachinesToBeHealthy \u2014 all called flapsClient.Get
inside a for-loop and aborted the whole wait on any error. A single
transient 408 or 5xx during health polling would fail a deploy that was
otherwise about to succeed.

Get is idempotent, and these loops already exist because state
propagation takes time. The loops now check IsTransientFlapsError and
keep polling on transient failures; only genuinely permanent errors
(4xx other than 408/429, or non-flaps errors that aren't network
hiccups) still abort the wait. The outer wait context caps total time.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant