Browse Source

增加上传并调度的接口

gitlink
Sydonian 1 year ago
parent
commit
a548947112
4 changed files with 66 additions and 12 deletions
  1. +5
    -8
      sdks/storage/cdsapi/object.go
  2. +56
    -0
      sdks/storage/cdsapi/package.go
  3. +3
    -3
      sdks/storage/cdsapi/storage_test.go
  4. +2
    -1
      sdks/storage/shared_storage.go

+ 5
- 8
sdks/storage/cdsapi/object.go View File

@@ -33,9 +33,10 @@ type ObjectUpload struct {
}

type ObjectUploadInfo struct {
UserID cdssdk.UserID `json:"userID" binding:"required"`
PackageID cdssdk.PackageID `json:"packageID" binding:"required"`
StorageAffinity cdssdk.StorageID `json:"storageAffinity"`
UserID cdssdk.UserID `json:"userID" binding:"required"`
PackageID cdssdk.PackageID `json:"packageID" binding:"required"`
Affinity cdssdk.StorageID `json:"affinity"`
LoadTo []cdssdk.StorageID `json:"loadTo"`
}

type UploadingObject struct {
@@ -46,11 +47,7 @@ type UploadingObject struct {
type UploadObjectIterator = iterator.Iterator[*UploadingObject]

type ObjectUploadResp struct {
Uploadeds []UploadedObject `json:"uploadeds"`
}
type UploadedObject struct {
Object *cdssdk.Object `json:"object"`
Error string `json:"error"`
Uploadeds []cdssdk.Object `json:"uploadeds"`
}

func (c *ObjectService) Upload(req ObjectUpload) (*ObjectUploadResp, error) {


+ 56
- 0
sdks/storage/cdsapi/package.go View File

@@ -6,6 +6,7 @@ import (
"strings"

"gitlink.org.cn/cloudream/common/consts/errorcode"
"gitlink.org.cn/cloudream/common/pkgs/iterator"
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
"gitlink.org.cn/cloudream/common/utils/http2"
"gitlink.org.cn/cloudream/common/utils/serder"
@@ -127,6 +128,61 @@ func (s *PackageService) Create(req PackageCreate) (*PackageCreateResp, error) {
return nil, codeResp.ToError()
}

const PackageCreateLoadPath = "/package/createLoad"

type PackageCreateLoad struct {
PackageCreateLoadInfo
Files UploadObjectIterator `json:"-"`
}
type PackageCreateLoadInfo struct {
UserID cdssdk.UserID `json:"userID" binding:"required"`
BucketID cdssdk.BucketID `json:"bucketID" binding:"required"`
Name string `json:"name" binding:"required"`
LoadTo []cdssdk.StorageID `json:"loadTo" binding:"required"`
}
type PackageCreateLoadResp struct {
Package cdssdk.Package `json:"package"`
Objects []cdssdk.Object `json:"objects"`
LoadedDirs []string `json:"loadedDirs"`
}

func (c *PackageService) CreateLoad(req PackageCreateLoad) (*PackageCreateLoadResp, error) {
url, err := url.JoinPath(c.baseURL, PackageCreateLoadPath)
if err != nil {
return nil, err
}

infoJSON, err := serder.ObjectToJSON(req)
if err != nil {
return nil, fmt.Errorf("upload info to json: %w", err)
}

resp, err := http2.PostMultiPart(url, http2.MultiPartRequestParam{
Form: map[string]string{"info": string(infoJSON)},
Files: iterator.Map(req.Files, func(src *UploadingObject) (*http2.IterMultiPartFile, error) {
return &http2.IterMultiPartFile{
FieldName: "files",
FileName: src.Path,
File: src.File,
}, nil
}),
})
if err != nil {
return nil, err
}

codeResp, err := ParseJSONResponse[response[PackageCreateLoadResp]](resp)
if err != nil {
return nil, err
}

if codeResp.Code == errorcode.OK {
return &codeResp.Data, nil
}

return nil, codeResp.ToError()
}

const PackageDeletePath = "/package/delete"

type PackageDelete struct {


+ 3
- 3
sdks/storage/cdsapi/storage_test.go View File

@@ -89,9 +89,9 @@ func Test_Object(t *testing.T) {

_, err = cli.Object().Upload(ObjectUpload{
ObjectUploadInfo: ObjectUploadInfo{
UserID: 1,
PackageID: createResp.Package.PackageID,
StorageAffinity: stgAff,
UserID: 1,
PackageID: createResp.Package.PackageID,
Affinity: stgAff,
},
Files: iterator.Array(
&UploadingObject{


+ 2
- 1
sdks/storage/shared_storage.go View File

@@ -18,7 +18,8 @@ var _ = serder.UseTypeUnionInternallyTagged(types.Ref(types.NewTypeUnion[SharedS
)), "type")

type LocalSharedStorage struct {
Type string `json:"type"`
serder.Metadata `union:"Local"`
Type string `json:"type"`
// 调度Package时的Package的根路径
LoadBase string `json:"loadBase"`
}


Loading…
Cancel
Save