From 5e8152b81c70e9bb7b2eefbe88acfd3d6a671c7f Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 16 Jun 2026 11:47:32 -0700 Subject: [PATCH] storage: register tier backends at the binary composition root (#9989) The s3 and rclone tiered-storage backends were registered via blank imports in weed/storage (volume_tier.go and volume_info/volume_info.go). That forced every library consumer of weed/storage -- weed/shell, and through it external tools -- to link aws-sdk-go and, under the rclone build tag, the full rclone backend set and its cloud-storage SDKs, even though those consumers never tier volumes. Move the registrations into a new weed/storage/backend/all aggregator and blank-import it once from weed/command, the binary's composition root. The weed binary still registers both backends; weed/storage and its library consumers no longer pull the backend SDKs into their dependency graph. --- weed/command/backends.go | 5 +++++ weed/storage/backend/all/all.go | 10 ++++++++++ weed/storage/volume_info/volume_info.go | 2 -- weed/storage/volume_tier.go | 2 -- 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 weed/command/backends.go create mode 100644 weed/storage/backend/all/all.go diff --git a/weed/command/backends.go b/weed/command/backends.go new file mode 100644 index 000000000..6654b18a1 --- /dev/null +++ b/weed/command/backends.go @@ -0,0 +1,5 @@ +package command + +// Register the tiered-storage backends here, at the binary's composition root, +// so library consumers of weed/storage don't pull the backend SDKs. +import _ "github.com/seaweedfs/seaweedfs/weed/storage/backend/all" diff --git a/weed/storage/backend/all/all.go b/weed/storage/backend/all/all.go new file mode 100644 index 000000000..df77a4ed1 --- /dev/null +++ b/weed/storage/backend/all/all.go @@ -0,0 +1,10 @@ +// Package all registers every tiered-storage backend factory. Binaries that +// serve or manage tiered volumes blank-import it from their composition root; +// keeping the registrations out of weed/storage lets library consumers avoid +// pulling the backend SDKs into their dependency graph. +package all + +import ( + _ "github.com/seaweedfs/seaweedfs/weed/storage/backend/rclone_backend" + _ "github.com/seaweedfs/seaweedfs/weed/storage/backend/s3_backend" +) diff --git a/weed/storage/volume_info/volume_info.go b/weed/storage/volume_info/volume_info.go index 19b1d336e..78c931af6 100644 --- a/weed/storage/volume_info/volume_info.go +++ b/weed/storage/volume_info/volume_info.go @@ -6,8 +6,6 @@ import ( "github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/pb/volume_server_pb" - _ "github.com/seaweedfs/seaweedfs/weed/storage/backend/rclone_backend" - _ "github.com/seaweedfs/seaweedfs/weed/storage/backend/s3_backend" "github.com/seaweedfs/seaweedfs/weed/util" jsonpb "google.golang.org/protobuf/encoding/protojson" ) diff --git a/weed/storage/volume_tier.go b/weed/storage/volume_tier.go index d398503a3..775db67f3 100644 --- a/weed/storage/volume_tier.go +++ b/weed/storage/volume_tier.go @@ -7,8 +7,6 @@ import ( "github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/pb/volume_server_pb" "github.com/seaweedfs/seaweedfs/weed/storage/backend" - _ "github.com/seaweedfs/seaweedfs/weed/storage/backend/rclone_backend" - _ "github.com/seaweedfs/seaweedfs/weed/storage/backend/s3_backend" "github.com/seaweedfs/seaweedfs/weed/storage/needle" "github.com/seaweedfs/seaweedfs/weed/storage/types" "github.com/seaweedfs/seaweedfs/weed/storage/volume_info"