S3, Admin, Terraform, Volume, EC, Shell, Filer, Master, Rust
Release history
seaweedfs releases
SeaweedFS is a distributed storage system for object storage (S3), file systems, and Iceberg tables, designed to handle billions of files with O(1) disk access and effortless horizontal scaling.
All releases
23 shown
- Add -bucket flag to pre‑create an S3 bucket on startup
Full changelog
What's Changed
-
Shell
- fix(shell): correct volume.list -writable filter unit and comparison by @qzhello in https://github.com/seaweedfs/seaweedfs/pull/9231
- shell: expand
~in local file path arguments by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9265 - fix(shell): use exact match for volume.balance -racks/-nodes filter by @qzhello in https://github.com/seaweedfs/seaweedfs/pull/9279
-
S3 API
- fix(s3api): return 503 + Retry-After when remote object not cached yet by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9233
- fix(s3api): fix uint16 overflow in doListFilerEntries Limit calculation by @chenshi5012 in https://github.com/seaweedfs/seaweedfs/pull/9271
- fix(s3api): clear stale latest-version pointer when .versions dir cleanup is blocked by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9269
- test(s3): force-drop collection after deleteBucket in tagging/versioning/cors/copying by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9270
- fix(s3api): re-encrypt UploadPartCopy bytes for the destination's SSE config (#8908) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9280
- fix(s3api): cross-SSE copy operations and bring them back into CI (#9281) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9282
- ci: bring previously-uncovered integration tests into CI (#9281 follow-up) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9283
- fix(s3): honor X-Forwarded-For in audit log remote_ip by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9295
- fix(s3api,iamapi): avoid full SaveConfiguration when creating a single IAM user by @ykatchou in https://github.com/seaweedfs/seaweedfs/pull/9261
- fix(s3): cache remote-only source before CopyObject (#9304) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9305
-
Filer
- fix(filer): return 503 + Retry-After when remote object not cached yet by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9236
- filer(mysql): TLS hostname/SNI knobs + MariaDB upsert documentation by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9260
- feat(filer.sync): add -verifySync mode to filer.sync for cross-cluster file comparison by @kisow in https://github.com/seaweedfs/seaweedfs/pull/9284
-
Misc
- fix(kafka): evict expired group members on rejoin to unblock fast restart by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9243
- Export
file_read_invalid_needlesmetric for REST read requests on invalid file IDs. by @plisandro in https://github.com/seaweedfs/seaweedfs/pull/9241 - chore(weed/topology): prune unused functions by @alrs in https://github.com/seaweedfs/seaweedfs/pull/9249
- fix(grpc): require host match before routing dials to local Unix socket (#9254) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9257
- Export Prometheus metrics for scrubbing operations. by @plisandro in https://github.com/seaweedfs/seaweedfs/pull/9264
- chore(shell): fix typo in EC shard helper param names by @qzhello in https://github.com/seaweedfs/seaweedfs/pull/9277
- chore(weed/mq/kafka/protocol): prune dead code by @alrs in https://github.com/seaweedfs/seaweedfs/pull/9288
- chore(weed/mq/kafka/protocol): prune no-op test by @alrs in https://github.com/seaweedfs/seaweedfs/pull/9287
- refactor(weed/storage): log volume file removal failures by @alrs in https://github.com/seaweedfs/seaweedfs/pull/9297
- refactor(command): expand "~" in all path-style CLI flags by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9306
-
Volume Server
- fix(volume_server): pin EC shard auto-select to the .ecx-owning disk (#9212) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9245
- fix(volume_server): load orphan EC shards across disks on startup (#9212) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9244
- fix(storage): fix verifyDeletedNeedleIntegrity using wrong offset by @chenshi5012 in https://github.com/seaweedfs/seaweedfs/pull/9273
-
Table Buckets and Iceberg Catalog
- fix(iceberg): default namespace location so fresh CTAS does not race metadata write (#9074) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9246
- test(iceberg): cross-engine regression coverage for deterministic table locations (#9074) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9253
- test(s3tables): add Dremio Iceberg catalog integration tests by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9299
- test(s3tables): expand Dremio Iceberg catalog test coverage by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9303
-
Docker
- feat(docker): default CMD to
mini -dir=/datafor service-container use by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9255
- feat(docker): default CMD to
-
Admin Server and Workers
- fix(admin): use protocol-relative URLs for component links so HTTPS clusters don't break clicks by @pmiriyev in https://github.com/seaweedfs/seaweedfs/pull/9256
- feat(admin): prefer stored S3 Content-Type metadata over key-extension MIME inference by @baracudaz in https://github.com/seaweedfs/seaweedfs/pull/9286
- fix(admin/view): define basePath in plugin IIFE scopes by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9298
- refactor(worker): co-locate plugin handlers with their task packages by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9301
-
NFS server
- fix(nfs): reject NFSv4 calls with PROG_MISMATCH so clients fall back to v3 by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9262
- feat(nfs): UDP MOUNT v3 responder + real-Linux e2e mount harness by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9267
- fix(nfs): accept dirpath any-where under the export, mirroring rclone by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9291
-
FUSE Mount
- mount: expose -fuse.maxBackground and -fuse.congestionThreshold flags (closes #9258) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9268
- fix(mount): copy xattr value bytes to avoid FUSE buffer aliasing by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9278
- fix(mount): keep async flush when LockOwner has no POSIX locks by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9300
-
Master
- fix(master): bump seaweedfs/raft to v1.1.8 for Windows syncDir fix by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9296
-
Mini
- feat(mini): add -bucket flag to pre-create an S3 bucket on startup by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9302
-
Rust Volume Server
- fix(seaweed-volume): ceil EC shard slots in maybe_adjust_volume_max by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9232
- fix(seaweed-volume): parse host:port.grpcPort in master address by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9235
- fix(seaweed-volume): accept redb aliases for --index by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9237
- fix(seaweed-volume): port EC shard placement fix to Rust (#9212, mirrors #9245) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9250
- feat(seaweed-volume): auto-load EC shards on startup (#9212) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9251
- feat(seaweed-volume): cross-disk EC shard reconciliation (#9212) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9252
- rust(volume): export Prometheus metrics for scrubbing operations by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9266
- rust(volume): strip grpc-port suffix from master URL before HTTP lookup by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9276
New Contributors
- @chenshi5012 made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/9271
- @baracudaz made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/9286
- @ykatchou made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/9261
Full Changelog: https://github.com/seaweedfs/seaweedfs/compare/4.22...4.23
- Removed -mount.p2p flag; registry is always on
- Hot-reload HTTPS certs without restart (k8s cert-manager)
- Postgres credential support with inline policies, mTLS, pgbouncer
- fs.mergeVolumes deletes source needles after filer update
Full changelog
Comments
For clusters with multiple volume servers with multiple disks, and if Erasure Coding is used, please upgrade!
https://github.com/seaweedfs/seaweedfs/pull/9219 fixed a problem when the volume server is restarted, some EC shards may be reported as missing while actually they are still on disks.
What's Changed
-
Shell
- fix(shell): volume.fsck keeps going past a single broken chunk manifest by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9140
- feat(shell): fs.mergeVolumes deletes source needles after filer update by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9160
- fix(shell): error on missing volume id in fsck, mergeVolumes, vacuum by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9158
- refactor(shell): run volume.fsck purge once per volume, after all replicas by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9159
- fix(shell): ec.encode health-check key mismatch on K8s deployments by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9164
- fix(shell): mergeVolumes hard-link safety and cleaner cleanup logging by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9163
-
Mount
- fix(mount): retry saveEntry on transient filer errors; stop mismapping Canceled to EIO by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9141
- fix(mount): flush dirty handles on Release when kernel skipped Flush by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9165
- fix(mount): sanitize non-UTF-8 filenames; keep marshal errors per-request by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9207
-
Misc
- fix(kafka): make consumer-group rebalancing work end-to-end by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9143
- chore(weed/s3api/policy): prune unused test functions by @alrs in https://github.com/seaweedfs/seaweedfs/pull/9150
- fix(kafka): close late-joiner orphan race in consumer-group rebalance by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9162
- chore(upload): log offset/bytes-read context on chunk ReadFrom errors by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9169
- fix(tests): make tests pass on 32-bit architectures (#9168) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9170
- feat(security): hot-reload HTTPS certs without restart (k8s cert-manager) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9181
- chore(filer): remove -mount.p2p flag; registry is always on by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9183
- fix(filer.meta.tail): fail fast when -es is used without elastic build tag by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9191
- fix(filer.meta.tail): include extended metadata in Elasticsearch docs by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9200
- chore(weed/filer/redis3): prune unused test functions by @alrs in https://github.com/seaweedfs/seaweedfs/pull/9192
- fix(weed/command) address unhandled errors by @alrs in https://github.com/seaweedfs/seaweedfs/pull/9208
- Export REST file_{read,write}_failures metrics on volume servers by @plisandro in https://github.com/seaweedfs/seaweedfs/pull/9215
-
Filer
- fix(log_buffer): back off disk-poll cadence when caught up to disk head by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9161
- perf(filer): parallelize StreamMutateEntry with path-keyed scheduler by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9171
- fix(remote-storage/azure): fix re-cache of large remote blobs (#9174) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9179
- fix(filer/remote): keep re-cache work alive past caller cancellation (#9174) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9193
-
Master
- fix(topology): drop per-disk task-type conflict map (#9147) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9166
- fix(master): register EC shards per physical disk on full heartbeat sync (#9212) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9219
-
Volume Server
- fix(volume): write state.pb into a real dir when -dir.idx is unset by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9178
- fix(ec): honor disk_id in ReceiveFile so EC shards respect admin placement (#9184) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9185
- Export gRPC
file_{read,write}_failuresmetrics on volume servers. in https://github.com/seaweedfs/seaweedfs/pull/9177 - fix(volume_server): refuse ReceiveFile overwrite of mounted EC shard (#9184) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9186
- fix(upload): keep Content-MD5 on 204 unchanged writes by @CodeRusher in https://github.com/seaweedfs/seaweedfs/pull/9198
- fix(storage): use ceil division for EC shard slots in maxVolumeCount by @FQHSLycopene in https://github.com/seaweedfs/seaweedfs/pull/9196
- fix(volume): cap leveldb OpenFilesCacheCapacity per index DB (#9139) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9223
- fix(upload): rewind request body when retrying on connection reset (#9139) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9222
-
S3 API
- fix(s3api): route STS GetFederationToken to STS handler (#9157) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9167
- fix(s3/shell): factor EC volumes into bucket size metrics and collection.list by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9182
- feat(iam): allow caller-supplied AccessKeyId and SecretAccessKey in CreateAccessKey by @JonNesvold in https://github.com/seaweedfs/seaweedfs/pull/9172
- fix(iam): accept bare "*" resource in PutUserPolicy (#9209) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9210
- fix(s3api): correct SSE-S3 decryption key handling in multipart uploads by @os-pradipbabar in https://github.com/seaweedfs/seaweedfs/pull/9211
- fix(iam): substitute dynamic jwt:/saml:/oidc: claim variables in policies by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9217
- fix(s3api): validate SSE-S3 chunk IV length; add multipart direct reader tests by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9218
- fix(s3api): backfill multipart SSE-S3 metadata at completion by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9224
- feat(credential/postgres): inline policies, mTLS and pgbouncer connection support by @JonNesvold in https://github.com/seaweedfs/seaweedfs/pull/9226
- fix(s3api): stream multipart-SSE chunks lazily to avoid truncated GETs (#8908) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9228
- fix(credential/postgres,s3api/iam): rename safety + pgxutil follow-ups to #9226 by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9230
-
Admin Server and Workers
- fix(erasure_coding): surface replica delete failures from EC task (#9184) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9187
- fix(admin): use basePath for API fetches when urlPrefix is set by @faspix in https://github.com/seaweedfs/seaweedfs/pull/9197
- fix(admin): S3 Tables CSRF token + non-empty 409 status by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9221
- fix(admin): use TLS-aware HTTP client for /dir/status fetch by @pmiriyev in https://github.com/seaweedfs/seaweedfs/pull/9227
-
NFS Server
- fix(nfs): make Linux
mount -t nfswork without client workaround (#9199) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9201
- fix(nfs): make Linux
-
Helm Charts
- fix(helm): gate S3 TLS cert args on httpsPort to stop probe failures (#9202) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9206
New Contributors
- @JonNesvold made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/9172
- @faspix made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/9197
- @plisandro made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/9215
- @pmiriyev made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/9227
Full Changelog: https://github.com/seaweedfs/seaweedfs/compare/4.21...4.22
- CVE-2026-28390: libcrypto3/libssl3 dependency upgrade
- S3 API: reject unsigned x-amz-* headers in SigV4 requests
- FUSE mount 100% POSIX compliant
- FUSE mount peer-to-peer file chunk sharing
- NFS Server implementation
Full changelog
What's Changed
This is a packed release with many fixes and some new features!
- FUSE Mount now is 100% POSIX Compliant
- FUSE Mount added Peer-to-peer file chunk sharing!
- For AI Use case, added optimization for all-to-all parallel downloading from volume server for loading Large Language Models.
- S3 reading performance is improved for large files. Welcome to report actual performance improvements.
- And one more thing: A NFS Server is added !!!
Change logs
-
FUSE Mount
- fix(mount): propagate hard-link nlink changes to sibling cache entries by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9062
- fix(mount): stop double-applying umask in Mkdir by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9063
- fix(mount): serialize hard-link mutations on HardLinkId by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9064
- feat(mount): cap write buffer with -writeBufferSizeMB by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9066
- fix(mount): evict writable chunks when writeBufferSizeMB cap is reached by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9091
- feat(mount): proactive flush of idle writable chunks by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9094
- fix(mount): reduce chunk fragmentation from random writes by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9096
- fix(mount): count manifest sizes in merge condition to prevent accumulation by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9101
- perf(cache): drop OS page cache after disk cache reads by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9098
- feat(mount): singleflight dedup for concurrent chunk reads by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9100
- perf(mount): add graduated write backpressure by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9099
- feat(mount): set FOPEN_KEEP_CACHE on re-open of unchanged files by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9097
- ci(pjdfstest): cache docker layers via GHA to avoid apt mirror flakes by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9106
- fix(mount): avoid self-notify deadlock in Link and CopyFileRange handlers by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9110
- fix(mount): remove fid pool to stop master over-allocating volumes by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9111
- fix(mount): close inodeLocks cleanup race that let two flock holders coexist by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9128
- peer chunk sharing 1/8: proto definitions by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9130
- peer chunk sharing 2/8: filer mount registry by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9131
- peer chunk sharing 3/8: mount peer-serve HTTP endpoint by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9132
- peer chunk sharing 4/8: mount registrar + HRW owner selection by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9133
- peer chunk sharing 5/8: mount chunk-directory shard by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9134
- peer chunk sharing 6/8: announce queue + batched flush by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9135
- peer chunk sharing 7/8: tryPeerRead read-path hook by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9136
-
S3 API
- perf(s3): route GET through ChunkReadAt + per-request ReaderCache by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9068
- perf(s3): add optional shared in-memory chunk cache for GET by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9069
- fix(s3): allow anonymous ListBuckets with prefix-scoped List action by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9073
- fix(s3): honor ChecksumAlgorithm on presigned URL uploads by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9076
- fix(s3): strip client-supplied X-SeaweedFS-Principal/Session-Token in AuthSignatureOnly by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9120
- fix(s3): return 403 on POST policy violation instead of 307 redirect by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9122
- fix(s3): propagate validated POST form fields to upload headers by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9123
- fix(s3): reject unknown POST policy conditions and extra x-amz form fields by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9124
- fix(s3api): self-heal stale .versions latest-version pointer on read by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9125
-
Table Buckets and Iceberg Catalog
- fix(iceberg): clean stale data before creating a table (#9074) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9077
- fix(iceberg): route catalog clients to the right bucket and vend S3 endpoint by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9109
-
NFS Server
- [nfs] Add NFS by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9067
-
Admin Server and Worker
- admin: include EC volumes in bucket size reporting by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9058
- fix(weed/worker/tasks): log dropped errors by @alrs in https://github.com/seaweedfs/seaweedfs/pull/9057
- admin: report file and delete counts for EC volumes by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9060
- fix(balance): guard against destination overshoot and oscillation by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9090
- fix(admin): list all masters and dedupe EC file counts in dashboard by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9093
- fix(plugin): remove Min Volume Age field from vacuum plugin worker config by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9095
-
Filer Sync and Backup
- perf(filer.sync): don't serialize descendants behind dir attribute updates by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9079
- feat(filer.backup): -initialSnapshot seeds destination from live tree by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9126
-
Helm Chart
- fix(helm): skip s3 ServiceMonitor when only filer.s3 is enabled by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9081
-
Filer
- fix(wdclient,volume): compare master leader with ServerAddress.Equals by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9089
- fix(filer): drop stale master gRPC cache on stream death (#9102) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9107
-
Master
- fix(master): do not re-enter warmup when a fresh cluster grows its first volume by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9092
- fix(master): eagerly remove volume from writable when assign hits limit by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9108
-
Volume Server
- fix(volume): keep vacuum running past dangling .idx entries by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9115
- Export
master_disconnectionsmetrics on volume servers. by @proton-lisandro-pin in https://github.com/seaweedfs/seaweedfs/pull/9104
-
Shell
- feat(shell): add fs.distributeChunks command for even chunk distribution by @kisow in https://github.com/seaweedfs/seaweedfs/pull/9117
- fix(shell): fs.mergeVolumes now rewrites manifest chunks for large files by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9127
-
Misc
- docker: upgrade libcrypto3/libssl3 to clear Trivy HIGH (CVE-2026-28390) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9059
- test(vacuum): fix flaky TestVacuumIntegration across multiple volumes by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9061
- chore(weed/mq/kafka/schema): remove unused functions by @alrs in https://github.com/seaweedfs/seaweedfs/pull/9088
- test(kafka): retry ConsumeWithGroup on failed initial join by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9105
- fix(mini): shut down admin/s3/webdav/filer before volume/master on Ctrl+C by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9112
- fix(weed/query/engine): check for nil pointers by @alrs in https://github.com/seaweedfs/seaweedfs/pull/9114
- ci(kafka-loadtest): switch off Ubuntu/Debian base images to avoid apt mirror flakes by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9119
- security(s3api): reject unsigned x-amz-* headers in SigV4 requests by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9121
- fix kafka gateway and consumer group e2e flakes by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/9129
Full Changelog: https://github.com/seaweedfs/seaweedfs/compare/4.20...4.21
- FUSE mount nanosecond timestamp precision support
- IAM ListUserPolicies API and group inline policy actions
- Size-aware volume assignment with weighted selection
- Critical fix for erasure coding: off-by-one error in nLargeBlockRows caused data read corruption
- Default master resumeState changed to true
- WEED_S3_SSE_KEY environment variable now available for SSE-S3 key encryption
- SSE-C customer encryption keys no longer logged in debug output
- Dashboard and service account secret keys now use URL-safe encoding
- Replication of SSE-encrypted objects now preserves ciphertext
- STS GetCallerIdentity and GetFederationToken support
- Concurrent chunk prefetch for faster large file downloads
- Expanded S3 shell commands for IAM, policy, user, and service account management
Full changelog
What's Changed
-
Table Bucket and Iceberg Catalog
- fix(iceberg): use dot separator for namespace paths instead of unit separator by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8960
-
S3 API
- fix(s3): remove customer encryption key from SSE-C debug log by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8875
- S3: map canned ACL to file permissions and add configurable default file mode by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8886
- fix(s3): use recursive delete for .versions directory cleanup by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8887
- fix(test): address flaky S3 distributed lock integration test by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8888
- STS: add GetCallerIdentity support by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8893
- fix(s3): skip directories before marker in ListObjectVersions pagination by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8890
- feat(s3): add STS GetFederationToken support by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8891
- fix(s3): use URL-safe secret keys for dashboard users and service accounts by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8902
- feat(s3): support WEED_S3_SSE_KEY env var for SSE-S3 KEK by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8904
- fix: Prevent orphaned metadata from cancelled S3 operations (Issue #8908) by @os-pradipbabar in https://github.com/seaweedfs/seaweedfs/pull/8909
- feat(s3): store and return checksum headers for additional checksum algorithms by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8914
- feat(s3): add concurrent chunk prefetch for large file downloads by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8917
- fix(s3): include static identities in listing operations by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8903
- fix: S3 sink puts all entry.Extended into Tagging header instead of only object tags by @Mmx233 in https://github.com/seaweedfs/seaweedfs/pull/8930
- fix(s3): apply PutObject multipart expansion to STS session policies by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8932
- fix(s3): s3:PutObject bucket policy now implicitly allows multipart uploads by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8968
- S3: delay empty folder cleanup to prevent Spark write failures by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8970
- fix(s3): populate s3:prefix from query param for ListObjects policy conditions by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8971
- fix(s3): handle empty URL path in forwarded prefix signature verification by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8973
-
Admin UI and Workers
- fix(admin): respect urlPrefix in S3 bucket and S3Tables navigation links by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8885
- fix(weed/worker/tasks/ec_balance): non-recursive reportProgress by @alrs in https://github.com/seaweedfs/seaweedfs/pull/8892
- feat(admin): add profiling options for debugging high memory/CPU usage by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8923
- fix(admin): fix master leader link showing incorrect port in Admin UI by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8924
- fix(admin): reduce memory usage and verbose logging for large clusters by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8927
- fix: prevent stack overflow in ECBalanceTask.reportProgress by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8949
- fix(admin): respect urlPrefix for root redirect and JS API calls by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8975
-
Filer Sync, Backup
- filer.sync: show active chunk transfers when sync progress stalls by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8889
- fix(filer.backup): local sink readonly permission by @kisow in https://github.com/seaweedfs/seaweedfs/pull/8907
- fix(azuresink): delete freshly created blob on write failure by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8934
- fix(gcssink): prevent empty object finalization on write failure by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8933
- fix: replication sinks upload ciphertext for SSE-encrypted objects by @Mmx233 in https://github.com/seaweedfs/seaweedfs/pull/8931
- fix(sync): use per-cluster TLS for HTTP volume connections in filer.sync by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8974
-
Filer
- fix(filer): remove cancellation guard from RollbackTransaction and clean up #8909 by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8916
- fix(kafka): resolve consumer group resumption timeout in e2e tests by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8935
- fix(weed/filer/redis2): fix dropped error by @alrs in https://github.com/seaweedfs/seaweedfs/pull/8952
- fix(weed/filer/redis): dropped error by @alrs in https://github.com/seaweedfs/seaweedfs/pull/8895
- filer: bootstrap pre-existing metadata when a new filer joins by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8979
-
Master
- fix(master): fast resume state and default resumeState to true by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8925
-
Shell
- volume.tier.move: fulfill target replication before deleting old replicas by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8950
- shell: add s3.accesskey., s3.anonymous., s3.serviceaccount.* commands by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8955
- shell: add s3.user.* and s3.policy.attach|detach commands by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8954
- shell: add s3.iam.*, s3.config.show, s3.user.provision; hide legacy commands by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8956
- shell: s3.* commands always output JSON, connection messages to stderr by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8976
-
Volume Server
- fix(ec): off-by-one in nLargeBlockRows causes EC read corruption by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8957
- test: add integration tests for volume and EC scrubbing by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8977
- fix(test): remove flaky shard ID assertion in EC scrub test by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8978
- fix(ec): generate .ecx before EC shards to prevent data inconsistency by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8972
-
Misc
- Add manual trigger to Rust volume server release build workflow by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8873
- fix(volume-rust): fix volume balance between Go and Rust servers by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8915
- fix(stats): fix build on openbsd, solaris, and windows by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/8951
New Contributors
- @os-pradipbabar made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/8909
Full Changelog: https://github.com/seaweedfs/seaweedfs/compare/4.18...4.19
- Resilient distributed locks via consistent hashing
- JSON structured logging
- Log rotation with gzip compression
Stability improvements addressing nil pointer crashes during concurrent vacuum compaction, dynamic timeout handling, S3 metrics persistence, and trust policy validation fixes for AWS principals.
- S3 Table Bucket Iceberg maintenance plugin worker
- OpenShift Helm Chart support with data replication
- IAM group management (CreateGroup, DeleteGroup, AddUserToGroup)
- Maintenance scripts auto-migrated to Admin Script plugin worker (requires migration for custom scripts)
- Plugin worker system supporting non-Go workers
- S3 IAM policy attachment/detachment APIs
- Managed policy storage implementation
- Iceberg multi-level namespace support with persistence
- IAM session policy support for STS
- UpdateAccessKey and access key status management
- volume.scrub and ec.scrub commands
- Iceberg REST Catalog server
- Linux ACL support for FUSE
- S3 Tables support for Iceberg tabular data
- Iceberg REST Catalog server
- IAM policy management via gRPC
- S3 policy variables for dynamic access control
- AssumeRole and AssumeRoleWithLDAPIdentity STS actions
- Persistent ClusterID for split-brain prevention
- s3api: fix authentication bypass and potential SIGSEGV (Issue #7912)
- Fix AWS SDK Signature V4 with STS credentials
- S3 storage class support in extended attributes
- Bucket metrics with logical and physical size
- Policy attachment for object store users
- Fix critical authentication bypass vulnerability (#7912)
- S3 volume encryption with -s3.encryptVolumeData flag
- Service account support for IAM
- Admin UI service account management