Read every page of R2's part list so big resumes don't resend parts#60

merged1
dev
feat/resume-1-listparts
openedOct 1, 2026byAAviddaram
View on GitHubTwo-way sync enabledPR last imported 20d ago

Uppy 6.2.1 reads only the first page of R2's part list, and a page holds 1,000 parts. With 64 MiB parts, any file over about 64 GiB that resumes would re-upload parts R2 already has, so the 100 GB and 350 GB stories resend data they don't need to.

A pnpm patch makes S3mini.listParts follow NextPartNumberMarker until IsTruncated is false. The List contract and R2 signing now carry the page marker. First layer of the resume-after-refresh stack. I'll send the patch upstream and drop it once Uppy ships a fix.

diff
1 S3mini.listParts(key, uploadId)
2- GET ?uploadId # page 1 only, 1,000 parts max
3- return parts
4+ loop
5+ GET ?uploadId[&part-number-marker=N] # signRequest → SignUpload { List, partNumberMarker }
6+ collect parts
7+ until IsTruncated != true
8+ return every part

Checked on a preview: I uploaded 1,001 one-byte parts to one multipart upload. The first List returned IsTruncated=true, NextPartNumberMarker=1000 and 1,000 parts. List with marker 1000 returned part 1001. The patched parser reads both pages.

Checks

4 successful · 2 skipped
All checks passed
e1edefd

Added 1 commit

  • Follow every ListParts page so resumes past 1,000 parts don't resend bytese1edefd
Synced from GitHub

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 2cace15e-7fbe-4b13-b66e-4dc00d86a798

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.