This release adds 3 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+10 more
Summary
AI summaryRust volume server parity, non-scrub fixes, and Go volume server updates improve scrubbing, EC handling, topology placement, S3 API stability, filer metadata management, and UI/tooling.
Full changelog
What's Changed
Erasure Coding & Scrub
The largest theme — Rust volume-server scrub parity plus EC correctness.
EC scrub
- #10130 Fix scrubbing of deleted needles on EC volumes
- #10144 EC LOCAL needle walk (split from FULL)
- #10147 suppress deleted-needle size mismatch in EC LOCAL scrub
- #10149 EC FULL scrub — distributed local+remote needle walk
- #10152 correct EC FULL scrub for deleted needles, shard-location cache, parity coverage
- #10154 EC bitrot CHECKSUM scrub on the Rust volume server
- #10172 reject oversized bitrot payload before narrowing to u32
- #10176 expose force_deleted_needles_check in ScrubEcVolume RPC and shell
Volume scrub (Rust parity)
- #10141 correct backwards FULL/LOCAL mode comments in Rust
- #10142 align Rust INDEX scrub to Go's idx.CheckIndexFile
- #10143 walk the on-disk .idx in Volume::scrub
- #10148 don't flag offset-0 logical tombstones
EC storage / read paths
- #10140 honor wide EC ratios in Rust read_ec_shard_config
- #10145 search sibling disk locations when rebuilding missing EC shards + .ecx
- #10187 read chunk-manifest chunks stored on EC volumes (Rust)
- #10217 detect truncated .ecx instead of treating it as clean EOF
Rust volume server (non-scrub)
- #10128 parse master lookup when publicUrl is omitted
- #10139 test coverage for type=replicate fan-out writes
- #10189 compare live compaction_revision instead of stale last_compact_revision
- #10233 pin rustls to aws-lc-rs so TLS gRPC startup doesn't panic
Topology, balancing & placement
- #10161 keep physical disk 0 distinct in SplitByPhysicalDisk
- #10166 report empty disks (per-disk type + capacity in heartbeat)
- #10162 volume.balance: gate on real physical disk usage
- #10167 skip physically near-full disks when placing EC shards
- #10169 share replica-placement logic between shell and worker
- #10171 worker: project the moved volume when gating on disk fullness
- #10174 extract the bytes-aware density metric to a shared package
Master
- #10202 let the growth initiator wait instead of shedding itself
- #10226 repair the lookup index after a vacuum that raced a disconnect
Volume server (Go)
- #10185 drop stale volume-location cache on under-replication
- #10229 bound intra-cluster HTTP so an unresponsive peer can't hang reads/writes
S3 API
- #10156 invalidate stale reader-cache locations on chunk read failure
- #10186 return IncompleteBody instead of 500 for truncated PUT bodies
- #10192 embedded IAM inline policy honors prefix-scoped resources
- #10207 surface transient store errors during multipart resume/copy
- #10213 lazy, bounded, entry-free per-bucket caches
- #10214 paginate ListBuckets and serve from a bucket owner index
- #10224 enforce bucket quota on logical size + read-only state in Admin UI
- #10225 answer directory-path probes like AWS (Flink savepoint restore)
- #10236 FULL_OBJECT checksumming for CRC
Filer
- #10158 use DROP TABLE IF EXISTS in SQL stores
- #10190 avoid ReaderCache WaitGroup reuse race between reads and destroy
- #10196 applyStorageDefaultsToEntry before CreateEntry
- #10203 stream offloaded metadata-log entries to fix concurrent-write OOM
- #10232 default filemeta CREATE TABLE for postgres2/mysql2 when unset
- #10234 default cassandra2 timeout and ydb prefix for env-var configs
Admin UI
- #10150 remove non-functional EC repair button
- #10155 restore cluster volume page CSV export
- #10170 respect filerGroup for cluster discovery
- #10175 fix 'send on closed channel' panic in worker gRPC server
- #10227 browse Iceberg table data
Shell commands
- #10126 avoid duplicate volume.list parent headers
- #10129 collection pattern to delete empty volumes
- #10159 honor explicit fs.mergeVolumes from/to direction
- #10204 add ec.shard.unmount command
- #10219 pass collection in ec.shard.unmount --delete request
Remote storage & sync
- #10151 remote/gcs: tolerate already-deleted object in DeleteFile
- #10184 remote.meta.sync: sync directories and remove remote-deleted files
- #10228 add -delete option to remote.copy.local
- #10177 filer.sync.verify: reclassify chunk-slice-order ETag diffs as CHUNK_REORDER
Kubernetes / Helm
- #10198 add certificates.dnsNames for custom SANs in cert-manager certs
- #10205 filer HTTP + gRPC ingress for the Helm chart
- #10223 Traefik IngressRouteTCP for gRPC with TLS passthrough
KMS
- #10173 cache decrypted data keys so cache_enabled/cache_ttl take effect
Core / networking / util
- #10164 centralize genUploadUrl in UploadOption
- #10212 don't let the activity timeout clobber externally-set conn deadlines
Tests & CI
- #10208 fuse-tests: don't declare mount ready before it is mounted
- #10215 fuse-tests: pass glog flags before the mount subcommand
- #10209 keep mini-allocated ports below the ephemeral floor
New Contributors
- @doma17 made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/10155
- @ycjlin made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/10228
- @cole-h made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/10236
Full Changelog: https://github.com/seaweedfs/seaweedfs/compare/4.37...4.38
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About seaweedfs
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.
Related context
Related tools
Earlier breaking changes
- v4.24 Version 4.23 is unsafe with multiple disks when using erasure coding (EC).
Beta — feedback welcome: [email protected]