JCS-pub/common/pkgs/mq/coordinator/package.go

224 lines
6.0 KiB
Go

package coordinator
import (
"time"
"gitlink.org.cn/cloudream/common/pkgs/mq"
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
"gitlink.org.cn/cloudream/storage/common/pkgs/db/model"
)
type PackageService interface {
GetPackage(msg *GetPackage) (*GetPackageResp, *mq.CodeMessage)
CreatePackage(msg *CreatePackage) (*CreatePackageResp, *mq.CodeMessage)
UpdatePackage(msg *UpdatePackage) (*UpdatePackageResp, *mq.CodeMessage)
DeletePackage(msg *DeletePackage) (*DeletePackageResp, *mq.CodeMessage)
GetPackageCachedNodes(msg *GetPackageCachedNodes) (*GetPackageCachedNodesResp, *mq.CodeMessage)
GetPackageLoadedNodes(msg *GetPackageLoadedNodes) (*GetPackageLoadedNodesResp, *mq.CodeMessage)
}
// 获取Package基本信息
var _ = Register(Service.GetPackage)
type GetPackage struct {
mq.MessageBodyBase
UserID cdssdk.UserID `json:"userID"`
PackageID cdssdk.PackageID `json:"packageID"`
}
type GetPackageResp struct {
mq.MessageBodyBase
model.Package
}
func NewGetPackage(userID cdssdk.UserID, packageID cdssdk.PackageID) *GetPackage {
return &GetPackage{
UserID: userID,
PackageID: packageID,
}
}
func NewGetPackageResp(pkg model.Package) *GetPackageResp {
return &GetPackageResp{
Package: pkg,
}
}
func (client *Client) GetPackage(msg *GetPackage) (*GetPackageResp, error) {
return mq.Request(Service.GetPackage, client.rabbitCli, msg)
}
// 创建一个Package
var _ = Register(Service.CreatePackage)
type CreatePackage struct {
mq.MessageBodyBase
UserID cdssdk.UserID `json:"userID"`
BucketID cdssdk.BucketID `json:"bucketID"`
Name string `json:"name"`
}
type CreatePackageResp struct {
mq.MessageBodyBase
PackageID cdssdk.PackageID `json:"packageID"`
}
func NewCreatePackage(userID cdssdk.UserID, bucketID cdssdk.BucketID, name string) *CreatePackage {
return &CreatePackage{
UserID: userID,
BucketID: bucketID,
Name: name,
}
}
func NewCreatePackageResp(packageID cdssdk.PackageID) *CreatePackageResp {
return &CreatePackageResp{
PackageID: packageID,
}
}
func (client *Client) CreatePackage(msg *CreatePackage) (*CreatePackageResp, error) {
return mq.Request(Service.CreatePackage, client.rabbitCli, msg)
}
// 更新Package
var _ = Register(Service.UpdatePackage)
type UpdatePackage struct {
mq.MessageBodyBase
PackageID cdssdk.PackageID `json:"packageID"`
Adds []AddObjectEntry `json:"adds"`
Deletes []cdssdk.ObjectID `json:"deletes"`
}
type UpdatePackageResp struct {
mq.MessageBodyBase
}
type AddObjectEntry struct {
Path string `json:"path"`
Size int64 `json:"size,string"`
FileHash string `json:"fileHash"`
UploadTime time.Time `json:"uploadTime"` // 开始上传文件的时间
NodeID cdssdk.NodeID `json:"nodeID"`
}
func NewUpdatePackage(packageID cdssdk.PackageID, adds []AddObjectEntry, deletes []cdssdk.ObjectID) *UpdatePackage {
return &UpdatePackage{
PackageID: packageID,
Adds: adds,
Deletes: deletes,
}
}
func NewUpdatePackageResp() *UpdatePackageResp {
return &UpdatePackageResp{}
}
func NewAddObjectEntry(path string, size int64, fileHash string, uploadTime time.Time, nodeID cdssdk.NodeID) AddObjectEntry {
return AddObjectEntry{
Path: path,
Size: size,
FileHash: fileHash,
UploadTime: uploadTime,
NodeID: nodeID,
}
}
func (client *Client) UpdatePackage(msg *UpdatePackage) (*UpdatePackageResp, error) {
return mq.Request(Service.UpdatePackage, client.rabbitCli, msg)
}
// 删除对象
var _ = Register(Service.DeletePackage)
type DeletePackage struct {
mq.MessageBodyBase
UserID cdssdk.UserID `db:"userID"`
PackageID cdssdk.PackageID `db:"packageID"`
}
type DeletePackageResp struct {
mq.MessageBodyBase
}
func NewDeletePackage(userID cdssdk.UserID, packageID cdssdk.PackageID) *DeletePackage {
return &DeletePackage{
UserID: userID,
PackageID: packageID,
}
}
func NewDeletePackageResp() *DeletePackageResp {
return &DeletePackageResp{}
}
func (client *Client) DeletePackage(msg *DeletePackage) (*DeletePackageResp, error) {
return mq.Request(Service.DeletePackage, client.rabbitCli, msg)
}
// 根据PackageID获取object分布情况
var _ = Register(Service.GetPackageCachedNodes)
type GetPackageCachedNodes struct {
mq.MessageBodyBase
UserID cdssdk.UserID `json:"userID"`
PackageID cdssdk.PackageID `json:"packageID"`
}
type PackageCachedNodeInfo struct {
NodeID int64 `json:"nodeID"`
FileSize int64 `json:"fileSize"`
ObjectCount int64 `json:"objectCount"`
}
type GetPackageCachedNodesResp struct {
mq.MessageBodyBase
cdssdk.PackageCachingInfo
}
func NewGetPackageCachedNodes(userID cdssdk.UserID, packageID cdssdk.PackageID) *GetPackageCachedNodes {
return &GetPackageCachedNodes{
UserID: userID,
PackageID: packageID,
}
}
func NewGetPackageCachedNodesResp(nodeInfos []cdssdk.NodePackageCachingInfo, packageSize int64) *GetPackageCachedNodesResp {
return &GetPackageCachedNodesResp{
PackageCachingInfo: cdssdk.PackageCachingInfo{
NodeInfos: nodeInfos,
PackageSize: packageSize,
},
}
}
func (client *Client) GetPackageCachedNodes(msg *GetPackageCachedNodes) (*GetPackageCachedNodesResp, error) {
return mq.Request(Service.GetPackageCachedNodes, client.rabbitCli, msg)
}
// 根据PackageID获取storage分布情况
var _ = Register(Service.GetPackageLoadedNodes)
type GetPackageLoadedNodes struct {
mq.MessageBodyBase
UserID cdssdk.UserID `json:"userID"`
PackageID cdssdk.PackageID `json:"packageID"`
}
type GetPackageLoadedNodesResp struct {
mq.MessageBodyBase
NodeIDs []cdssdk.NodeID `json:"nodeIDs"`
}
func NewGetPackageLoadedNodes(userID cdssdk.UserID, packageID cdssdk.PackageID) *GetPackageLoadedNodes {
return &GetPackageLoadedNodes{
UserID: userID,
PackageID: packageID,
}
}
func NewGetPackageLoadedNodesResp(nodeIDs []cdssdk.NodeID) *GetPackageLoadedNodesResp {
return &GetPackageLoadedNodesResp{
NodeIDs: nodeIDs,
}
}
func (client *Client) GetPackageLoadedNodes(msg *GetPackageLoadedNodes) (*GetPackageLoadedNodesResp, error) {
return mq.Request(Service.GetPackageLoadedNodes, client.rabbitCli, msg)
}