Remove http_io_retry_transient_errors feature flag
What does this MR do and why?
Removes the http_io_retry_transient_errors feature flag and makes the retry behaviour in Gitlab::HttpIO unconditional.
Gitlab::HttpIO reads remote files from object storage (archived CI job traces, remote artifacts opened via GitlabUploader#open) as a series of 128 KB HTTP range requests. A failed chunk request is retried instead of failing the whole read: transport errors (TLS errors, connection resets, DNS failures, EOF, malformed responses) and response codes 429, 500, 502, 503, and 504 are retried, but open/read/write timeouts and other 4xx responses are not. The budget is 3 retries shared across every chunk one HttpIO instance fetches, with a 100 ms base delay that doubles per retry and is jittered.
The flag was a gitlab_com_derisk flag, default disabled, so this behaviour never reached self-managed or GitLab Dedicated while the flag existed. It has been at 100% of actors on GitLab.com since 2026-09-15 and the rollout is complete.
Changes:
- Delete
config/feature_flags/gitlab_com_derisk/http_io_retry_transient_errors.yml - Remove the
@retry_transient_errorsinstance variable and itsFeature.enabled?check fromGitlab::HttpIO#initialize - Remove the
#fetch_chunk_responsedispatcher and the single-attempt#fetch_chunk_response_oncemethod, and rename#fetch_chunk_response_with_retriesto#fetch_chunk_response - Move the comment documenting Net::HTTP's own reconnect-and-retry behaviour onto
#chunk_attempt, and update theMAX_RETRIEScomment that cross-referenced it - Remove the specs that stubbed the flag off to assert single-attempt behaviour, since that coverage already exists under the 'retrying transient failures' describe
- Rework the 'when the server fails persistently and then recovers' example so the whole retry budget has to be spent before the read fails
- Simplify the sleep stub in the retry describe, which only existed to avoid instantiating the object before the flag stub was in place
References
- Rollout issue: #623429 (closed)
- Introducing MR: !252069 (merged)
- Feature issue: #604514 (closed)
Screenshots or screen recordings
No user-visible UI change, so no screenshots apply.
How to set up and validate locally
- Run
bundle exec rspec spec/lib/gitlab/http_io_spec.rb; all examples should pass. - Optionally, read an archived CI job trace or open a remote artifact locally to exercise
Gitlab::HttpIO. There is no longer a flag to toggle: the retry behaviour is always on.
MR acceptance checklist
Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.