Skip to content

feat(s3): round-trip object attributes and tags - #304

Merged
cxymds merged 1 commit into
mainfrom
cxymds/issue-1456-object-attributes-tags
Jul 23, 2026
Merged

feat(s3): round-trip object attributes and tags#304
cxymds merged 1 commit into
mainfrom
cxymds/issue-1456-object-attributes-tags

Conversation

@cxymds

@cxymds cxymds commented Jul 23, 2026

Copy link
Copy Markdown
Member

Closes rustfs/backlog#1456

Background

The transfer-fidelity models added in #303 were still handled by conservative ObjectStore defaults, so the S3 adapter could not round-trip standard object attributes or atomically attach tags. Multipart copy also had no way to preserve the same metadata semantics as CopyObject.

Root cause

The S3 adapter only mapped Content-Type and user metadata through legacy request models. Advanced transfer methods were not overridden, and RustFS beta.10 does not safely honor full CopyObject metadata REPLACE or tagging directives.

Solution

  • map all supported standard attributes and user metadata from version-aware HEAD responses
  • apply attributes and deterministically URL-encoded tags atomically during PutObject
  • send explicit metadata COPY for CopyObject while rejecting beta.10 metadata REPLACE and tagging gaps before any request
  • preflight the effective source version for multipart metadata COPY and apply the full attribute set to CreateMultipartUpload
  • preserve typed access-denied errors and cancellation boundaries
  • keep checksum, storage class, SSE-C, and object-lock fields explicitly unsupported for their follow-up issues

Validation

  • cargo fmt --all --check
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace
  • independent review completed with no remaining actionable findings

@cxymds
cxymds merged commit 69bbfe8 into main Jul 23, 2026
@cxymds
cxymds deleted the cxymds/issue-1456-object-attributes-tags branch July 23, 2026 07:31
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