4.38
LadybirdBrowser/ladybird4.38Jul 6, 2026by chrislusf
AI Summary
A maintenance release focused on implementing Erasure Coding (EC) and Scrub capabilities in the Rust volume server, alongside significant enhancements to the S3 API, Filer, and Admin UI.
Key Highlights
- Implementation of Erasure Coding (EC) scrubbing and bitrot checking
- S3 API improvements including bucket quotas, lazy bounded caches, and FULL_OBJECT checksumming
- Filer and Admin UI enhancements like Iceberg table support and CSV export
- Kubernetes/Helm chart updates for gRPC ingress and TLS passthrough
- Remote storage sync improvements and SQL store defaults
New Features
- EC scrubbing (FULL, LOCAL, bitrot)
- S3 API: Lazy bounded per-bucket caches
- S3 API: FULL_OBJECT checksumming for CRC
- Shell command: ec.shard.unmount
- Filer: SQL store defaults for postgres2/mysql2
- Admin UI: Iceberg table data browsing
Full Release Notes
## 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