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