4.31

lynx-family/lynx4.31Jun 2, 2026by chrislusf

AI Summary

Focuses on S3 versioning robustness, Terraform support, and EC bitrot detection.

Key Highlights

  • s3: commit a versioned PutObject and its latest pointer in one transaction
  • Add Terraform support for VM-based SeaweedFS deployment
  • EC bitrot detection: per-shard checksum sidecars

New Features

  • S3 versioning transaction commit
  • Terraform VM support
  • EC bitrot detection

Full Release Notes

## What's Changed
* S3
  * s3: short-circuit filer failover on ErrNotFound by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9748
  * s3: return NoSuchVersion (not NoSuchKey) for a missing versionId by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9749
  * s3: commit a versioned PutObject and its latest pointer in one transaction by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9756
  * s3: reject reserved bucket name "filemeta" by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9760
  * fix(s3api): Fix multipart upload ETag compatibility with Hadoop S3A by @phucnguyen261199 in https://github.com/seaweedfs/seaweedfs/pull/9772
  * s3: auto-enforce bucket quota read-only both ways by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9774
  * fix(s3): recover versioned reads when the .versions latest pointer is absent by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9782

* Admin Server and Worker
  * admin: export file/folder metadata from the file browser by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9750
  * admin: view images and PDFs inline in the file browser by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9751
  * admin: store file browser uploads in volumes, not inline by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9752

* Terraform
  * Add Terraform support for VM-based SeaweedFS deployment by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9754

* Volume Server
  * volume: fix maxVolumeCount dead zone that stalled writes on auto-sized disks by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9755
  * EC bitrot detection: per-shard checksum sidecars by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9761
  * EC bitrot follow-ups: protect destination sidecar on optional copy; cap sidecar block_size by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9763
  * fix(http): handle invalid gzip stream errors by @7y-9 in https://github.com/seaweedfs/seaweedfs/pull/9767
  * volume: keep volume writable after a deletion-tail compaction by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9776
  * fix(ec): resolve EC data-shard count from the volume's .vif on reboot by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9779
  * fix(ec): pass per-volume data-shard count to the parity-shard split by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9781

* Shell
  * shell: warn in volume.list when a volume id spans collections by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9759
  * shell: volume.fsck must not skip the system-log subtree by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9764

* Filer Sync
  * filer.sync: back off on transient upload errors by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9777
  * filer.sync: repair a destination shorter than the source by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9778

* Filer
  * filer: name the read-only path in the write rejection by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9773
  * grpc: don't tear down the shared master connection on a caller's own timeout by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9775

* Master
  * fix(topology): restore active count after vacuum recovery by @CodeRusher in https://github.com/seaweedfs/seaweedfs/pull/9770
  * fix(master): notify clients after manual volume grow by @mneetika in https://github.com/seaweedfs/seaweedfs/pull/9656

* Misc
  * ci: parallelize the unified release-container build by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9783

* Rust Volume Server
  * fix(seaweed-volume): bound request body and stored-content expansion to prevent OOM under load by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9780

## New Contributors
* @phucnguyen261199 made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/9772
* @mneetika made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/9656

**Full Changelog**: https://github.com/seaweedfs/seaweedfs/compare/4.30...4.31