4.41

PaddlePaddle/PaddleSpeech4.41Aug 6, 2026by chrislusf

AI Summary

This release features major S3 and IAM enhancements, Azure authentication updates, and performance fixes for the Filer metadata log.

Key Highlights

  • S3 supports large chunk lists folded into manifest chunks.
  • Azure storage now authenticates with Entra ID instead of storage keys.
  • IAM policies support document-style configuration.
  • Filer metadata log flush is now bounded to prevent wedging.
  • Iceberg tables can now be queried with custom bucket selection.

New Features

  • S3 manifest chunk support
  • Azure Entra ID authentication
  • Document-style IAM policies
  • Bounded Filer metadata log flush
  • Iceberg bucket selection

Full Release Notes

## What's Changed

- S3

  - S3: fold large chunk lists into manifest chunks on the direct write path by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10383
  - S3: track manifest blob ownership through multipart completion by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10386
  - s3: stop listing prefixes whose objects are all delete-marked by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10419
  - s3: chunk uploads at the filer's maxMB by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10439
  - s3: require a bucket-policy action to write a bucket policy by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10444
  - s3: apply filer identity changes despite a static config file by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10392
  - s3: register the advertised ip with the master by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10482
  - s3: keep the list marker exclusive for versioned objects by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10496
  - s3: allow copying an object onto itself in a versioned bucket by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10497
  - s3: report a peer that went away as ClientDisconnected, not IncompleteBody by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10511
  - s3: carry storage class in the cached listing metadata by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10516
  - s3: register an identity's inline account instead of collapsing it into admin by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10548
  - s3: honor a bucket owner recorded as an identity by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10567
  - s3: honor the version history of a directory marker by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10571
  - s3: stop treating a directory marker as a versioned object by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10573
  - s3 lifecycle: bound the daily-replay pass so a quiet cluster stops wedging the job by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10578
  - s3: let a suspended-versioning multipart completion replace the null delete marker by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10585
  - s3: retire the suspended null marker only once the PUT has committed by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10589
  - s3: report the effective ownership when a bucket has none stored by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10591
  - s3: give a versioned metadata-only copy its own chunks by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10594
  - \[s3\] force filer apply s3 expiry metadata by @kmlebedev in https://github.com/seaweedfs/seaweedfs/pull/10469
  - chore(weed/s3api): prune dead code by @alrs in https://github.com/seaweedfs/seaweedfs/pull/10462

- IAM and STS

  - s3api: load document-style policies from the advanced IAM config by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10481
  - s3: list the buckets an attached IAM policy grants by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10458
  - s3: keep an admin's role session scoped to the role by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10520
  - s3: audit the assumed-role principal and the STS caller by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10519
  - iam: authorize IAM management actions as IAM actions by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10593

- Iceberg

  - iceberg maintenance: resolve table files from the recorded location by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10418
  - iceberg maintenance: record file counters on the snapshots it commits by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10420
  - s3api/iceberg: report the reason a table schema was rejected by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10473
  - iceberg: read manifest lists that omit the Avro format version by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10475
  - iceberg: let clients select their table bucket as the catalog warehouse by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10549
  - iceberg: withhold the S3 endpoint from credential-vending clients by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10570

- Filer

  - filer: conditional UpdateEntry with a chunk-set write condition by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10382
  - filer: stop an oversized metadata log flush from wedging the change feed by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10430
  - log_buffer: bound the flush queue in bytes, not in copies by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10433
  - filer: reject a proxyChunkId that isn't a well-formed fid by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10436
  - filer: fix credential handling on the proxyChunkId path by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10434
  - filer: drop a caller's jwt query param on a proxied read by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10440
  - filer: add a placement overlay seam for the write path by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10437
  - filer: let a nested path rule turn worm off by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10503
  - fix(filer): stop skipping recent unflushed events on metadata subscription gaps by @kisow in https://github.com/seaweedfs/seaweedfs/pull/10501
  - fix(redis2/redis3): support separate sentinel auth credentials by @TJDawson10 in https://github.com/seaweedfs/seaweedfs/pull/10412
  - filer: honor the documented TLS options in every redis store by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10425
  - filer: make the redis connection settings configurable by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10441
  - Bump Tarantool client library from 2.4.2 to 3.0.0 by @MaratKarimov in https://github.com/seaweedfs/seaweedfs/pull/10377

- Filer sync and replicate

  - filer sync: do not advance the sync offset past a failed event by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10424
  - filer.replicate: acknowledge notifications after the sink write, not on receipt by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10427

- Remote storage

  - azure: authenticate with Entra ID instead of a storage account key by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10456
  - azure: let the blob endpoint be configured by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10460
  - remote storage: actually delete objects when a directory is removed by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10531
  - s3 remote: honor s3.support_tagging in UpdateFileMetadata by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10532

- Volume

  - volume: reject needle blob writes to read-only volumes by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10435
  - volume: widen the gRPC admin gate and stop it drifting by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10443
  - volume: recover .idx rows overwritten by tiered deletes by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10474
  - fix(volume): persist the leveldb needle map watermark at batch boundaries by @SuperMohit in https://github.com/seaweedfs/seaweedfs/pull/10557
  - volume: skip directory fsync on Windows, report a failed makeupDiff by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10572
  - rust volume: mark-readonly notifies the live leader, not the static seed by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10461

- Erasure coding

  - EC decode: read shards with the encode-time block layout by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10385
  - volume: fix EC decode/reconstruct index locality under -dir.idx by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10442
  - volume: EC decode onto a clean peer via staged-new-volume adopt (Go+Rust) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10463
  - volume: skip a shard-holding disk when staging a decoded volume (Go+Rust) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10464
  - volume: scan for on-disk EC shards when staging a decoded volume (Go+Rust) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10465
  - ec.encode: count shards wherever they landed before deleting the source by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10483
  - ec.encode: name the shard ids an aborted deletion found by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10486
  - EC scrubbing: list shards for needles failing scrubs in the result output by @plisandro in https://github.com/seaweedfs/seaweedfs/pull/10510

- Master

  - master: count EC volumes in statistics used size by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10457
  - master: count only writable volumes as crowded when deciding growth by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10522
  - fix(master): bump seaweedfs/raft to v1.2.0 for the snapshot race by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10498

- Shell and placement

  - volume.fix.replication: add a well-placed replica before deleting a misplaced one by @CodeRusher in https://github.com/seaweedfs/seaweedfs/pull/10364
  - exclusive_locks: clear renew-running flag before dropping isLocked by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10413
  - shell: accept a context in the volume move helpers by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10415
  - Fix volume.merge corrupting every needle it copies by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10565
  - shell: add a reusable target picker for volume moves by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10579
  - placement: move the target picker out of the shell package by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10580
  - placement: let callers reject candidates placement cannot judge by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10581
  - shell: pick tier.move replica targets with the shared placement picker by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10582

- Mount

  - mount: version open file handles by filer log position by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10403
  - mount: report data sizes to df with -df.logical by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10459
  - mount: keep a sealed chunk alive until its own upload finishes by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10504
  - mount: drop the unused go-fuse fs package dependency by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10534
  - mount: keep the xattr flag constants off freebsd by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10552
  - mount: build the package on windows by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10535
  - mount: support mounting on Windows through WinFsp by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10536
  - mount: forward extended attributes on windows by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10554
  - mount: tell windows about changes made elsewhere by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10553
  - mount: report . and .. from windows directories by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10556
  - mount: mark windows files archived and ignore a zero timestamp by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10559

- WebDAV

  - webdav: answer PROPFIND child stats from the listing by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10492

- Client

  - wdclient: read the vid map cache link before the live map by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10505
  - wdclient: age vid map entries by generation instead of chaining snapshots by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10506
  - operation: re-assign chunk upload when replica volume is full by @timolow in https://github.com/seaweedfs/seaweedfs/pull/10588
  - consolidate the duplicated transient-error classifiers onto util.IsTransientError by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10429
  - chore(weed/worker): prune unused Registry by @alrs in https://github.com/seaweedfs/seaweedfs/pull/10431

- Admin

  - fix(admin): implement ApplyPluginConfigFromToml to propagate settings by @baracudaz in https://github.com/seaweedfs/seaweedfs/pull/10388

- Helm

  - helm: support fixed nodePort numbers on all-in-one, s3, sftp, and admin services by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10381
  - helm: generate the SFTP host key per install by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10390
  - Do not fail immediately when running the post bucket hook by @kallies in https://github.com/seaweedfs/seaweedfs/pull/10471
  - helm: label the hook Job pods so selectors can reach them by @kreativmonkey in https://github.com/seaweedfs/seaweedfs/pull/10478
  - helm: optional NetworkPolicy per component by @kreativmonkey in https://github.com/seaweedfs/seaweedfs/pull/10479
  - helm: pass extraEnvironmentVars and security.toml to the bucket-creation hook by @kreativmonkey in https://github.com/seaweedfs/seaweedfs/pull/10477

- Telemetry

  - telemetry: tidy server module after prometheus bumps by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10380
  - telemetry: fix empty over-time charts on the built-in dashboard by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10396
  - telemetry: key per-cluster value gauges by cluster_id only by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10397
  - ci: fix Deploy Telemetry Server build (nested telemetry/server module) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10398
  - telemetry: persist server state across restarts by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10399
  - telemetry: per-cluster usage history on the built-in dashboard by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10400
  - telemetry: validate reports on the collect endpoint by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10401
  - telemetry: confirmed-cluster stats (2+ distinct days) by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10402
  - telemetry: per-cluster size over time on the dashboard by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10417
  - telemetry: fix total disk usage over time by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10476
  - telemetry: report anonymous cluster stats by default by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10488
  - telemetry: build the over-time charts from confirmed clusters by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10489
  - telemetry: stack volume servers per cluster, drop the total disk usage chart by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10550
  - telemetry: sync the server module with the client_golang bump by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10551

- Tests

  - test(s3): aim collection force-delete at the master the suite actually runs by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10404
  - plugin: fix flaky scheduler lock test by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10432
  - test: stop comparing two JWTs minted a second apart by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10495
  - test: pin that a .vif replication outranks the superblock by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10499
  - test: cover delete idempotency on versioned object-locked buckets by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10512
  - test: pin that an unusable version id is refused, never resolved by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10513
  - test: pin verb parity on lock-arbitration keys through acquire and release by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10514
  - test: compare ListObjects and ListObjectVersions over the same namespace by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10515
  - test: cover listings spanning a run of retracted keys by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10517
  - s3: cover three untested STS paths by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10521
  - test: random needles always carry at least one byte by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10523
  - test: wait for async write-budget release after pipeline shutdown by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10530
  - test: wait for every queued flush before deleting the log files by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10546
  - Stop the filer test helpers from pinning gigabytes of log buffers by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10560
  - test: cover delete-on-close on the windows mount by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10561
  - test(s3): give the copying suite room for a collection per bucket by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10590

- CI

  - Add codespell support with configuration and typo fixes by @yarikoptic in https://github.com/seaweedfs/seaweedfs/pull/10393
  - ci: read branch names from env instead of interpolating them into the shell by @kobihikri in https://github.com/seaweedfs/seaweedfs/pull/10470
  - ci: fix FUSE mounts against the new runner image by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10484
  - ci: harden the fusermount3 repair by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10485
  - ci: run WinFsp's conformance suite against the windows mount by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10555
  - ci: run each conformance test on its own by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10564
  - ci: key the Rust cargo cache on the toolchain that built it by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10568
  - ci: cross-compile each target in its own job by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10575
  - ci: deal volume server tests across shards instead of bucketing by letter by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10576
## New Contributors
* @yarikoptic made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/10393
* @TJDawson10 made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/10412
* @kobihikri made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/10470
* @kreativmonkey made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/10478
* @SuperMohit made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/10557
* @timolow made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/10588

**Full Changelog**: https://github.com/seaweedfs/seaweedfs/compare/4.40...4.41