What seaweedfs/seaweedfs shipped
Written by FoxPlug from the repository's own releases; not affiliated with Seaweedfs. Paste your own repository in the box below and FoxPlug writes the same weekly update for your product. This page is an automatic summary of the releases, pull requests and commits in github.com/seaweedfs/seaweedfs; Seaweedfs did not write it and does not use or endorse FoxPlug. Every line links to the change it describes.
Get a weekly update like this for your product, free
Week of November 2, 2026
What shipped
- Version 4.53 was released, bundling the S3 tables and vectors authorization fix, filer rename into prefix-sharing siblings, and JSON compression by file type. Release
- Volume encryption now follows the filer's -encryptVolumeData switch across weed s3, weed-vector, weed-worker and weed-vector-cli. Pull request #12487
- Weed-vector, weed-worker and weed-vector-cli now write Lance table files directly to filers and volume servers instead of going through the S3 port. Pull request #12470
- A single master resumed from existing raft state no longer checks quorum every 1 ms after electing itself. Pull request #12463
- Volume servers stop serving EC reads from quarantined shards and report the quarantine to the master sooner, in both Go and Rust. Pull request #12450
- On versioned buckets, a versioned PUT's id is now minted at commit after the lock wait and upload, so a concurrent DELETE can no longer get a newer id. Pull request #12454
- With writeback cache, chunk uploads now keep retrying through a volume outage longer than the upload's own retry window. Pull request #12465
- S3 no longer reports a version delete as done when the filer lookup failed for a reason other than a miss. Pull request #12482
- Collection.list now prints collection names from the master with volumeCount:UNKNOWN when live topology statistics are unavailable. Pull request #12490
- The per-rack cap on global EC moves became a worker setting instead of a hard-coded value. Pull request #12478
Why it matters
This week the S3 Vectors path moved fully off the gateway for table file writes, and a new release shipped that earlier work alongside the authorization and compression fixes. Encryption configuration was consolidated so one filer switch governs volume data encryption for every writer. Several correctness fixes target versioned deletes, EC shard quarantine and writeback retries, which matter to clusters running under failure.
Changelog entry
- Release: 4.53 Release
- Volume encryption follows the filer's -encryptVolumeData switch in weed s3, weed-vector, weed-worker and weed-vector-cli Pull request #12487
- S3 Vectors: weed-vector, weed-worker and the CLI write table files to filers and volume servers instead of the S3 gateway Pull request #12470
- Master: resumed single-master leader no longer checks quorum every 1 ms Pull request #12463
- Volume: stop serving EC reads from quarantined shards in Go and Rust volume servers Pull request #12450
- S3api: versioned PUT mints its id at commit, after the lock wait and upload Pull request #12454
- Mount: writeback chunk uploads keep retrying through a volume outage Pull request #12465
- S3: a version delete is no longer reported as done when the filer lookup failed Pull request #12482
- Shell: collection.list includes collection names when topology statistics are unavailable Pull request #12490
- Ec_balance: per-rack cap on global moves is now a worker setting Pull request #12478
- S3 Vectors: the gateway resolves the table it sends to weed-vector Pull request #12468
- Filer: fold small chunks into manifests 256 at a time Pull request #12462
SeaweedFS 4.53 is out. Volume encryption now follows the filer's single switch across s3, vector, worker and CLI. S3 Vectors writes tables straight to filers and volume servers. Versioned deletes, EC quarantine and writeback retries got fixes.
SeaweedFS 4.53 is released. In this week's changes: volume encryption now follows the filer's -encryptVolumeData switch across weed s3, weed-vector, weed-worker and weed-vector-cli, so one setting governs it everywhere. S3 Vectors gained help text fixes and now writes Lance table files directly to filers and volume servers rather than through the S3 port. Correctness work landed for versioned S3 deletes, including minting a PUT's version id at commit and not treating filer errors as successful deletes. Quarantined EC shards no longer serve reads, and writeback chunk uploads keep retrying through longer volume outages. Single-master restarts also stop polling quorum every millisecond.
Week of October 26, 2026
What shipped
- Dependency bump for seaweedfs/raft to v1.2.3 adds PreVote so a master returning from a partition no longer deposes the healthy leader. Pull request #12264
- GRPC TLS now fails closed on configuration errors and verifies the identity of the server dialed. Pull request #12263
- The S3 gateway drops retired volume servers from its location cache instead of waiting for a failed read. Pull request #12281
- The vector engine caches reads of write-once Lance files across requests to raise QueryVectors throughput. Pull request #12303
- A ranged GET on the Go volume server now serves ranges without reading the whole needle when it is 1MB or smaller. Pull request #12301
- Filer.backup and filer.sync with an S3 sink now forward X-Amz-Meta-* user metadata to the destination object. Pull request #12286
- DeleteNamespace keeps data under a namespace that still holds the data of a renamed table. Pull request #12276
- POST Object uploads to a missing bucket now auto-create the bucket like PutObject does. Pull request #12266
- The Helm chart gains commonLabels applied to the metadata of every object. Pull request #12257
- Filer.backup gains -s3.flattenVersions to mirror the current S3 view of versioned buckets. Pull request #12255
Why it matters
This week mixed cluster resilience fixes with S3 and backup correctness work. Master and volume servers recover faster from partitions and leader changes, and gRPC TLS now fails closed. Vector queries and range reads got faster, while S3 uploads, metadata copying and namespace handling behave more like AWS.
Changelog entry
- Deps: bump seaweedfs/raft to v1.2.3 for PreVote, so a master returning from a partition no longer deposes the leader. Pull request #12264
- Security: gRPC TLS fails closed on errors and verifies the identity of the server dialed. Pull request #12263
- S3: drop retired volume servers from the gateway location cache. Pull request #12281
- Vector: cache reads of write-once Lance files across requests. Pull request #12303
- Volume: serve a ranged GET without reading the whole needle when it is 1MB or smaller on the Go volume server. Pull request #12301
- S3 sink: forward user metadata to the destination object in filer.backup and filer.sync. Pull request #12286
- S3tables: keep the data under a namespace that still holds data referenced by a renamed table. Pull request #12276
- S3: auto-create a missing bucket on POST Object uploads. Pull request #12266
- S3: let bucket-scoped Admin grants auto-create matching buckets. Pull request #12268
- Helm: add commonLabels to the metadata of every object. Pull request #12257
- Helm: add namespaceOverride to deploy into another namespace. Pull request #12256
- Filer.backup: add -s3.flattenVersions to mirror the current S3 view of versioned buckets. Pull request #12255
This week: raft PreVote keeps a returning master from deposing the leader, gRPC TLS fails closed, S3 bucket-scoped Admin grants auto-create buckets, filer.backup forwards user metadata and gains -s3.flattenVersions, and vector queries cache Lance reads.
Changes this week in SeaweedFS: - raft bumped to v1.2.3 with PreVote: a master returning from a partition no longer deposes the healthy leader. - gRPC TLS fails closed on misconfiguration and verifies the dialed server identity. - S3 gateway drops retired volume servers from its location cache. - Vector engine caches write-once Lance file reads across requests. - Ranged GET on the Go volume server avoids reading whole needles of 1MB or less. - filer.backup forwards user metadata and gains -s3.flattenVersions. - POST Object uploads auto-create missing buckets; bucket-scoped Admin grants can auto-create matching buckets. - Helm chart adds commonLabels and namespaceOverride.
Week of October 19, 2026
What shipped
- Release 4.51 stops S3 GET and HEAD responses from echoing stored tags and internal attributes, keeps read-only admin sessions out of the filer /etc tree, and scopes the anonymous identity's grant on the table catalogs. Release
- S3 GET and HEAD requests that land on a delete marker now return the delete marker headers and status instead of a bare 404 NoSuchKey. Pull request #12051
- The master shortens the first-write hold after a fresh topology id, addressing a 4.50 regression where the first write on a new weed server blocked for about 15 seconds. Pull request #12059
- Commands bound to a specific -ip.bind address no longer open an extra localhost listener on every port. Pull request #12055
- S3 policy wildcard matching now handles a * in the target string at the pattern's * offset, restoring correct matches. Pull request #12034
- S3 POST policy uploads now authorize through the shared object check, fixing 403 AccessDenied when the signing user's write grant comes only from an attached IAM policy. Pull request #12047
- ListObjectsV2 continuation tokens now round-trip keys containing characters XML 1.0 cannot carry. Pull request #11996
- S3 accepts a self-copy that changes only the storage class. Pull request #12031
- Bucket tag sets now accept up to 50 tags, while objects keep the limit of 10. Pull request #12030
- Filer listing fixes prefixed ListObjectVersions continuation when the resume point sorts below the prefix, so remaining versions are no longer dropped. Pull request #12049
Why it matters
This week's release carries fixes across S3 compatibility, admin access and master startup, alongside a shorter first-write hold after a fresh topology id. S3 users get correct delete marker responses, working POST policy uploads for IAM-granted writers, round-trippable continuation tokens for keys with unusual characters, and larger bucket tag sets. Operators also get no stray localhost listeners when binding to a specific address and read-only admin sessions kept away from the filer credential store.
Changelog entry
- Release 4.51 with S3 tag and attribute response fixes, read-only admin isolation from the filer /etc tree, and scoped anonymous grants on table catalogs. Release
- S3: GET and HEAD of a delete marker now return the delete marker headers and status as S3 does. Pull request #12051
- Master: shorten the first-write hold after a fresh topology id, fixing a 4.50 regression on fresh servers. Pull request #12059
- Command: no extra localhost listener when -ip.bind is specified. Pull request #12055
- S3: fix wildcard matcher skipping * targets in policy patterns. Pull request #12034
- S3: authorize POST policy uploads through the shared object check. Pull request #12047
- S3: ListObjectsV2 continuation tokens round-trip XML-unsafe keys. Pull request #11996
- S3: accept a self-copy that changes the storage class. Pull request #12031
- S3: allow up to 50 tags in a bucket tag set. Pull request #12030
- Filer: fix prefixed listing when the resume point sorts below the prefix. Pull request #12049
- Volume: send EC shards in parallel per destination disk during distribute. Pull request #12050
- Helm: remove filer.redirectOnRead, which weed filer does not accept. Pull request #12040
SeaweedFS 4.51 is out: S3 GET and HEAD no longer echo stored tags and internal attributes, read-only admin sessions stay out of the filer /etc tree, and anonymous grants on table catalogs are scoped. Also this week: delete marker responses, a shorter first-write hold, and no extr
SeaweedFS 4.51 is out. S3 GET and HEAD responses no longer echo stored tags or internal attributes, read-only admin sessions are kept out of the filer /etc tree, and the anonymous identity's grant on the table catalogs is now scoped. Other changes this week: GET and HEAD of a delete marker answer as S3 does instead of a bare 404; the first write after a fresh topology id no longer waits out the warmup window; commands bound to a specific -ip.bind address no longer open an extra localhost listener; S3 POST policy uploads authorize through the shared object check; ListObjectsV2 continuation tokens round-trip keys XML cannot carry; and bucket tag sets accept up to 50 tags.
Week of October 12, 2026
What shipped
- The filer now treats a PUT or POST with extract=zip or the X-Seaweedfs-Extract header as a zip archive and writes each member as its own file. Pull request #11782
- S3 PutObject accepts x-amz-meta-snowball-auto-extract or x-seaweedfs-extract zip and fans the archive out to one object per member instead of storing the archive. Pull request #11786
- The daily lifecycle pass now shares one bucket walk across shards instead of listing the whole bucket tree once per shard. Pull request #11797
- Lifecycle replay now advances past rules longer than the meta-log retention window so the daily cursor no longer stalls on buckets with mixed rule lengths. Pull request #11789
- S3 ListObjects now returns the children of a directory named by a StartAfter marker instead of skipping that subtree. Pull request #11805
- Bucket delete now counts stored object versions as contents, so a bucket holding only versions is no longer reported empty. Pull request #11775
- The filer now honors a storage rule rack or data-center constraint instead of falling back to the location-stripped request. Pull request #11804
- Vacuum commits are now bounded per volume server so concurrent commits no longer stall reads on the same volumes. Pull request #11658
- SFTP rename now requires delete permission on an existing target file, matching what Remove already enforces. Pull request #11770
- The admin Create Bucket button now sends a single request, so creating a bucket no longer shows an error after it succeeded. Pull request #11790
Why it matters
This week tightens correctness on several paths people hit in daily use: zip archives can be expanded into objects on upload through both the filer and S3, lifecycle runs do far less listing work, and S3 listing, bucket delete and versioning behave closer to expectations. It also fixes access-control and admin gaps, from policy conditions on tag and copy operations to the bucket creation button reporting a false error.
Changelog entry
- Filer: extract zip members on?extract=zip upload Pull request #11782
- S3: extract zip members on PutObject Pull request #11786
- S3 lifecycle: share daily bucket walk across shards and prune listings Pull request #11797
- S3 lifecycle: replay only rules that fit the retention window Pull request #11789
- S3: list children of the directory a ListObjects marker names Pull request #11805
- S3: count stored versions as bucket contents on delete Pull request #11775
- Filer: honor a storage rule's rack/data-center constraint instead of falling back Pull request #11804
- Vacuum: bound concurrent commits per volume server Pull request #11658
- Sftp: enforce file ACLs on rename targets Pull request #11770
- Admin: fix Create Bucket sending POST /api/s3/buckets twice Pull request #11790
- Filer: make a retried ObjectTransaction replay its recorded outcome Pull request #11788
- S3: apply destination retention on copies instead of inheriting it Pull request #11773
This week: PUT with extract=zip expands archives into files on the filer and S3, the daily lifecycle pass shares one bucket walk across shards, S3 listing returns children of a StartAfter directory, and bucket delete counts stored versions.
Shipped this week in SeaweedFS: zip archives can now be expanded on upload, both through the filer (extract=zip or X-Seaweedfs-Extract) and through S3 PutObject, with each member written as its own file. The daily lifecycle pass now shares a single bucket walk across shards instead of listing the tree once per shard, and replay no longer stalls when a bucket has rules longer than the retention window. S3 listing now returns the children of a directory named by a StartAfter marker, bucket delete counts stored versions as contents, and storage rules with a rack or data-center constraint are honored rather than falling back. Vacuum commits are bounded per volume server, SFTP rename enforces delete permission on an existing target, and the admin Create Bucket button sends one request instead o
Week of October 5, 2026
What shipped
- Small concurrent S3 GETs no longer stall behind a single filer cache mutex, restoring throughput lost in the previous release. Pull request #11677
- Remote-mounted objects keep a stable ETag across cache fills, so ranged downloads stop failing with a precondition error. Pull request #11704
- Mounts given several filers now fail writes over to the next reachable filer instead of blocking on a stalled one. Pull request #11696
- A filer is announced to the master only once its gRPC port is serving, and is removed before that port stops, so rolling restarts stop routing traffic to a refusing filer. Pull request #11700
- A filer write now fails when the existing-entry lookup fails, instead of overwriting an entry without its old chunks. Pull request #11699
- Filer remote sync no longer drops a rewrite that lands in the same second as the previous upload's recorded remote time. Pull request #11715
- ListObjects accepts max-keys up to the full integer range and caps each page at 1000 keys. Pull request #11702
- An object deleted from remote storage outside the filer now answers NoSuchKey instead of a server error, and its stale entry is dropped. Pull request #11680
- Removing an identity from the config file and reloading now revokes its access keys instead of leaving them valid until restart. Pull request #11679
- The goexif dependency is pinned at its newest real tag so isolated builds stop resolving to stale untagged code. Pull request #11648
Why it matters
This week's changes target several ways a running cluster could quietly misbehave: dropped remote syncs, writes that hang or overwrite, ETags that shift mid-download, and identities that stay valid after removal from the config. Security fixes are present across SSE-KMS with Azure Key Vault, volume data encryption on copy, and S3 and IAM error responses. Operators also get faster small reads, safer filer restarts, and a stricter encode placement option.
Changelog entry
- Filer: reduce ReaderCache mutex contention on small reads Pull request #11677
- S3api: keep remote object ETags stable across cache fills Pull request #11704
- Mount: fail writes over to the next filer instead of hanging on a dead one Pull request #11696
- Filer: announce to master only once gRPC serves, leave before it stops Pull request #11700
- Filer: fail writes when the existing-entry lookup fails Pull request #11699
- Filer.remote.sync: upload a rewrite that lands in the remote mtime's second Pull request #11715
- S3api: accept max-keys up to 2147483647 and cap list pages at 1000 Pull request #11702
- S3api: return NoSuchKey and drop stale entries when a remote-mounted object is gone Pull request #11680
- S3api: revoke identities a config reload no longer declares Pull request #11679
- Kms/azure: fix encrypt and decrypt round trip for Azure Key Vault Pull request #11692
- S3api: apply bucket default encryption when volume data encryption is enabled Pull request #11681
- Deps: pin goexif at v1.0.3 and stop dependabot re-bumping it Pull request #11648
This week: filer cache contention fixed for small S3 reads, stable ETags across remote cache fills, mount failover to the next filer, synced-second rewrites no longer dropped, identity revocation on config reload, and Azure Key Vault SSE-KMS round trips fixed.
Changes this week in SeaweedFS: - Small concurrent S3 GETs no longer serialize on the filer reader cache mutex. - Remote-mounted objects keep a stable ETag across cache fills, so ranged downloads stop failing. - Mounts with several filers fail writes over to the next reachable one instead of hanging. - A filer announces to the master only once its gRPC port serves, and leaves before it stops. - Filer writes fail when the existing-entry lookup fails rather than replacing an entry without its chunks. - Filer remote sync no longer drops rewrites landing in the same second as the previous upload. - Removing an identity from the config and reloading now revokes its access keys. - Azure Key Vault SSE-KMS encrypt and decrypt round trips work, and volume data encryption is applied on copy.
Week of September 28, 2026
What shipped
- Helm chart now mounts TLS certificates in the bucket creation hook when security is enabled, fixing authentication failures with mTLS filers. Pull request #11589
- S3 API fixed four authorization bugs in PutObjectAcl that caused incorrect permission scoping and owner grant handling. Pull request #11587
- S3 ranged GETs now avoid downloading entire chunks for small reads, reducing disk load by up to 7x on workloads with many range requests. Pull request #11577
- Filer sync now resubscribes the metadata stream when target-side failures occur, preventing events from being permanently lost. Pull request #11581
- Metadata subscriber resumes from the processed watermark on reconnect instead of replaying all events, reducing recovery overhead. Pull request #11574
- Vacuum RPCs now use phase deadlines instead of context.Background(), preventing hung volume servers from blocking the vacuum sweep. Pull request #11579
- Filer now persists pending chunk deletions to disk, preventing orphaned chunks if the filer crashes during the deletion queue. Pull request #11550
- Filer IAM service now manages OIDC providers and roles via gRPC, enabling centralized identity configuration across S3 servers. Pull request #11523
- S3 server now tracks filer topology changes pushed by the master, eliminating the 5-minute discovery lag during filer rolling restarts. Pull request #11563
- Filer can now store system metadata logs in their own collection instead of the default collection, reducing noise in multi-filer deployments. Pull request #11551
Why it matters
This week addresses reliability issues in sync, deletion, and recovery paths; fixes authorization and S3 compatibility bugs; and improves performance for ranged reads. The changes reduce data loss risk, improve topology awareness, and eliminate unnecessary disk reads under realistic workloads.
Changelog entry
- Helm: mount TLS certificates in bucket hook when security is enabled Pull request #11589
- S3 API: fix PutObjectAcl permission scoping and owner grants Pull request #11587
- S3: avoid downloading full chunks for small ranged GETs Pull request #11577
- Filer sync: resubscribe metadata stream on target-side failures Pull request #11581
- Filer: resume metadata subscriber from processed watermark on reconnect Pull request #11574
- Vacuum: bound master RPCs with phase deadlines Pull request #11579
- Filer: persist pending chunk deletions across restarts Pull request #11550
- IAM: manage OIDC providers and roles over filer gRPC service Pull request #11523
- S3: track filer joins and leaves pushed by master Pull request #11563
- Filer: option to store system metadata logs in their own collection Pull request #11551
- Filer: stop isSameChunks from reordering caller-owned chunk slices Pull request #11584
- S3 API: copy trailer checksum before reading next trailer line Pull request #11583
Seaweedfs merged 40 PRs this week: S3 ranged-read speedup (7x on some workloads), persistent deletion ledger to prevent orphaned chunks, metadata sync recovery improvements, and OIDC role management via gRPC.
Seaweedfs merged 40 improvements this week addressing reliability and performance. Notable: S3 ranged GETs now avoid full-chunk downloads (7x faster on range-heavy workloads); filer deletion queue persists to disk to prevent orphaned chunks on restart; metadata sync resubscribes correctly on target failures; S3 server tracks live filer topology; and the IAM service now manages OIDC providers and roles. These changes reduce data loss risk, improve query latency, and strengthen multi-filer deployments.
Week of September 21, 2026
What shipped
- S3 prefix parameter no longer incorrectly promoted into object keys for non-List actions, closing an authorization bypass where prefix-only permissions could be used to write outside the intended scope. Pull request #11494
- S3 list operations now keep pagination cursors within the requested prefix, preventing listings from leaking keys outside the authorized range. Pull request #11493
- S3 object-lock headers now require dedicated object-lock permissions instead of only PutObject permission, preventing write-only principals from pinning objects under compliance retention. Pull request #11492
- Volume server now reads needles off the store lock and only once, eliminating unnecessary full reads just to parse metadata and reducing lock contention. Pull request #11487
- ReadAllNeedles handler no longer holds the store lock while sending the entire volume's needles, fixing memory exhaustion on large volumes and preventing heartbeat stalls. Pull request #11481
- Vacuum sweep now reclaims empty volume slots, allowing stores near capacity to write to other collections instead of refusing all writes. Pull request #11477
- Volume server now rejects needles whose data fails CRC validation, preventing corrupt data from being delivered as complete responses. Pull request #11467
- Master lock ring no longer gets poisoned after leader change, fixing client rejections of the new leader's recovery broadcast. Pull request #11453
- Remote sync writes now stamped with IF_CHUNKS_EQUAL to prevent stale write-back operations from deleting live chunks. Pull request #11435
- HTTP REST API reference documentation restored with complete reference for filer, master, and volume server endpoints. Pull request #11454
Why it matters
This week's fixes address critical security gaps in S3 authorization, prevent data corruption and loss scenarios in volume operations, eliminate lock-holding patterns that cause availability issues at scale, and restore missing documentation. Multiple authorization bypasses, memory exhaustion bugs, and silent data delivery issues are now closed.
Changelog entry
- S3: prefix parameter no longer promoted into object key for non-List actions Pull request #11494
- S3: list pagination cursors now stay within requested prefix Pull request #11493
- S3: empty intermediate directories ignored when checking if bucket has user objects Pull request #11491
- S3: object-lock headers now require dedicated object-lock permissions Pull request #11492
- Volume server: GET/HEAD reads needles off store lock, only once Pull request #11487
- Volume server: reserve disk before replacing replica in VolumeCopy, check record counts Pull request #11483
- Volume server: ReadAllNeedles no longer holds store lock for entire RPC Pull request #11481
- Vacuum sweep now reclaims empty volume slots Pull request #11477
- Volume server: reject needles whose data fails CRC validation Pull request #11467
- REST API reference documentation restored with complete endpoint reference Pull request #11454
- Master lock ring no longer poisoned after leader change Pull request #11453
- Remote sync: stamp entries with IF_CHUNKS_EQUAL to prevent stale deletes Pull request #11435
Weekly fixes: S3 authorization gaps closed, volume locks held shorter, empty volumes now reclaimed, corrupt needles rejected, lock ring recovery fixed, and REST API docs restored.
This week in SeaweedFS: fixed S3 authorization bypasses where prefix parameters leaked between actions, shortened volume server lock holds to prevent heartbeat stalls and memory exhaustion, enabled vacuum to reclaim empty volume slots at capacity, rejected corrupt needle delivery, fixed master lock ring poisoning after failover, and restored the HTTP REST API reference documentation.
Week of September 14, 2026
What shipped
- Negative Size values from the wire now rejected, preventing store lock poisoning that could brick a node until restart. Pull request #11345
- EC BatchDelete cookie validation now uses
locate_datageometry to prevent bypass attacks and wrong-shard deletes. Pull request #11348 - EC encode now drops tombstoned needles and replays deletes in file order to prevent resurrection of deleted data. Pull request #11347
- ShardId validation at gRPC boundary now rejects values >= 32, preventing unlinks and mount/unmount aliasing. Pull request #11346
- Multipart upload completion and.uploads removal now atomic, with cleanup of orphaned uploads running metadata-only. Pull request #11375
- S3 orphaned chunk deletion now waits for confirmed entry absence instead of deleting on transport errors alone. Pull request #11384
- ScanVolumeFileFrom no longer loops forever on corrupt needle headers with zero or negative record length. Pull request #11398
- ReadNeedleBlob and WriteNeedleBlob now validate sizes to prevent negative values from killing the volume server. Pull request #11399
- FULL scrub now processes local deletion tombstones instead of skipping them. Pull request #11396
- Go 1.26.6 required and vulnerable dependencies bumped for security. Pull request #11374
Why it matters
This week fixes critical data integrity issues in erasure coding, volume storage, and S3 multipart uploads that could cause data corruption or node outages. Several P0-severity bugs in EC and negative-size handling are now closed. S3 gateway improvements prevent orphaned chunks and ensure atomic completion of multipart uploads.
Changelog entry
- Fix(volume): reject negative Size, recover poisoned store lock Pull request #11345
- Fix(ec): BatchDelete cookie fail-closed via
locate_datageometry Pull request #11348 - Fix(ec): encode drops tombstoned needles, last-wins replay Pull request #11347
- Fix(ec): validate ShardId at gRPC boundary, reject >=32 Pull request #11346
- S3: commit multipart upload and remove.uploads atomically Pull request #11375
- S3api: delete orphaned chunks only when entry confirmed absent Pull request #11384
- Fix(volume): stop ScanVolumeFileFrom at header it cannot advance past Pull request #11398
- Fix(volume): validate sizes in ReadNeedleBlob and WriteNeedleBlob Pull request #11399
- [Volume] Scrub local deletion tombstones during FULL scrub Pull request #11396
- Security: require go 1.26.6 and bump vulnerable deps Pull request #11374
- S3: multipart upload checksum inheritance and validation Pull request #11403
- S3: abort completed multipart uploads metadata-only Pull request #11385
- S3api: don't delete chunks when CreateEntry outcome ambiguous Pull request #11376
- Rust volume: one S3 tier registry instead of two kept in sync Pull request #11390
- Rust volume: share I/O-error tracker between Volume and EcVolume Pull request #11351
- Rust volume: keep EC shard-location map and refresh under one lock Pull request #11356
- Rust volume: typed errors for store compaction so gRPC answers NotFound Pull request #11355
- Server: add filer-specific disableHttp flag Pull request #11360
- S3: separate Object Lock configuration permission Pull request #11361
- S3: enforce dedicated Object Lock actions Pull request #11362
4.47.1 fixes: EC BatchDelete validation, negative Size rejection preventing node brick, tombstone scrubbing, corrupt needle loops, multipart upload atomicity, and orphaned chunk safety.
Seaweedfs 4.47.1 addresses critical data integrity issues: EC BatchDelete now validates cookies preventing bypass attacks, negative Size values are rejected before poisoning store locks, corrupt needle headers no longer cause infinite loops, and S3 multipart uploads complete atomically. Erasure coding validation at gRPC boundaries prevents ShardId truncation attacks. S3 orphaned chunk deletion waits for entry confirmation. Volume scrubbing now processes tombstones correctly.