Skip to content

feat(uploads): resilient multipart upload retries#82

Merged
zfarrell merged 3 commits into
mainfrom
feat/resilient-multipart-retry
Jun 30, 2026
Merged

feat(uploads): resilient multipart upload retries#82
zfarrell merged 3 commits into
mainfrom
feat/resilient-multipart-retry

Conversation

@zfarrell

Copy link
Copy Markdown
Contributor

A single part exhausting its inner retries used to abort the entire multipart upload, discarding every part already done. This adds an outer round loop that re-sweeps only the failed parts (at decaying concurrency, with backoff) while keeping completed parts' ETags, plus a part-size-scaled per-part PUT timeout (capped at an operational ceiling) so a silently stalled connection fails fast instead of hanging the whole transfer.

Comment thread src/uploads.rs
Comment thread src/uploads.rs
claude[bot]
claude Bot previously approved these changes Jun 30, 2026

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Solid, well-tested resilience work. The outer re-sweep loop preserves completed parts' ETags, the terminal-vs-transient split is conservative in the right direction (network-ish stays retryable), and the per-part timeout cleanly bounds a silently stalled connection without touching the legitimately-unbounded single-PUT path. Test coverage is strong: reproduce/fix pair, terminal fast-fail, concurrency cap, and an integration test that recovers a transient 500. Two non-blocking nits left inline.

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the resilient multipart retry changes. The outer round loop, per-part timeout scaling, per-part minting, and parse_etag validation are correct and well-covered by both unit and integration tests. Prior nits (mint request volume, MAX_MINT_BATCH removal) are documented in the CHANGELOG. LGTM.

@zfarrell zfarrell merged commit 16700c1 into main Jun 30, 2026
4 checks passed
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