4.40
build-with-groq/g14.40Jul 20, 2026by chrislusf
AI Summary
SeaweedFS 4.40 focuses on S3 security enhancements, Filer stability improvements, and Erasure Coding cleanup.
Key Highlights
- Enforced role trust policy on OIDC bearer authentication.
- Hardened TUS session authorization against cross-prefix access.
- Introduced `ec.check.replication` shell command.
- Fixed object tagging for nested keys.
New Features
- S3 role trust policy enforcement
- TUS session path scoping
- EC sidecar removal on destroy
- Shell command for checking EC replication
- Volume server status updates
Full Release Notes
## What's Changed ## S3 * s3: enforce role trust policy on direct OIDC bearer authentication by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10302 * s3: accept raw semicolons in query strings by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10305 * s3: return NoSuchKey/NoSuchBucket for a missing CopyObject source by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10332 * s3: invalid tagging on CopyObject returns InvalidTag, not InvalidCopySource by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10362 * Fix PutObjectAcl writing back to the wrong object for nested keys by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10333 * Fix object tagging writing back to the wrong object for nested keys by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10338 * fix: report short S3 ReaderAt reads by @7y-9 in https://github.com/seaweedfs/seaweedfs/pull/10345 ## Filer * fix(filer.backup): prevent silent backup data loss on transient not-found by @kisow in https://github.com/seaweedfs/seaweedfs/pull/10295 * filer: scope TUS HEAD/PATCH/DELETE against the session target path by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10309 * filer: harden TUS session authorization against cross-prefix access by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10315 * filer: allow clearing a bucket read-only flag stuck after quota removal by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10310 * route log buffer flush copies through the shared slab pool by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10336 * generate vtproto marshalers for filer_pb and use them on the metadata log path by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10337 * cassandra: do not mask KvGet backend errors as not-found by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10361 ## Erasure Coding * ec.encode: don't rebalance against a topology that predates the new shards by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10303 * ec: remove .ecsum sidecars on destroy / shard delete; align Go and Rust cleanup by @franchb in https://github.com/seaweedfs/seaweedfs/pull/10307 * shell: default batch size for ec.encode and ec.decode by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10308 * Introduce weed shell command `ec.check.replication`. by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10328 ## Shell * shell: volume.tier.upload keeps volume replicas by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10314 * shell: volume.check.disk -resurrectMissingNeedles for never-vacuumed replicas by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10316 * shell: show who holds the cluster lock by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10353 * shell: cluster.ps lists s3 servers by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10359 ## Master * master: statistics used size covers all collections in https://github.com/seaweedfs/seaweedfs/pull/10319 * master: assign re-picks once after its growth concludes instead of shedding by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10348 ## Volume Server * fix(volume): reject overflowing needle ID deltas by @7y-9 in https://github.com/seaweedfs/seaweedfs/pull/10342 * batch delete: align the shard test and Rust server with @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10349 * volume server: fill in ModifiedAtSecond on the /status https://github.com/seaweedfs/seaweedfs/pull/10351 * rust volume: verify the .dat ends at the last indexed needle by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10320 * fix Rust build with protoc versions lacking native proto3 https://github.com/seaweedfs/seaweedfs/pull/10343 ## Mount * mount: surface ENOSPC instead of endless waiting in https://github.com/seaweedfs/seaweedfs/pull/10341 ## New Contributors * @franchb made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/10307 **Full Changelog**: https://github.com/seaweedfs/seaweedfs/compare/4.39...4.40