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