mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-07-23 16:43:23 +00:00
Both flip the .versions latest pointer off the object-key lock, racing routed versioned/suspended writes (the per-path entry lock and the distributed lock don't serialize against each other). - completeMultipartUpload (versioning enabled) now routes its latest-pointer update through routedVersionedFinalize on the object's owner, carrying the precondition so the filer evaluates it atomically under the per-path lock. The completion then takes no distributed lock at all (mirroring the versioned PutObject path); only object-lock, suspended versioning, unsupported preconditions, or a missing ring view fall back to the lock. Suspended MPU only writes the main object entry (last-writer-wins, benign) and is unchanged. - The lifecycle expiration delete-marker (enabled and suspended) resolves the object owner and routes its marker pointer flip the same way. Both fall back to the lock-based updateLatestVersionInDirectory when the owner isn't known.