4.30
lynx-family/lynx4.30May 30, 2026by chrislusf
AI Summary
Security and stability updates including health probes and Filer refactoring.
Key Highlights
- Add /healthz and /readyz health probes
- refactor(filer): remove the inode->path index and the NFS gateway
- fix(s3): honor MetadataDirective=REPLACE for system metadata on CopyObject
Breaking Changes
- refactor(filer): remove the inode->path index and the NFS gateway
New Features
- Health probes
- S3 ownership controls
- Filer refactor (NFS removal)
- EC stub replica fixes
Full Release Notes
## What's Changed
* S3
* s3,iceberg: reject `..` in URL path vars by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9687
* fix(s3tables/iceberg): make metadata spec-compliant and accept real-world manifest names by @qzhello in https://github.com/seaweedfs/seaweedfs/pull/9703
* fix: validate s3 ownership controls rule by @7y-9 in https://github.com/seaweedfs/seaweedfs/pull/9684
* fix(s3): honor MetadataDirective=REPLACE for system metadata on CopyObject by @qzhello in https://github.com/seaweedfs/seaweedfs/pull/9721
* fix(s3): allow anonymous unsigned-streaming PutObject by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9727
* fix(s3): authenticate JWT unsigned-streaming uploads by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9729
* perf(s3.iam.GetUser): Make the API default to the request username if not specified by @LightJack05 in https://github.com/seaweedfs/seaweedfs/pull/9746
* Misc
* writeJson: drop unused JSONP branch by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9686
* fix(util): guard BytesToUint{16,32,64} against short input by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9713
* chore(weed/storage/backend/s3_backend): remove unused function by @alrs in https://github.com/seaweedfs/seaweedfs/pull/9715
* [docker] add make test_keycloak_s3 for local develop and debug by @kmlebedev in https://github.com/seaweedfs/seaweedfs/pull/9719
* s3, iam, volume, filer, master: add /healthz and /readyz health probes by @MChorfa in https://github.com/seaweedfs/seaweedfs/pull/9738
* Filer
* redis2: apply keyPrefix in KV methods by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9693
* wdclient: prune filers dropped from master discovery by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9699
* fix(filer/postgres): default to ON CONFLICT upsert to keep tx alive by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9709
* refactor(filer): remove the inode->path index and the NFS gateway by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9724
* refactor: avoid unused sql insert result by @7y-9 in https://github.com/seaweedfs/seaweedfs/pull/9734
* wdclient, dailyrun: add equal jitter to retry backoff by @MChorfa in https://github.com/seaweedfs/seaweedfs/pull/9737
* fix: return immediately on first error in DistributedOperation by @rushikesh90 in https://github.com/seaweedfs/seaweedfs/pull/9740
* Master
* master: timeout AllocateVolume/DeleteVolume and defer growRequest cleanup by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9698
* fix(topology): recover heartbeat-fulled volumes once they shrink by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9742
* topology: fail replica writes fast when a replica is unreachable by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9744
* Volume Server
* fix(volume): avoid nil-deref when needle map loader errors (#9694) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9697
* fix(volume): avoid panic when URL path has a dot before the comma by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9712
* fix(ec): prefer credible replica as canonical metric in EC detection by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9717
* fix(ec): delete empty stub replicas before distributing EC shards by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9722
* fix(storage): keep EC .vif when deleting a coexisting regular volume by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9723
* test(ec): end-to-end encode over a multi-server multi-disk stuck layout by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9728
* fix(volume): stop flipping volumes read-only on a non-append-ordered .idx by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9726
* fix(vacuum): writable volume re-notification after worker VACUUM by @kisow in https://github.com/seaweedfs/seaweedfs/pull/9732
* Replication, Filer Sync
* fix(filer.sync): validate chunk size in FilerSink to prevent 0-byte propagation by @kisow in https://github.com/seaweedfs/seaweedfs/pull/9701
* fix(filer.sync): resolve manifest chunks against source filer by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9705
* fix(remote_storage/s3): forward entry mime as ContentType by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9708
* fix(replication/s3sink): forward entry mime as ContentType by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9710
* fix(remote_storage/gcs): forward entry mime as ContentType by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9711
* fix(filer.sync): keep sync_offset fresh through filtered-event markers by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9733
* Admin Server and Worker
* fix(vacuum): batch all replicas in a single plugin worker task by @kisow in https://github.com/seaweedfs/seaweedfs/pull/9702
* Shell
* fix(shell): don't halt volume.fsck purge on a stuck read-only volume by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9714
* fix(shell): verify volume.merge output before overwriting replicas by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9731
## New Contributors
* @MChorfa made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/9738
* @rushikesh90 made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/9740
* @LightJack05 made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/9746
**Full Changelog**: https://github.com/seaweedfs/seaweedfs/compare/4.29...4.30