Skip to content

fix: passthrough Scylla manifest UploadPartCopy with full-object range#121

Merged
ServerSideHannes merged 3 commits into
mainfrom
fix/manifest-upload-part-copy-400
Jul 8, 2026
Merged

fix: passthrough Scylla manifest UploadPartCopy with full-object range#121
ServerSideHannes merged 3 commits into
mainfrom
fix/manifest-upload-part-copy-400

Conversation

@ServerSideHannes

Copy link
Copy Markdown
Owner

Summary

  • Normalize x-amz-copy-source-range: bytes=0-(size-1) to a whole-object copy so large encrypted SST manifests (.sm_*) use UPLOAD_PART_COPY_PASSTHROUGH instead of UPLOAD_PART_COPY_STREAMING
  • Remove the streaming pipeline semaphore from the passthrough path so manifest copies are not queued behind 6+ minute re-encrypt jobs
  • Fixes prod 400s at ~300s where Scylla Manager timed out while s3proxy was still in the copy pipeline (validated via kubectl logs on uploadId=2~prvq0MWZR...)

Test plan

  • pytest tests/unit/test_upload_part_copy_passthrough.py (6 tests: range normalization, Scylla-shaped full-range passthrough, semaphore non-blocking)
  • pytest tests/unit/test_copy_pipeline_cap.py tests/unit/test_copy_per_part_memory.py tests/unit/test_copy_clamp_and_concurrency.py (41 tests)
  • CI e2e: tests/integration/test_upload_part_copy_passthrough_e2e.py (new test_scylla_manifest_full_range_passthrough on 1280MB source)
  • Deploy to staging and confirm UPLOAD_PART_COPY_PASSTHROUGH + 200 on big-Data.db.sm_* manifest uploads during Scylla backup

Made with Cursor

ServerSideHannes and others added 3 commits July 8, 2026 21:12
Scylla Manager sends bytes=0-(size-1) on .sm_ manifest copies, which previously
forced UPLOAD_PART_COPY_STREAMING and queued behind the 2-slot pipeline until the
300s client timeout. Normalize full-object ranges to whole-object copies and
stop gating passthrough on the streaming semaphore.

Co-authored-by: Cursor <cursoragent@cursor.com>
Update test_passthrough_encrypt_delta_vs_reencrypt to expect encrypt bytes
proportional to the 32MB partial range, not the full 96MB QUICK_SIZE source.
Fix ruff line-length and unused-variable lint.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@ServerSideHannes ServerSideHannes merged commit fe3cc10 into main Jul 8, 2026
10 checks passed
@ServerSideHannes ServerSideHannes deleted the fix/manifest-upload-part-copy-400 branch July 8, 2026 19:50
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