You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Implements docs/s3-object-lock.md. WORM enforcement lives in versitygw's
controller (auth.CheckObjectAccess); the backend stores lock state and
returns the exact absent-case sentinels.
Per-version retention and legal holds live in a per-key version-state
tree beside the prev tree: ObjectLeaf.State roots an MST mapping
revSeqKey(seq) to VersionState blocks under the new "/versionstate/0"
union arm. The State field joins ObjectLeaf under the existing
"/objectleaf/0" key with no compatibility shim, per the repo's dev-only
data posture. Mutations rewrite only positional blocks, so manifests
stay immutable and versioning invariant 5 holds verbatim. VersionState
reserves the Tags field for object tagging (handlers, not format, in the
follow-up). Creation-time stamping (PutObject / CopyObject /
CompleteMultipartUpload lock headers) and delete-path cleanup run inside
the same commits that create and remove versions. The bucket-level lock
configuration is a registry column beside versioning; CreateBucket with
x-amz-bucket-object-lock-enabled creates the bucket versioned and locked
in one insert, and PutBucketVersioning refuses to suspend a lock bucket.
Conformance notes pinned by the run: the creation-time header paths
report the NoSpaces variant of the missing-configuration error while the
four per-version methods report the spaced one; key existence outranks
the lock-enabled gate (GetObjectRetention_non_existing_object); the
controller passes an absent retain-until header as a pointer to the zero
time; and NoSuchVersionError / InvalidArgumentError now pass through
mapCommitError verbatim like PreconditionFailedError. itest gains the six
lock groups, a WORMProtection xfail table (bucket-policy-dependent bypass
cases), and a LockCreation category for lock-enabled-bucket cases from
plain-conf groups that need the versioned teardown; the versioning tables
absorb the Versioning_* lock rows and promote
DeleteObject_non_existing_objects.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
0 commit comments