4.45

Graphify-Labs/graphify4.45Aug 31, 2026by chrislusf

Upgrading?

AI Summary

Focuses on stability and UI enhancements, shipping the Rust maintenance worker and significantly improving the admin interface and S3 API reliability.

Key Highlights

  • Rust maintenance worker now ships with the release
  • Visual IAM policy editor in the admin UI
  • S3 API retry logic for transient failures
  • Helm chart improvements for Rust worker and Lance catalog

New Features

  • Rust maintenance worker
  • Visual IAM policy editor
  • Admin UI features like copyable S3 URLs and bucket policy management
  • WinFsp UNC mount point registration

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

Related Repositories