Browse Source

存储系统增加获取package中object的filehash的接口

pull/26/head
Sydonian 2 years ago
parent
commit
2f70189147
4 changed files with 148 additions and 18 deletions
  1. +39
    -14
      sdks/storage/cache.go
  2. +18
    -3
      sdks/storage/models.go
  3. +33
    -0
      sdks/storage/package.go
  4. +58
    -1
      sdks/storage/storage_test.go

+ 39
- 14
sdks/storage/cache.go View File

@@ -1,13 +1,10 @@
package stgsdk

import (
"fmt"
"net/url"
"strings"

"gitlink.org.cn/cloudream/common/consts/errorcode"
myhttp "gitlink.org.cn/cloudream/common/utils/http"
"gitlink.org.cn/cloudream/common/utils/serder"
)

type CacheMovePackageReq struct {
@@ -32,19 +29,47 @@ func (c *Client) CacheMovePackage(req CacheMovePackageReq) (*CacheMovePackageRes
return nil, err
}

contType := resp.Header.Get("Content-Type")
if strings.Contains(contType, myhttp.ContentTypeJSON) {
var codeResp response[CacheMovePackageResp]
if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
return nil, fmt.Errorf("parsing response: %w", err)
}
jsonResp, err := myhttp.ParseJSONResponse[response[CacheMovePackageResp]](resp)
if err != nil {
return nil, err
}

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

return nil, jsonResp.ToError()
}

type GetPackageObjectCacheInfosReq struct {
UserID int64 `json:"userID"`
PackageID int64 `json:"packageID"`
}
type GetPackageObjectCacheInfosResp struct {
Infos []ObjectCacheInfo `json:"cacheInfos"`
}

if codeResp.Code == errorcode.OK {
return &codeResp.Data, nil
}
func (c *Client) GetPackageObjectCacheInfos(req GetPackageObjectCacheInfosReq) (*GetPackageObjectCacheInfosResp, error) {
url, err := url.JoinPath(c.baseURL, "/cache/getPackageObjectCacheInfos")
if err != nil {
return nil, err
}

resp, err := myhttp.GetForm(url, myhttp.RequestParam{
Query: req,
})
if err != nil {
return nil, err
}

jsonResp, err := myhttp.ParseJSONResponse[response[GetPackageObjectCacheInfosResp]](resp)
if err != nil {
return nil, err
}

return nil, codeResp.ToError()
if jsonResp.Code == errorcode.OK {
return &jsonResp.Data, nil
}

return nil, fmt.Errorf("unknow response content type: %s", contType)
return nil, jsonResp.ToError()
}

+ 18
- 3
sdks/storage/models.go View File

@@ -129,14 +129,29 @@ func NewPackageCachingInfo(nodeInfos []NodePackageCachingInfo, packageSize int64
}
}

type Object struct {
ObjectID int64 `db:"ObjectID" json:"objectID"`
PackageID int64 `db:"PackageID" json:"packageID"`
Path string `db:"Path" json:"path"`
Size int64 `db:"Size" json:"size,string"`
}

type Package struct {
PackageID int64 `db:"PackageID" json:"packageID"`
Name string `db:"Name" json:"name"`
BucketID int64 `db:"BucketID" json:"bucketID"`
State string `db:"State" json:"state"`
Redundancy TypedRedundancyInfo `db:"Redundancy" json:"redundancy"`
}

type ObjectCacheInfo struct {
ObjectID int64 `json:"objectID"`
Object Object `json:"object"`
FileHash string `json:"fileHash"`
}

func NewObjectCacheInfo(objectID int64, fileHash string) ObjectCacheInfo {
func NewObjectCacheInfo(object Object, fileHash string) ObjectCacheInfo {
return ObjectCacheInfo{
ObjectID: objectID,
Object: object,
FileHash: fileHash,
}
}


+ 33
- 0
sdks/storage/package.go View File

@@ -12,6 +12,39 @@ import (
"gitlink.org.cn/cloudream/common/utils/serder"
)

type PackageGetReq struct {
UserID int64 `json:"userID"`
PackageID int64 `json:"packageID"`
}
type PackageGetResp struct {
Package
}

func (c *Client) PackageGet(req PackageGetReq) (*PackageGetResp, error) {
url, err := url.JoinPath(c.baseURL, "/package/get")
if err != nil {
return nil, err
}

resp, err := myhttp.GetForm(url, myhttp.RequestParam{
Query: req,
})
if err != nil {
return nil, err
}

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

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

return nil, codeResp.ToError()
}

type PackageUploadReq struct {
UserID int64 `json:"userID"`
BucketID int64 `json:"bucketID"`


+ 58
- 1
sdks/storage/storage_test.go View File

@@ -11,6 +11,56 @@ import (
"gitlink.org.cn/cloudream/common/pkgs/iterator"
)

func Test_PackageGet(t *testing.T) {
Convey("上传后获取Package信息", t, func() {
cli := NewClient(&Config{
URL: "http://localhost:7890",
})

fileData := make([]byte, 4096)
for i := 0; i < len(fileData); i++ {
fileData[i] = byte(i)
}

pkgName := uuid.NewString()
upResp, err := cli.PackageUpload(PackageUploadReq{
UserID: 0,
BucketID: 1,
Name: pkgName,
Redundancy: TypedRedundancyInfo{
Type: RedundancyRep,
Info: NewRepRedundancyInfo(1),
},
Files: iterator.Array(
&IterPackageUploadFile{
Path: "test",
File: io.NopCloser(bytes.NewBuffer(fileData)),
},
&IterPackageUploadFile{
Path: "test2",
File: io.NopCloser(bytes.NewBuffer(fileData)),
},
),
})
So(err, ShouldBeNil)

getResp, err := cli.PackageGet(PackageGetReq{
UserID: 0,
PackageID: upResp.PackageID,
})
So(err, ShouldBeNil)

So(getResp.PackageID, ShouldEqual, upResp.PackageID)
So(getResp.Package.Name, ShouldEqual, pkgName)

err = cli.PackageDelete(PackageDeleteReq{
UserID: 0,
PackageID: upResp.PackageID,
})
So(err, ShouldBeNil)
})
}

func Test_Object(t *testing.T) {
Convey("上传,下载,删除", t, func() {
cli := NewClient(&Config{
@@ -149,7 +199,14 @@ func Test_Cache(t *testing.T) {
NodeID: 1,
})
So(err, ShouldBeNil)
So(len(cacheMoveResp.CacheInfos), ShouldEqual, 2)

cacheInfoResp, err := cli.GetPackageObjectCacheInfos(GetPackageObjectCacheInfosReq{
UserID: 0,
PackageID: upResp.PackageID,
})
So(err, ShouldBeNil)

So(cacheInfoResp.Infos, ShouldResemble, cacheMoveResp.CacheInfos)

err = cli.PackageDelete(PackageDeleteReq{
UserID: 0,


Loading…
Cancel
Save