Make sync recover multipart uploads reliably #63

Merged
ober merged 14 commits from fix/astra-jobs16-part-writes into main 2026-09-21 15:23:09 -04:00
Owner

Fix sync reliability for high-job-count uploads by capping simultaneous file uploads at four, splitting the unchanged JDv2 encrypted frame stream into S3-compliant 8 MiB multipart parts, and using smaller TLS request writes. Refresh upload deadlines on retry and drain nested part workers safely after cancellation or failure.

Validation:

  • make test passes, including multipart frame-preservation and nested cancellation/failure regressions.
  • macOS make clean, make binary, and make binary-smoke pass.
  • make linux-amd64, make linux-arm64, and make freebsd-amd64 pass.
  • git diff --check passes.

The requested full-home jd sync -v -d . jd:mac2/ was exercised but did not complete: an active QEMU process was writing ~/.android/avd/jmail_export_api26.avd/userdata-qemu.img.qcow2, and sync correctly rejected the changing source file. The emulator was left running.

Fix sync reliability for high-job-count uploads by capping simultaneous file uploads at four, splitting the unchanged JDv2 encrypted frame stream into S3-compliant 8 MiB multipart parts, and using smaller TLS request writes. Refresh upload deadlines on retry and drain nested part workers safely after cancellation or failure. Validation: - `make test` passes, including multipart frame-preservation and nested cancellation/failure regressions. - macOS `make clean`, `make binary`, and `make binary-smoke` pass. - `make linux-amd64`, `make linux-arm64`, and `make freebsd-amd64` pass. - `git diff --check` passes. The requested full-home `jd sync -v -d . jd:mac2/` was exercised but did not complete: an active QEMU process was writing `~/.android/avd/jmail_export_api26.avd/userdata-qemu.img.qcow2`, and sync correctly rejected the changing source file. The emulator was left running.
Make sync recover multipart uploads reliably
Some checks failed
version-policy / required (pull_request) Successful in 3m44s
required-ci / required (pull_request) Failing after 4m4s
656571c022
ci: retry required checks after local verification
Some checks failed
version-policy / required (pull_request) Successful in 3m43s
required-ci / required (pull_request) Failing after 4m57s
58fa103c91
Continue sync when a source file changes
Some checks failed
version-policy / required (pull_request) Successful in 3m43s
required-ci / required (pull_request) Failing after 4m1s
c380322913
ci: report required check stages separately
Some checks failed
required-ci / required (pull_request) Failing after 3m42s
version-policy / required (pull_request) Successful in 3m44s
ffd832111c
ci: use GNU make on FreeBSD runner
Some checks failed
version-policy / required (pull_request) Successful in 3m43s
required-ci / required (pull_request) Failing after 4m2s
623ca49249
ci: isolate required test stages
Some checks failed
version-policy / required (pull_request) Successful in 3m43s
required-ci / required (pull_request) Failing after 3m54s
0506ff9082
ci: isolate sync regression checks
Some checks failed
version-policy / required (pull_request) Successful in 3m44s
required-ci / required (pull_request) Failing after 4m9s
766239a2ca
ci: group unit assertions for diagnosis
Some checks failed
version-policy / required (pull_request) Successful in 3m43s
required-ci / required (pull_request) Failing after 4m19s
fc86f17206
ci: pinpoint FreeBSD unit test failures
Some checks failed
version-policy / required (pull_request) Successful in 3m44s
required-ci / required (pull_request) Failing after 4m17s
bfc4c68175
ci: isolate FreeBSD unit assertion failures
All checks were successful
version-policy / required (pull_request) Successful in 3m44s
required-ci / required (pull_request) Successful in 5m10s
b3b90dfc57
fix: skip unrepresentable S3 object keys
All checks were successful
version-policy / required (pull_request) Successful in 3m43s
required-ci / required (pull_request) Successful in 5m10s
1be0b35d8d
fix: allow long multipart operations to recover
All checks were successful
version-policy / required (pull_request) Successful in 3m44s
required-ci / required (pull_request) Successful in 5m15s
ae64572a16
fix: extend timeout for multi-hour uploads
All checks were successful
version-policy / required (pull_request) Successful in 3m43s
required-ci / required (pull_request) Successful in 5m5s
3a6f585715
fix: skip S3 keys rejected as too long
All checks were successful
version-policy / required (pull_request) Successful in 3m42s
required-ci / required (pull_request) Successful in 5m18s
58e884f3ac
ober scheduled this pull request to auto merge when all checks succeed 2026-09-21 15:22:56 -04:00
ober merged commit befc285829 into main 2026-09-21 15:23:09 -04:00
ober referenced this pull request from a commit 2026-09-21 15:23:10 -04:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ober/jerboa-drive!63
No description provided.