diff --git a/client/internal/services/cache.go b/client/internal/services/cache.go index 8842593..04bcb5a 100644 --- a/client/internal/services/cache.go +++ b/client/internal/services/cache.go @@ -32,7 +32,7 @@ func (svc *CacheService) StartCacheMovePackage(userID cdssdk.UserID, packageID c return 0, "", fmt.Errorf("get storage detail: %w", err) } - if !factory.GetBuilder(*getStg.Storages[0]).HasShardStore() { + if !factory.GetBuilder(*getStg.Storages[0]).ShardStoreDesc().Enabled() { return 0, "", fmt.Errorf("shard storage is not enabled") } diff --git a/client/internal/services/storage.go b/client/internal/services/storage.go index 8240c35..768361c 100644 --- a/client/internal/services/storage.go +++ b/client/internal/services/storage.go @@ -105,7 +105,7 @@ func (svc *StorageService) LoadPackage(userID cdssdk.UserID, packageID cdssdk.Pa ft.AddTo(ioswitch2.NewLoadToShared(*destStg.MasterHub, destStg.Storage, path.Join(rootPath, obj.Object.Path))) // 顺便保存到同存储服务的分片存储中 - if factory.GetBuilder(*destStg).HasShardStore() { + if factory.GetBuilder(*destStg).ShardStoreDesc().Enabled() { ft.AddTo(ioswitch2.NewToShardStore(*destStg.MasterHub, *destStg, ioswitch2.RawStream(), "")) pinned = append(pinned, obj.Object.ObjectID) } diff --git a/common/pkgs/storage/local/local.go b/common/pkgs/storage/local/local.go index 5dd3193..64b17ab 100644 --- a/common/pkgs/storage/local/local.go +++ b/common/pkgs/storage/local/local.go @@ -58,12 +58,12 @@ func (b *builder) CreateAgent() (types.StorageAgent, error) { return agt, nil } -func (b *builder) HasShardStore() bool { - return b.detail.Storage.ShardStore != nil +func (b *builder) ShardStoreDesc() types.ShardStoreDesc { + return &ShardStoreDesc{builder: b} } -func (b *builder) HasSharedStore() bool { - return b.detail.Storage.SharedStore != nil +func (b *builder) SharedStoreDesc() types.SharedStoreDesc { + return &SharedStoreDesc{builder: b} } func (b *builder) CreateMultiparter() (types.Multiparter, error) { diff --git a/common/pkgs/storage/local/shard_store.go b/common/pkgs/storage/local/shard_store.go index 9176504..7682f59 100644 --- a/common/pkgs/storage/local/shard_store.go +++ b/common/pkgs/storage/local/shard_store.go @@ -22,6 +22,18 @@ const ( BlocksDir = "blocks" ) +type ShardStoreDesc struct { + builder *builder +} + +func (s *ShardStoreDesc) Enabled() bool { + return s.builder.detail.Storage.ShardStore != nil +} + +func (s *ShardStoreDesc) HasBypassNotifier() bool { + return true +} + type ShardStore struct { agt *agent cfg cdssdk.LocalShardStorage diff --git a/common/pkgs/storage/local/shared_store.go b/common/pkgs/storage/local/shared_store.go index 97d6756..9bfd895 100644 --- a/common/pkgs/storage/local/shared_store.go +++ b/common/pkgs/storage/local/shared_store.go @@ -10,6 +10,18 @@ import ( "gitlink.org.cn/cloudream/storage/common/pkgs/storage/types" ) +type SharedStoreDesc struct { + builder *builder +} + +func (d *SharedStoreDesc) Enabled() bool { + return d.builder.detail.Storage.SharedStore != nil +} + +func (d *SharedStoreDesc) HasBypassNotifier() bool { + return false +} + type SharedStore struct { agt *agent cfg cdssdk.LocalSharedStorage diff --git a/common/pkgs/storage/s3/s3.go b/common/pkgs/storage/s3/s3.go index ea97523..e84cfef 100644 --- a/common/pkgs/storage/s3/s3.go +++ b/common/pkgs/storage/s3/s3.go @@ -59,12 +59,12 @@ func (b *builder) CreateAgent() (types.StorageAgent, error) { return agt, nil } -func (b *builder) HasShardStore() bool { - return b.detail.Storage.ShardStore != nil +func (b *builder) ShardStoreDesc() types.ShardStoreDesc { + return &ShardStoreDesc{builder: b} } -func (b *builder) HasSharedStore() bool { - return false +func (b *builder) SharedStoreDesc() types.SharedStoreDesc { + return &SharedStoreDesc{} } func (b *builder) CreateMultiparter() (types.Multiparter, error) { diff --git a/common/pkgs/storage/s3/shard_store.go b/common/pkgs/storage/s3/shard_store.go index 1179030..498e618 100644 --- a/common/pkgs/storage/s3/shard_store.go +++ b/common/pkgs/storage/s3/shard_store.go @@ -25,6 +25,18 @@ const ( BlocksDir = "blocks" ) +type ShardStoreDesc struct { + builder *builder +} + +func (s *ShardStoreDesc) Enabled() bool { + return s.builder.detail.Storage.ShardStore != nil +} + +func (s *ShardStoreDesc) HasBypassNotifier() bool { + return true +} + type ShardStoreOption struct { UseAWSSha256 bool // 能否直接使用AWS提供的SHA256校验,如果不行,则使用本地计算。默认使用本地计算。 } diff --git a/common/pkgs/storage/s3/shared_store.go b/common/pkgs/storage/s3/shared_store.go new file mode 100644 index 0000000..1805946 --- /dev/null +++ b/common/pkgs/storage/s3/shared_store.go @@ -0,0 +1,12 @@ +package s3 + +type SharedStoreDesc struct { +} + +func (d *SharedStoreDesc) Enabled() bool { + return false +} + +func (d *SharedStoreDesc) HasBypassNotifier() bool { + return false +} diff --git a/common/pkgs/storage/types/types.go b/common/pkgs/storage/types/types.go index 0f355d5..9612d5f 100644 --- a/common/pkgs/storage/types/types.go +++ b/common/pkgs/storage/types/types.go @@ -43,9 +43,23 @@ type StorageBuilder interface { // 创建一个在MasterHub上长期运行的存储服务 CreateAgent() (StorageAgent, error) // 是否支持分片存储服务 - HasShardStore() bool + ShardStoreDesc() ShardStoreDesc // 是否支持共享存储服务 - HasSharedStore() bool + SharedStoreDesc() SharedStoreDesc // 创建一个分片上传组件 CreateMultiparter() (Multiparter, error) } + +type ShardStoreDesc interface { + // 是否已启动 + Enabled() bool + // 是否能旁路上传 + HasBypassNotifier() bool +} + +type SharedStoreDesc interface { + // 是否已启动 + Enabled() bool + // 是否能旁路上传 + HasBypassNotifier() bool +} diff --git a/common/pkgs/uploader/uploader.go b/common/pkgs/uploader/uploader.go index 08ebb14..30ea971 100644 --- a/common/pkgs/uploader/uploader.go +++ b/common/pkgs/uploader/uploader.go @@ -86,7 +86,7 @@ func (u *Uploader) BeginUpdate(userID cdssdk.UserID, pkgID cdssdk.PackageID, aff if stg.MasterHub == nil { return nil, fmt.Errorf("load to storage %v has no master hub", stgID) } - if factory.GetBuilder(stg).HasSharedStore() { + if factory.GetBuilder(stg).ShardStoreDesc().Enabled() { return nil, fmt.Errorf("load to storage %v has no shared store", stgID) }