4.45

AIPentest/CyberStrikeAI4.45Aug 31, 2026by chrislusf

AI Summary

This release integrates the Rust maintenance worker, enhances the admin UI with visual IAM and bucket policy editors, and improves S3 API resilience through retry logic and FUSE mount stability.

Key Highlights

  • Ship the Rust maintenance worker with the release
  • Add visual IAM policy editor in the admin UI
  • Add bucket policy management via the admin UI
  • S3 API retries for transient failures on metadata listings
  • Mount improvements including UNC support and kernel-resolved node IDs

New Features

  • Rust maintenance worker
  • Visual IAM policy editor
  • Admin bucket policy UI
  • Helm loadBalancer configuration options
  • S3 retry logic for multipart uploads and filer failures

Full Release Notes

## What's Changed
* helm: install chart CI against an image tag that exists by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10877
* Ship the Rust maintenance worker with the release by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10879
* Build the Rust worker against the protoc that ships with the build by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10881
* install.sh: install the Rust maintenance worker by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10882
* admin: add visual iam policy editor by @mat813 in https://github.com/seaweedfs/seaweedfs/pull/10878
* build(deps): bump github.com/moby/go-archive from 0.2.0 to 0.3.0 by @dependabot[bot] in https://github.com/seaweedfs/seaweedfs/pull/10826
* admin: count plugin-runtime workers in worker metrics by @junkerderprovinz in https://github.com/seaweedfs/seaweedfs/pull/10884
* s3api: retry a transient failure when listing multipart uploads/parts (RFC on layering) by @junkerderprovinz in https://github.com/seaweedfs/seaweedfs/pull/10886
* admin: stop the maintenance scanner pinning itself to one scan per second after a transient failure by @junkerderprovinz in https://github.com/seaweedfs/seaweedfs/pull/10887
* s3api: retry a transient filer failure on metadata listings by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10890
* test: wait for volume server registration in the FUSE DLM harness by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10891
* test: keep per-test log directories in the FUSE DLM harness by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10893
* test: wait for volume server registration in the FUSE p2p harness by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10897
* server: reject a Range start offset equal to the file size by @junkerderprovinz in https://github.com/seaweedfs/seaweedfs/pull/10898
* mount: use the kernel-resolved node id in Link, not the persisted attribute by @junkerderprovinz in https://github.com/seaweedfs/seaweedfs/pull/10885
* master: never re-seed a raft cluster over committed state under -raftBootstrap by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10883
* server: 416 only when no requested range overlaps, with Content-Range, and the Rust mirror by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10889
* telemetry: confirm a cluster after a week of reports, not two days by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10899
* s3api: no filer failover after the callback has consumed part of a response by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10902
* master: don't let a dead KeepConnected handler close its successor's channel by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10900
* s3: confine a Lance catalog table location to the caller's own bucket by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10901
* ec: refund the cleared leftover shards' slots in the encode source health check by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10903
* telemetry: let the dashboard pick the confirmation window by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10904
* s3: propagate storage rule fsync to volume server uploads by @sunchao6106 in https://github.com/seaweedfs/seaweedfs/pull/10906
* Manage bucket policies via the admin ui by @mat813 in https://github.com/seaweedfs/seaweedfs/pull/10895
* admin: honor a persisted or admin.toml maintenance enabled=false by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10909
* Fixes from the review of the admin bucket policy UI by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10907
* ec: read a needle's intervals in parallel by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10911
* mini: reserve the admin gRPC port instead of binding it late by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10928
* S3: let a key that is a prefix of other keys be an object by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10912
* Bump Tarantool client library from 3.0.0 to 3.0.1 by @MaratKarimov in https://github.com/seaweedfs/seaweedfs/pull/10925
* tarantool: fix upsert data corruption and missing context propagation by @MaratKarimov in https://github.com/seaweedfs/seaweedfs/pull/10926
* build(deps): bump github/codeql-action from 4.37.6 to 4.37.8 by @dependabot[bot] in https://github.com/seaweedfs/seaweedfs/pull/10923
* build(deps): bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in https://github.com/seaweedfs/seaweedfs/pull/10922
* build(deps): bump github.com/rabbitmq/amqp091-go from 1.13.0 to 1.14.0 by @dependabot[bot] in https://github.com/seaweedfs/seaweedfs/pull/10920
* build(deps): bump cloud.google.com/go/pubsub from 1.51.0 to 1.51.1 by @dependabot[bot] in https://github.com/seaweedfs/seaweedfs/pull/10919
* build(deps): bump github.com/shirou/gopsutil/v4 from 4.26.6 to 4.26.7 by @dependabot[bot] in https://github.com/seaweedfs/seaweedfs/pull/10918
* build(deps): bump github.com/seaweedfs/goexif from 1.0.3 to 2.0.0+incompatible by @dependabot[bot] in https://github.com/seaweedfs/seaweedfs/pull/10917
* S3: commit GET status only after the first read succeeds by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10930
* helm: expose loadBalancerClass, loadBalancerIP, loadBalancerSourceRanges on services by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10929
* S3: commit SSE GET status only after the first read succeeds by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10935
* s3: log each request at -v=2 by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10931
* admin: show a copyable S3 object URL in the bucket file browser by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10933
* filer.backup, filer.sync: stop sharing resume checkpoints across destinations by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10934
* helm: serve the Lance catalog and deploy the Rust worker by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10936
* helm: trim the Lance chart comments by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10940
* mount: register UNC mount points as WinFsp network file systems by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10943
* build(deps): bump github.com/getsentry/sentry-go from 0.44.1 to 0.48.0 by @dependabot[bot] in https://github.com/seaweedfs/seaweedfs/pull/10921
* filer: stop TUS uploads from turning into garbage by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10945
* s3: stop one abandoned request from cancelling every concurrent upload by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10948
* master: stop hintless small-file assigns from marking volumes full by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10944
* volume: stop read-only volumes from pinning .idx and .sdx by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10950
* filter volume by local or remote storage name by @27149chen in https://github.com/seaweedfs/seaweedfs/pull/10946
* admin: accept a list of collections in the task collection filter by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10953
* rust volume: search .sdx for read-only volumes instead of holding the index by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10951
* s3: deny anonymous access when the identity config loads no identities by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10954
* shell: parse every collection filter the same way by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10955
* mount: name the disk after the mounted path by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10958
* rust volume: fail closed on sorted-index failures and reconcile tier-up by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10956
* master: cap the reported capacity at what the disks hold by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10960
* filer: apply the path's storage rule TTL on every write path by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10963
* mount: stop a replaced rename destination from flushing over the rename by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10965
* rust volume: stop racing the clock in torn_sdx_is_regenerated by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10966
* s3: fix UploadPartCopy with volume-data encryption by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10971
* s3: keep verifying the request host when externalUrl is set by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10970
* mount: let a rename remove its source at the source's own version by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10973
* volume: resolve the disk IO slow-latency threshold per disk by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10976
* s3: keep a missing object a 404 under If-Match and If-Unmodified-Since by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10985
* webdav: describe a listed entry the way clients expect by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10993
* mount: keep metadata operations working on an unlinked open file by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10989
* Authorize an Iceberg table create before it writes by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10991
* filer, s3: reuse the volume server's guarded remote-storage client builder by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10990
* s3tables: delete only the location the dropped table owns by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10986
* s3: cover the directory marker key with object lock by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10988
* shell: remove the directories emptied by volume.fsck's filer entry purge by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10992
* s3: reject a request that names two operations by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10987
* volume: cut the memory a server holding millions of volumes still uses by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10999
* s3: distinguish a failed bucket lookup from a missing bucket on HEAD by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11000
* wdclient: bound the wait for a master leader by the caller's context by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11002
* s3: share one retry allowance across a batch delete by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11001
* Report a delete the filer rejected instead of answering success by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11003
* Classify a filer error before a user-controlled path is wrapped into it by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11004
* Let filer.sync move past a chunk the source cluster no longer has by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11019
* Bound the memory an EC shard recovery holds by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11020
* Read metadata log chunks the way the mount reads every other chunk by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11018
* s3: replay a delete whose reply the transport dropped by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11022
* mount: implement fallocate by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11021
* Re-check an EC shard map a failed read has disproved by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11023
* ec: split the shard-interval recovery into a gather and a rebuild by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11005
* s3: an abort answered mid-part no longer leaves the upload completable by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11025
* master, filer, s3api: bound the collection deletes that strand a caller by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11026
* ec: scrub a volume through its parity data by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11006
* rust: cover the READS scrub reconstruction path by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11027
* filter by volume ids by @27149chen in https://github.com/seaweedfs/seaweedfs/pull/10983
* ec: uniform shard block layout by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/10932
* fix: Move cluster.LiveLock.generation to first field fix 32bit alignment by @baalimago in https://github.com/seaweedfs/seaweedfs/pull/11028
* ec: pin auto-selected shard placement to the disk that already owns the shard by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11029
* ec: refuse to mount a 0-byte shard file when the index has entries by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11030
* master: shed assigns retryably until volume servers register capacity by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11032
* mq: fix idle-cleanup shard deadlock that permanently wedges the broker's topic map by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11051
* get volume topology info without volume details by @27149chen in https://github.com/seaweedfs/seaweedfs/pull/11036
* build(deps): bump github.com/ydb-platform/ydb-go-sdk/v3 from 3.147.1 to 3.151.1 by @dependabot[bot] in https://github.com/seaweedfs/seaweedfs/pull/11041
* build(deps): bump modernc.org/sqlite from 1.56.0 to 1.57.0 by @dependabot[bot] in https://github.com/seaweedfs/seaweedfs/pull/11042
* build(deps): bump github/codeql-action from 4.37.8 to 4.37.9 by @dependabot[bot] in https://github.com/seaweedfs/seaweedfs/pull/11045
* build(deps): bump actions/setup-java from 5 to 6 by @dependabot[bot] in https://github.com/seaweedfs/seaweedfs/pull/11047
* build(deps): bump github.com/aws/aws-sdk-go-v2 from 1.43.5 to 1.45.1 by @dependabot[bot] in https://github.com/seaweedfs/seaweedfs/pull/11046
* build(deps): bump google.golang.org/api from 0.293.0 to 0.294.0 by @dependabot[bot] in https://github.com/seaweedfs/seaweedfs/pull/11044
* build(deps): bump google.golang.org/grpc from 1.84.0-dev.0.20260723093437-b6eac429d7b6 to 1.85.0-dev by @dependabot[bot] in https://github.com/seaweedfs/seaweedfs/pull/11043
* sts: session duration no longer clamped to the web identity token exp by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11048
* shell: keep fs.mergeVolumes from spinning past the finished moves by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11050
* s3: let attached policies authorize CreateBucket by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11049
* shell: keep noLock to the command that set it by @chrislusf in https://github.com/seaweedfs/seaweedfs/pull/11052

## New Contributors
* @junkerderprovinz made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/10884
* @baalimago made their first contribution in https://github.com/seaweedfs/seaweedfs/pull/11028

**Full Changelog**: https://github.com/seaweedfs/seaweedfs/compare/4.44...4.45