This repository was archived by the owner on Jan 16, 2026. It is now read-only.
feat(host): Add retry limits and exponential backoff to preimage fetching #3227
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
The
get_preimagemethod inOnlineHostBackendhad an infinite retry loop with no timeout or backoff mechanism. This caused several issues:This became apparent when encountering the error:
Failed to fetch blobs: Preimage oracle error: Channel is closed.Solution
Added comprehensive retry protection following the project's existing retry patterns from
crates/supervisor/service/src/actors/utils.rs:Key Changes
saturating_powandsaturating_multo prevent overflowImplementation Details
preimage_backoff_delay()function mirroring the project'sbackoff_delay()pattern?delayformat for better observabilityTesting
Behavior Changes
PreimageOracleError::Timeoutafter 30 secondsRelated Issues
Addresses scenarios where Beacon node connectivity issues or missing blob data would cause the host to hang indefinitely.