4.29
mkturkcan/DART4.29May 26, 2026by chrislusf
AI Summary
This release introduces a major architectural overhaul for EC placement using the ecbalancer and adds comprehensive S3 Object Locking support via new transaction mechanisms. It also implements a distributed POSIX advisory locking system for FUSE mounts to ensure cross-machine file consistency.
Key Highlights
- EC placement refactor using ecbalancer.Place
- New S3 Object Locking and transaction support
- POSIX advisory locking for FUSE mounts
- Prometheus metrics exposure in Admin Server
New Features
- ObjectTransaction for atomic multi-entry writes
- POSIX lock authority and session management
- EC placement snapshot for large topologies
Full Release Notes
## What's Changed * Admin Server and Worker * EC placement: shared replica-placement resolver, snapshot + Place core, capacity fixes, tiering by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9621 * EC encode: place shards via ecbalancer.Place + configurable replica placement by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9623 * Delete the EC placement package now that encode/repair use ecbalancer.Place by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9624 * EC detection: build placement snapshot once per cycle (fix large-topology timeout) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9625 * admin: expose Prometheus metrics by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9652 * S3 APIs * filer: serialize same-path mutations with a per-path lock by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9639 * filer: evaluate a write precondition in CreateEntry by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9650 * filer: add ObjectTransaction for atomic multi-entry object writes by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9646 * filer: add RECOMPUTE_LATEST mutation to ObjectTransaction by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9647 * filer: add extended-attribute guard clauses for object-lock by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9648 * s3: use oidc: prefix for trust-policy conditions in IAM example by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9653 * filer: add ObjectTransactionBatch for multi-key object writes by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9649 * filer: reuse the caller's fetched entry in CreateEntry by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9645 * filer: let PATCH_EXTENDED replace Entry.content by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9654 * s3: dial the object lock's primary filer directly by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9626 * s3: route single-entry object writes to the owner filer, off the DLM by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9629 * s3: serialize bucket config writes with field-level filer patches by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9655 * s3: route versioned PutObject finalize off the DLM by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9631 * s3: route object-lock object writes off the distributed lock by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9635 * s3: route versioned COPY and delete-marker off the DLM by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9633 * s3: route multipart-upload completion off the distributed lock by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9632 * s3: route object-lock version-specific deletes off the distributed lock by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9657 * s3: route metadata-only self-copy off the distributed lock by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9638 * ObjectTransaction: filer-side forwarding via route_key by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9659 * FUSE Mount * filer: POSIX advisory lock set primitive (phase 1 of distributed FUSE locking) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9660 * filer: serialize the POSIX lock set for entry metadata (phase 2) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9661 * filer: in-memory POSIX lock authority (Manager) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9663 * filer: routed PosixLock RPC over the in-memory authority by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9664 * mount: fix SetAttr/GetAttr crash from concurrent chunk append under writebackCache by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9667 * mount: route POSIX advisory locks to the owner filer under -dlm by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9669 * mount: keep the posix-lock hint until the release RPC succeeds by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9670 * filer: session lease + reaping for POSIX locks by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9666 * mount,filer: re-assert POSIX locks via keepalive (ownership migration + restart) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9668 * fix: avoid rclone nil close panics by @7y-9 in https://github.com/seaweedfs/seaweedfs/pull/9674 * filer: cooling-off dual-read for POSIX locks during ring changes by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9672 * filer: warm-up + fail-closed cooling for POSIX locks on owner (re)start by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9673 * filer/posixlock: remove the unused lock-set serde by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9676 * test/fuse_dlm: cross-mount POSIX locks + survival across a ring change by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9677 * Misc * test: wait for a writable volume before lifecycle tests' first write by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9658 * fix(master): re-register volumes missing from the lookup index by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9620 **Full Changelog**: https://github.com/seaweedfs/seaweedfs/compare/4.28...4.29