This commit is contained in:
songjc 2025-07-02 11:43:35 +08:00
commit bbb70e88bf
6 changed files with 49 additions and 163 deletions

View File

@ -4,6 +4,5 @@ import (
// !!! 需要导入所有存储服务的包 !!!
_ "gitlink.org.cn/cloudream/jcs-pub/common/pkgs/storage/efile"
_ "gitlink.org.cn/cloudream/jcs-pub/common/pkgs/storage/local"
_ "gitlink.org.cn/cloudream/jcs-pub/common/pkgs/storage/mashup"
_ "gitlink.org.cn/cloudream/jcs-pub/common/pkgs/storage/obs"
)

View File

@ -91,10 +91,6 @@ func (b *builder) getToken() (string, error) {
}
func (b *builder) CreateECMultiplier(typeOnly bool) (types.ECMultiplier, error) {
if typeOnly {
return (*ECMultiplier)(nil), nil
}
feat := types.FindFeature[*cortypes.ECMultiplierFeature](b.detail)
if feat == nil {
return nil, fmt.Errorf("feature ECMultiplier not found")
@ -105,6 +101,10 @@ func (b *builder) CreateECMultiplier(typeOnly bool) (types.ECMultiplier, error)
return nil, fmt.Errorf("invalid storage credential type %T for efile storage", b.detail.UserSpace.Credential)
}
if typeOnly {
return (*ECMultiplier)(nil), nil
}
return &ECMultiplier{
blder: b,
url: cred.APIURL,

View File

@ -27,56 +27,56 @@ func (b *builder) FeatureDesc() types.FeatureDesc {
}
func (b *builder) CreateShardStore(typeOnly bool) (types.ShardStore, error) {
if typeOnly {
return (*ShardStore)(nil), nil
}
cred, ok := b.detail.UserSpace.Credential.(*cortypes.LocalCred)
if !ok {
return nil, fmt.Errorf("invalid storage credential type %T for local storage", b.detail.UserSpace.Credential)
}
if typeOnly {
return (*ShardStore)(nil), nil
}
return NewShardStore(cred.RootDir, b.detail)
}
func (b *builder) CreateBaseStore(typeOnly bool) (types.BaseStore, error) {
if typeOnly {
return (*BaseStore)(nil), nil
}
cred, ok := b.detail.UserSpace.Credential.(*cortypes.LocalCred)
if !ok {
return nil, fmt.Errorf("invalid storage credential type %T for local storage", b.detail.UserSpace.Credential)
}
if typeOnly {
return (*BaseStore)(nil), nil
}
return NewBaseStore(cred.RootDir, b.detail)
}
func (b *builder) CreateMultiparter(typeOnly bool) (types.Multiparter, error) {
if typeOnly {
return (*Multiparter)(nil), nil
}
feat := types.FindFeature[*cortypes.MultipartUploadFeature](b.detail)
if feat == nil {
return nil, fmt.Errorf("feature %T not found", cortypes.MultipartUploadFeature{})
}
if typeOnly {
return (*Multiparter)(nil), nil
}
return &Multiparter{
feat: feat,
}, nil
}
func (b *builder) CreateS2STransfer(typeOnly bool) (types.S2STransfer, error) {
if typeOnly {
return (*S2STransfer)(nil), nil
}
feat := types.FindFeature[*cortypes.S2STransferFeature](b.detail)
if feat == nil {
return nil, fmt.Errorf("feature %T not found", cortypes.S2STransferFeature{})
}
if typeOnly {
return (*S2STransfer)(nil), nil
}
return &S2STransfer{
detail: b.detail,
}, nil

View File

@ -1,114 +0,0 @@
package mashup
/*
import (
"fmt"
clitypes "gitlink.org.cn/cloudream/jcs-pub/client/types"
"gitlink.org.cn/cloudream/jcs-pub/common/pkgs/storage/factory/reg"
"gitlink.org.cn/cloudream/jcs-pub/common/pkgs/storage/types"
cortypes "gitlink.org.cn/cloudream/jcs-pub/coordinator/types"
)
func init() {
reg.RegisterBuilder[*cortypes.MashupStorageType](func(detail *clitypes.UserSpaceDetail) types.StorageBuilder {
return &builder{
detail: detail,
}
})
}
type builder struct {
detail *clitypes.UserSpaceDetail
}
func (b *builder) FeatureDesc() types.FeatureDesc {
stgType := b.detail.UserSpace.Storage.(*cortypes.MashupStorageType)
cred, ok := b.detail.UserSpace.Credential.(*cortypes.MashupCred)
if !ok {
return types.FeatureDesc{}
}
newDetail := *b.detail
newDetail.UserSpace.Storage = stgType.Store
newDetail.UserSpace.Credential = cred.Store
blder := reg.GetBuilderInternal(&newDetail)
return blder.FeatureDesc()
}
func (b *builder) CreateShardStore() (types.ShardStore, error) {
stgType := b.detail.UserSpace.Storage.(*cortypes.MashupStorageType)
cred, ok := b.detail.UserSpace.Credential.(*cortypes.MashupCred)
if !ok {
return nil, fmt.Errorf("invalid storage credential type %T for mashup storage", b.detail.UserSpace.Credential)
}
newDetail := *b.detail
newDetail.UserSpace.Storage = stgType.Store
newDetail.UserSpace.Credential = cred.Store
blder := reg.GetBuilderInternal(&newDetail)
return blder.CreateShardStore()
}
func (b *builder) CreateBaseStore() (types.BaseStore, error) {
stgType := b.detail.UserSpace.Storage.(*cortypes.MashupStorageType)
cred, ok := b.detail.UserSpace.Credential.(*cortypes.MashupCred)
if !ok {
return nil, fmt.Errorf("invalid storage credential type %T for mashup storage", b.detail.UserSpace.Credential)
}
newDetail := *b.detail
newDetail.UserSpace.Storage = stgType.Store
newDetail.UserSpace.Credential = cred.Store
blder := reg.GetBuilderInternal(&newDetail)
return blder.CreateBaseStore()
}
func (b *builder) CreateMultiparter() (types.Multiparter, error) {
stgType := b.detail.UserSpace.Storage.(*cortypes.MashupStorageType)
cred, ok := b.detail.UserSpace.Credential.(*cortypes.MashupCred)
if !ok {
return nil, fmt.Errorf("invalid storage credential type %T for mashup storage", b.detail.UserSpace.Credential)
}
newDetail := *b.detail
newDetail.UserSpace.Storage = stgType.Feature
newDetail.UserSpace.Credential = cred.Feature
blder := reg.GetBuilderInternal(&newDetail)
return blder.CreateMultiparter()
}
func (b *builder) CreateS2STransfer() (types.S2STransfer, error) {
stgType := b.detail.UserSpace.Storage.(*cortypes.MashupStorageType)
cred, ok := b.detail.UserSpace.Credential.(*cortypes.MashupCred)
if !ok {
return nil, fmt.Errorf("invalid storage credential type %T for mashup storage", b.detail.UserSpace.Credential)
}
newDetail := *b.detail
newDetail.UserSpace.Storage = stgType.Feature
newDetail.UserSpace.Credential = cred.Feature
blder := reg.GetBuilderInternal(&newDetail)
return blder.CreateS2STransfer()
}
func (b *builder) CreateECMultiplier() (types.ECMultiplier, error) {
stgType := b.detail.UserSpace.Storage.(*cortypes.MashupStorageType)
cred, ok := b.detail.UserSpace.Credential.(*cortypes.MashupCred)
if !ok {
return nil, fmt.Errorf("invalid storage credential type %T for mashup storage", b.detail.UserSpace.Credential)
}
newDetail := *b.detail
newDetail.UserSpace.Storage = stgType.Feature
newDetail.UserSpace.Credential = cred.Feature
blder := reg.GetBuilderInternal(&newDetail)
return blder.CreateECMultiplier()
}
*/

View File

@ -33,16 +33,16 @@ func (b *builder) FeatureDesc() types.FeatureDesc {
}
func (b *builder) CreateShardStore(typeOnly bool) (types.ShardStore, error) {
if typeOnly {
return (*ShardStore)(nil), nil
}
stgType := b.detail.UserSpace.Storage.(*cortypes.OBSType)
cred, ok := b.detail.UserSpace.Credential.(*cortypes.OBSCred)
if !ok {
return nil, fmt.Errorf("invalid storage credential type %T for obs storage", b.detail.UserSpace.Credential)
}
if typeOnly {
return (*ShardStore)(nil), nil
}
cli, bucket, err := createClient(stgType, cred)
if err != nil {
return nil, err
@ -52,16 +52,16 @@ func (b *builder) CreateShardStore(typeOnly bool) (types.ShardStore, error) {
}
func (b *builder) CreateBaseStore(typeOnly bool) (types.BaseStore, error) {
if typeOnly {
return (*s3stg.BaseStore)(nil), nil
}
stgType := b.detail.UserSpace.Storage.(*cortypes.OBSType)
cred, ok := b.detail.UserSpace.Credential.(*cortypes.OBSCred)
if !ok {
return nil, fmt.Errorf("invalid storage credential type %T for obs storage", b.detail.UserSpace.Credential)
}
if typeOnly {
return (*s3stg.BaseStore)(nil), nil
}
cli, bucket, err := createClient(stgType, cred)
if err != nil {
return nil, err
@ -91,16 +91,16 @@ func createClient(stgType *cortypes.OBSType, cred *cortypes.OBSCred) (*s3.Client
}
func (b *builder) CreateMultiparter(typeOnly bool) (types.Multiparter, error) {
if typeOnly {
return (*s3stg.Multiparter)(nil), nil
}
stgType := b.detail.UserSpace.Storage.(*cortypes.OBSType)
feat := types.FindFeature[*cortypes.MultipartUploadFeature](b.detail)
if feat == nil {
return nil, fmt.Errorf("feature %T not found", cortypes.MultipartUploadFeature{})
}
if typeOnly {
return (*s3stg.Multiparter)(nil), nil
}
cred, ok := b.detail.UserSpace.Credential.(*cortypes.OBSCred)
if !ok {
return nil, fmt.Errorf("invalid storage credential type %T for obs storage", b.detail.UserSpace.Credential)
@ -120,16 +120,16 @@ func (b *builder) CreateMultiparter(typeOnly bool) (types.Multiparter, error) {
}
func (b *builder) CreateS2STransfer(typeOnly bool) (types.S2STransfer, error) {
if typeOnly {
return (*S2STransfer)(nil), nil
}
stgType := b.detail.UserSpace.Storage.(*cortypes.OBSType)
feat := types.FindFeature[*cortypes.S2STransferFeature](b.detail)
if feat == nil {
return nil, fmt.Errorf("feature %T not found", cortypes.S2STransferFeature{})
}
if typeOnly {
return (*S2STransfer)(nil), nil
}
cred, ok := b.detail.UserSpace.Credential.(*cortypes.OBSCred)
if !ok {
return nil, fmt.Errorf("invalid storage credential type %T for obs storage", b.detail.UserSpace.Credential)

View File

@ -32,16 +32,16 @@ func (b *builder) FeatureDesc() types.FeatureDesc {
}
func (b *builder) CreateShardStore(typeOnly bool) (types.ShardStore, error) {
if typeOnly {
return (*ShardStore)(nil), nil
}
stgType := b.detail.UserSpace.Storage.(*cortypes.S3Type)
s3Cred, ok := b.detail.UserSpace.Credential.(*cortypes.S3Cred)
if !ok {
return nil, fmt.Errorf("invalid storage credential type %T for s3 storage", b.detail.UserSpace.Credential)
}
if typeOnly {
return (*ShardStore)(nil), nil
}
cli, bkt, err := createClient(stgType, s3Cred)
if err != nil {
return nil, err
@ -51,15 +51,16 @@ func (b *builder) CreateShardStore(typeOnly bool) (types.ShardStore, error) {
}
func (b *builder) CreateBaseStore(typeOnly bool) (types.BaseStore, error) {
if typeOnly {
return (*BaseStore)(nil), nil
}
stgType := b.detail.UserSpace.Storage.(*cortypes.S3Type)
s3Cred, ok := b.detail.UserSpace.Credential.(*cortypes.S3Cred)
if !ok {
return nil, fmt.Errorf("invalid storage credential type %T for s3 storage", b.detail.UserSpace.Credential)
}
if typeOnly {
return (*BaseStore)(nil), nil
}
cli, bkt, err := createClient(stgType, s3Cred)
if err != nil {
return nil, err
@ -91,10 +92,6 @@ func createClient(stgType *cortypes.S3Type, cred *cortypes.S3Cred) (*s3.Client,
}
func (b *builder) CreateMultiparter(typeOnly bool) (types.Multiparter, error) {
if typeOnly {
return (*Multiparter)(nil), nil
}
stgType := b.detail.UserSpace.Storage.(*cortypes.S3Type)
feat := types.FindFeature[*cortypes.MultipartUploadFeature](b.detail)
if feat == nil {
@ -106,6 +103,10 @@ func (b *builder) CreateMultiparter(typeOnly bool) (types.Multiparter, error) {
return nil, fmt.Errorf("invalid storage credential type %T for s3 base store", b.detail.UserSpace.Credential)
}
if typeOnly {
return (*Multiparter)(nil), nil
}
cli, bucket, err := createClient(stgType, s3Cred)
if err != nil {
return nil, err