Skip to content

Streaming multipart uploads drop custom headers at CHUNK_SIZE #472

Description

@mfroembgen

Describe the bug

put_object_stream_builder applies per-upload metadata and custom headers when an upload uses single-part PutObject. When the payload reaches CHUNK_SIZE and switches to multipart upload, those headers are not sent on CreateMultipartUpload.

S3-compatible services require completed-object configuration such as user metadata, cache control, storage class, and SSE-S3/KMS headers during multipart initiation. The upload succeeds, but the completed object silently loses that configuration.

To Reproduce

  1. Start an S3-compatible MinIO instance and create a bucket.
  2. Upload synthetic byte payloads using put_object_stream_builder with custom metadata.
  3. Check the completed object's metadata with HEAD.
Payload size Upload path Metadata
CHUNK_SIZE - 1 single-part present
CHUNK_SIZE multipart missing
above CHUNK_SIZE multipart missing

Expected behavior

Streaming-builder headers should be signed and sent on CreateMultipartUpload, so completed-object metadata and other initiation-time configuration survive at and above the multipart boundary.

Environment

  • Rust: 1.97.1
  • rust-s3: 0.37.2
  • Storage: MinIO-compatible S3 endpoint

Additional context

This is the multipart-specific gap related to #408. A previous implementation direction was discussed in #446. The consumer-visible reproduction is brunojppb/turbo-cache-server#620, and the proposed fix is #471.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions