Merge pull request '对接存储系统的修改' (#17) from feature_gxh into master

This commit is contained in:
baohan 2023-12-06 17:20:02 +08:00
commit 01173be078
22 changed files with 131 additions and 98 deletions

View File

@ -8,6 +8,7 @@ import (
"github.com/samber/lo" "github.com/samber/lo"
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler" schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
uopsdk "gitlink.org.cn/cloudream/common/sdks/unifyops" uopsdk "gitlink.org.cn/cloudream/common/sdks/unifyops"
"gitlink.org.cn/cloudream/common/utils/math" "gitlink.org.cn/cloudream/common/utils/math"
@ -362,7 +363,7 @@ func (s *DefaultScheduler) calcResourceLevel(avai float64, need float64) int {
// 计算节点得分情况 // 计算节点得分情况
func (s *DefaultScheduler) calcFileScore(files jobmod.JobFiles, allCCs map[schsdk.CCID]*candidate) error { func (s *DefaultScheduler) calcFileScore(files jobmod.JobFiles, allCCs map[schsdk.CCID]*candidate) error {
// 只计算运控返回的计算中心上的存储服务的数据权重 // 只计算运控返回的计算中心上的存储服务的数据权重
cdsNodeToCC := make(map[int64]*candidate) cdsNodeToCC := make(map[cdssdk.NodeID]*candidate)
for _, cc := range allCCs { for _, cc := range allCCs {
cdsNodeToCC[cc.CC.CDSNodeID] = cc cdsNodeToCC[cc.CC.CDSNodeID] = cc
} }
@ -407,7 +408,7 @@ func (s *DefaultScheduler) calcFileScore(files jobmod.JobFiles, allCCs map[schsd
} }
// 计算package在各节点的得分情况 // 计算package在各节点的得分情况
func (s *DefaultScheduler) calcPackageFileScore(packageID int64, cdsNodeToCC map[int64]*candidate) (map[schsdk.CCID]*fileDetail, error) { func (s *DefaultScheduler) calcPackageFileScore(packageID cdssdk.PackageID, cdsNodeToCC map[cdssdk.NodeID]*candidate) (map[schsdk.CCID]*fileDetail, error) {
colCli, err := schglb.CollectorMQPool.Acquire() colCli, err := schglb.CollectorMQPool.Acquire()
if err != nil { if err != nil {
return nil, fmt.Errorf("new collector client: %w", err) return nil, fmt.Errorf("new collector client: %w", err)
@ -458,7 +459,7 @@ func (s *DefaultScheduler) calcPackageFileScore(packageID int64, cdsNodeToCC map
} }
// 计算package在各节点的得分情况 // 计算package在各节点的得分情况
func (s *DefaultScheduler) calcImageFileScore(imageID schsdk.ImageID, allCCs map[schsdk.CCID]*candidate, cdsNodeToCC map[int64]*candidate) (map[schsdk.CCID]*fileDetail, error) { func (s *DefaultScheduler) calcImageFileScore(imageID schsdk.ImageID, allCCs map[schsdk.CCID]*candidate, cdsNodeToCC map[cdssdk.NodeID]*candidate) (map[schsdk.CCID]*fileDetail, error) {
colCli, err := schglb.CollectorMQPool.Acquire() colCli, err := schglb.CollectorMQPool.Acquire()
if err != nil { if err != nil {
return nil, fmt.Errorf("new collector client: %w", err) return nil, fmt.Errorf("new collector client: %w", err)

View File

@ -8,6 +8,7 @@ import (
"gitlink.org.cn/cloudream/common/consts/errorcode" "gitlink.org.cn/cloudream/common/consts/errorcode"
"gitlink.org.cn/cloudream/common/pkgs/logger" "gitlink.org.cn/cloudream/common/pkgs/logger"
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler" schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
"gitlink.org.cn/cloudream/common/utils/serder" "gitlink.org.cn/cloudream/common/utils/serder"
) )
@ -57,10 +58,10 @@ func (s *JobSetService) Submit(ctx *gin.Context) {
} }
type JobSetLocalFileUploadedReq struct { type JobSetLocalFileUploadedReq struct {
JobSetID schsdk.JobSetID `json:"jobSetID" binding:"required"` JobSetID schsdk.JobSetID `json:"jobSetID" binding:"required"`
LocalPath string `json:"localPath" binding:"required"` LocalPath string `json:"localPath" binding:"required"`
Error string `json:"error"` Error string `json:"error"`
PackageID int64 `json:"packageID"` PackageID cdssdk.PackageID `json:"packageID"`
} }
func (s *JobSetService) LocalFileUploaded(ctx *gin.Context) { func (s *JobSetService) LocalFileUploaded(ctx *gin.Context) {

View File

@ -8,6 +8,7 @@ import (
"github.com/samber/lo" "github.com/samber/lo"
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler" schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
uopsdk "gitlink.org.cn/cloudream/common/sdks/unifyops" uopsdk "gitlink.org.cn/cloudream/common/sdks/unifyops"
"gitlink.org.cn/cloudream/common/utils/math" "gitlink.org.cn/cloudream/common/utils/math"
@ -534,7 +535,7 @@ func (s *DefaultPreScheduler) calcResourceLevel(avai float64, need float64) int
// 计算节点得分情况 // 计算节点得分情况
func (s *DefaultPreScheduler) calcFileScore(files schsdk.JobFilesInfo, allCCs map[schsdk.CCID]*candidate) error { func (s *DefaultPreScheduler) calcFileScore(files schsdk.JobFilesInfo, allCCs map[schsdk.CCID]*candidate) error {
// 只计算运控返回的可用计算中心上的存储服务的数据权重 // 只计算运控返回的可用计算中心上的存储服务的数据权重
cdsNodeToCC := make(map[int64]*candidate) cdsNodeToCC := make(map[cdssdk.NodeID]*candidate)
for _, cc := range allCCs { for _, cc := range allCCs {
cdsNodeToCC[cc.CC.CDSNodeID] = cc cdsNodeToCC[cc.CC.CDSNodeID] = cc
} }
@ -586,7 +587,7 @@ func (s *DefaultPreScheduler) calcFileScore(files schsdk.JobFilesInfo, allCCs ma
} }
// 计算package在各节点的得分情况 // 计算package在各节点的得分情况
func (s *DefaultPreScheduler) calcPackageFileScore(packageID int64, cdsNodeToCC map[int64]*candidate) (map[schsdk.CCID]*fileDetail, error) { func (s *DefaultPreScheduler) calcPackageFileScore(packageID cdssdk.PackageID, cdsNodeToCC map[cdssdk.NodeID]*candidate) (map[schsdk.CCID]*fileDetail, error) {
colCli, err := schglb.CollectorMQPool.Acquire() colCli, err := schglb.CollectorMQPool.Acquire()
if err != nil { if err != nil {
return nil, fmt.Errorf("new collector client: %w", err) return nil, fmt.Errorf("new collector client: %w", err)
@ -639,7 +640,7 @@ func (s *DefaultPreScheduler) calcPackageFileScore(packageID int64, cdsNodeToCC
} }
// 计算package在各节点的得分情况 // 计算package在各节点的得分情况
func (s *DefaultPreScheduler) calcImageFileScore(imageID schsdk.ImageID, allCCs map[schsdk.CCID]*candidate, cdsNodeToCC map[int64]*candidate) (map[schsdk.CCID]*fileDetail, error) { func (s *DefaultPreScheduler) calcImageFileScore(imageID schsdk.ImageID, allCCs map[schsdk.CCID]*candidate, cdsNodeToCC map[cdssdk.NodeID]*candidate) (map[schsdk.CCID]*fileDetail, error) {
colCli, err := schglb.CollectorMQPool.Acquire() colCli, err := schglb.CollectorMQPool.Acquire()
if err != nil { if err != nil {
return nil, fmt.Errorf("new collector client: %w", err) return nil, fmt.Errorf("new collector client: %w", err)

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler" schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
schglb "gitlink.org.cn/cloudream/scheduler/common/globals" schglb "gitlink.org.cn/cloudream/scheduler/common/globals"
mgrmq "gitlink.org.cn/cloudream/scheduler/common/pkgs/mq/manager" mgrmq "gitlink.org.cn/cloudream/scheduler/common/pkgs/mq/manager"
) )
@ -38,7 +39,7 @@ func (svc *JobSetService) Submit(info schsdk.JobSetInfo) (schsdk.JobSetID, *schs
} }
// 任务集中某个文件上传完成 // 任务集中某个文件上传完成
func (svc *JobSetService) LocalFileUploaded(jobSetID schsdk.JobSetID, localPath string, errMsg string, packageID int64) error { func (svc *JobSetService) LocalFileUploaded(jobSetID schsdk.JobSetID, localPath string, errMsg string, packageID cdssdk.PackageID) error {
mgrCli, err := schglb.ManagerMQPool.Acquire() mgrCli, err := schglb.ManagerMQPool.Acquire()
if err != nil { if err != nil {
return fmt.Errorf("new manager client: %w", err) return fmt.Errorf("new manager client: %w", err)

View File

@ -26,7 +26,7 @@ func (svc *Service) PackageGetCachedStgNodes(msg *colmq.PackageGetCachedStgNodes
return nil, mq.Failed(errorcode.OperationFailed, "get package cached stg nodes failed") return nil, mq.Failed(errorcode.OperationFailed, "get package cached stg nodes failed")
} }
return mq.ReplyOK(colmq.NewPackageGetCachedStgNodesResp(resp.NodeInfos, resp.PackageSize, resp.RedunancyType)) return mq.ReplyOK(colmq.NewPackageGetCachedStgNodesResp(resp.NodeInfos, resp.PackageSize))
} }
func (svc *Service) PackageGetLoadedStgNodes(msg *colmq.PackageGetLoadedStgNodes) (*colmq.PackageGetLoadedStgNodesResp, *mq.CodeMessage) { func (svc *Service) PackageGetLoadedStgNodes(msg *colmq.PackageGetLoadedStgNodes) (*colmq.PackageGetLoadedStgNodesResp, *mq.CodeMessage) {

View File

@ -2,6 +2,7 @@ package jobmod
import ( import (
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler" schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
) )
type NormalJob struct { type NormalJob struct {
@ -35,11 +36,11 @@ type JobFiles struct {
} }
type PackageJobFile struct { type PackageJobFile struct {
PackageID int64 `json:"packageID"` PackageID cdssdk.PackageID `json:"packageID"`
FullPath string `json:"fullPath"` // Load之后的完整文件路径 FullPath string `json:"fullPath"` // Load之后的完整文件路径
} }
type ImageJobFile struct { type ImageJobFile struct {
PackageID *int64 `json:"packageID"` PackageID *cdssdk.PackageID `json:"packageID"`
ImageID schsdk.ImageID `json:"imageID"` ImageID schsdk.ImageID `json:"imageID"`
} }

View File

@ -1,11 +1,14 @@
package jobmod package jobmod
import schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler" import (
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
)
type ResourceJob struct { type ResourceJob struct {
JobBase JobBase
Info schsdk.ResourceJobInfo `json:"info"` Info schsdk.ResourceJobInfo `json:"info"`
ResourcePackageID int64 `json:"resourcePackageID"` // 回源之后得到的PackageID ResourcePackageID cdssdk.PackageID `json:"resourcePackageID"` // 回源之后得到的PackageID
} }
func NewResourceJob(jobSetID schsdk.JobSetID, jobID schsdk.JobID, info schsdk.ResourceJobInfo) *ResourceJob { func NewResourceJob(jobSetID schsdk.JobSetID, jobID schsdk.JobID, info schsdk.ResourceJobInfo) *ResourceJob {

View File

@ -6,6 +6,7 @@ import (
pcmsdk "gitlink.org.cn/cloudream/common/sdks/pcm" pcmsdk "gitlink.org.cn/cloudream/common/sdks/pcm"
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler" schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
uopsdk "gitlink.org.cn/cloudream/common/sdks/unifyops" uopsdk "gitlink.org.cn/cloudream/common/sdks/unifyops"
myreflect "gitlink.org.cn/cloudream/common/utils/reflect" myreflect "gitlink.org.cn/cloudream/common/utils/reflect"
"gitlink.org.cn/cloudream/common/utils/serder" "gitlink.org.cn/cloudream/common/utils/serder"
@ -23,9 +24,9 @@ type ComputingCenter struct {
// 计算中心在PCM系统的ID // 计算中心在PCM系统的ID
PCMParticipantID pcmsdk.ParticipantID `json:"pcmParticipantID" db:"PCMParticipantID"` PCMParticipantID pcmsdk.ParticipantID `json:"pcmParticipantID" db:"PCMParticipantID"`
// 计算中心在存储系统的ID // 计算中心在存储系统的ID
CDSNodeID int64 `json:"cdsNodeID" db:"CDSNodeID"` CDSNodeID cdssdk.NodeID `json:"cdsNodeID" db:"CDSNodeID"`
// 此算力中心的存储服务对应在存储系统中的ID // 此算力中心的存储服务对应在存储系统中的ID
CDSStorageID int64 `json:"cdsStorageID" db:"CDSStorageID"` CDSStorageID cdssdk.StorageID `json:"cdsStorageID" db:"CDSStorageID"`
// 计算中心名称 // 计算中心名称
Name string `json:"name" db:"Name"` Name string `json:"name" db:"Name"`
} }
@ -34,7 +35,7 @@ type Image struct {
// 调度系统内的镜像ID // 调度系统内的镜像ID
ImageID schsdk.ImageID `json:"imageID" db:"ImageID"` ImageID schsdk.ImageID `json:"imageID" db:"ImageID"`
// 镜像文件对应的存储系统PackageID可以为空为空则代表此镜像不可被自动导入到算力中心比如是预制镜像 // 镜像文件对应的存储系统PackageID可以为空为空则代表此镜像不可被自动导入到算力中心比如是预制镜像
CDSPackageID *int64 `json:"cdsPackageID" db:"CDSPackageID"` CDSPackageID *cdssdk.PackageID `json:"cdsPackageID" db:"CDSPackageID"`
// 镜像名称,在调度系统上设置的 // 镜像名称,在调度系统上设置的
Name string `json:"name" db:"Name"` Name string `json:"name" db:"Name"`
// 镜像创建时间 // 镜像创建时间

View File

@ -5,6 +5,7 @@ import (
"github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx"
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler" schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
schmod "gitlink.org.cn/cloudream/scheduler/common/models" schmod "gitlink.org.cn/cloudream/scheduler/common/models"
) )
@ -22,7 +23,7 @@ func (*ImageDB) GetByID(ctx SQLContext, id schsdk.ImageID) (schmod.Image, error)
return ret, err return ret, err
} }
func (*ImageDB) Create(ctx SQLContext, cdsPackageID *int64, name string, createTime time.Time) (schsdk.ImageID, error) { func (*ImageDB) Create(ctx SQLContext, cdsPackageID *cdssdk.PackageID, name string, createTime time.Time) (schsdk.ImageID, error) {
ret, err := ctx.Exec("insert into Image(CDSPackageID, Name, CreateTime) values(?, ?, ?)", cdsPackageID, name, createTime) ret, err := ctx.Exec("insert into Image(CDSPackageID, Name, CreateTime) values(?, ?, ?)", cdsPackageID, name, createTime)
if err != nil { if err != nil {
return 0, err return 0, err

View File

@ -16,26 +16,25 @@ var _ = Register(Service.PackageGetCachedStgNodes)
type PackageGetCachedStgNodes struct { type PackageGetCachedStgNodes struct {
mq.MessageBodyBase mq.MessageBodyBase
UserID int64 `json:"userID"` UserID cdssdk.UserID `json:"userID"`
PackageID int64 `json:"packageID"` PackageID cdssdk.PackageID `json:"packageID"`
} }
type PackageGetCachedStgNodesResp struct { type PackageGetCachedStgNodesResp struct {
mq.MessageBodyBase mq.MessageBodyBase
cdssdk.PackageCachingInfo cdssdk.PackageCachingInfo
} }
func NewPackageGetCachedStgNodes(userID int64, packageID int64) *PackageGetCachedStgNodes { func NewPackageGetCachedStgNodes(userID cdssdk.UserID, packageID cdssdk.PackageID) *PackageGetCachedStgNodes {
return &PackageGetCachedStgNodes{ return &PackageGetCachedStgNodes{
UserID: userID, UserID: userID,
PackageID: packageID, PackageID: packageID,
} }
} }
func NewPackageGetCachedStgNodesResp(nodeInfos []cdssdk.NodePackageCachingInfo, packageSize int64, redunancyType string) *PackageGetCachedStgNodesResp { func NewPackageGetCachedStgNodesResp(nodeInfos []cdssdk.NodePackageCachingInfo, packageSize int64) *PackageGetCachedStgNodesResp {
return &PackageGetCachedStgNodesResp{ return &PackageGetCachedStgNodesResp{
PackageCachingInfo: cdssdk.PackageCachingInfo{ PackageCachingInfo: cdssdk.PackageCachingInfo{
NodeInfos: nodeInfos, NodeInfos: nodeInfos,
PackageSize: packageSize, PackageSize: packageSize,
RedunancyType: redunancyType,
}, },
} }
} }
@ -48,21 +47,21 @@ var _ = Register(Service.PackageGetLoadedStgNodes)
type PackageGetLoadedStgNodes struct { type PackageGetLoadedStgNodes struct {
mq.MessageBodyBase mq.MessageBodyBase
UserID int64 `json:"userID"` UserID cdssdk.UserID `json:"userID"`
PackageID int64 `json:"packageID"` PackageID cdssdk.PackageID `json:"packageID"`
} }
type PackageGetLoadedStgNodesResp struct { type PackageGetLoadedStgNodesResp struct {
mq.MessageBodyBase mq.MessageBodyBase
StgNodeIDs []int64 `json:"stgNodeIDs"` StgNodeIDs []cdssdk.NodeID `json:"stgNodeIDs"`
} }
func NewPackageGetLoadedStgNodes(userID int64, packageID int64) *PackageGetLoadedStgNodes { func NewPackageGetLoadedStgNodes(userID cdssdk.UserID, packageID cdssdk.PackageID) *PackageGetLoadedStgNodes {
return &PackageGetLoadedStgNodes{ return &PackageGetLoadedStgNodes{
UserID: userID, UserID: userID,
PackageID: packageID, PackageID: packageID,
} }
} }
func NewPackageGetLoadedStgNodesResp(nodeIDs []int64) *PackageGetLoadedStgNodesResp { func NewPackageGetLoadedStgNodesResp(nodeIDs []cdssdk.NodeID) *PackageGetLoadedStgNodesResp {
return &PackageGetLoadedStgNodesResp{ return &PackageGetLoadedStgNodesResp{
StgNodeIDs: nodeIDs, StgNodeIDs: nodeIDs,
} }

View File

@ -4,27 +4,25 @@ import cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
type CacheMovePackage struct { type CacheMovePackage struct {
TaskInfoBase TaskInfoBase
UserID int64 `json:"userID"` UserID cdssdk.UserID `json:"userID"`
PackageID int64 `json:"packageID"` PackageID cdssdk.PackageID `json:"packageID"`
StgNodeID int64 `json:"stgNodeID"` StgNodeID cdssdk.NodeID `json:"stgNodeID"`
} }
type CacheMovePackageStatus struct { type CacheMovePackageStatus struct {
TaskStatusBase TaskStatusBase
Error string `json:"error"` Error string `json:"error"`
CacheInfos []cdssdk.ObjectCacheInfo `json:"cacheInfos"`
} }
func NewCacheMovePackage(userID int64, packageID int64, stgNodeID int64) *CacheMovePackage { func NewCacheMovePackage(userID cdssdk.UserID, packageID cdssdk.PackageID, stgNodeID cdssdk.NodeID) *CacheMovePackage {
return &CacheMovePackage{ return &CacheMovePackage{
UserID: userID, UserID: userID,
PackageID: packageID, PackageID: packageID,
StgNodeID: stgNodeID, StgNodeID: stgNodeID,
} }
} }
func NewCacheMovePackageStatus(err string, cacheInfos []cdssdk.ObjectCacheInfo) *CacheMovePackageStatus { func NewCacheMovePackageStatus(err string) *CacheMovePackageStatus {
return &CacheMovePackageStatus{ return &CacheMovePackageStatus{
Error: err, Error: err,
CacheInfos: cacheInfos,
} }
} }

View File

@ -4,31 +4,29 @@ import cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
type StorageCreatePackage struct { type StorageCreatePackage struct {
TaskInfoBase TaskInfoBase
UserID int64 `json:"userID"` UserID cdssdk.UserID `json:"userID"`
StorageID int64 `json:"storageID"` StorageID cdssdk.StorageID `json:"storageID"`
Path string `json:"path"` Path string `json:"path"`
BucketID int64 `json:"bucketID"` BucketID cdssdk.BucketID `json:"bucketID"`
Name string `json:"name"` Name string `json:"name"`
Redundancy cdssdk.TypedRedundancyInfo `json:"redundancy"`
} }
type StorageCreatePackageStatus struct { type StorageCreatePackageStatus struct {
TaskStatusBase TaskStatusBase
Status string `json:"status"` Status string `json:"status"`
Error string `json:"error"` Error string `json:"error"`
PackageID int64 `json:"packageID"` PackageID cdssdk.PackageID `json:"packageID"`
} }
func NewStorageCreatePackage(userID int64, storageID int64, filePath string, bucketID int64, name string, redundancy cdssdk.TypedRedundancyInfo) *StorageCreatePackage { func NewStorageCreatePackage(userID cdssdk.UserID, storageID cdssdk.StorageID, filePath string, bucketID cdssdk.BucketID, name string) *StorageCreatePackage {
return &StorageCreatePackage{ return &StorageCreatePackage{
UserID: userID, UserID: userID,
StorageID: storageID, StorageID: storageID,
Path: filePath, Path: filePath,
BucketID: bucketID, BucketID: bucketID,
Name: name, Name: name,
Redundancy: redundancy,
} }
} }
func NewStorageCreatePackageStatus(status string, err string, packageID int64) *StorageCreatePackageStatus { func NewStorageCreatePackageStatus(status string, err string, packageID cdssdk.PackageID) *StorageCreatePackageStatus {
return &StorageCreatePackageStatus{ return &StorageCreatePackageStatus{
Status: status, Status: status,
Error: err, Error: err,

View File

@ -1,10 +1,12 @@
package task package task
import cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
type StorageLoadPackage struct { type StorageLoadPackage struct {
TaskInfoBase TaskInfoBase
UserID int64 `json:"userID"` UserID cdssdk.UserID `json:"userID"`
PackageID int64 `json:"packageID"` PackageID cdssdk.PackageID `json:"packageID"`
StorageID int64 `json:"storageID"` StorageID cdssdk.StorageID `json:"storageID"`
} }
type StorageLoadPackageStatus struct { type StorageLoadPackageStatus struct {
TaskStatusBase TaskStatusBase
@ -12,7 +14,7 @@ type StorageLoadPackageStatus struct {
FullPath string `json:"fullPath"` FullPath string `json:"fullPath"`
} }
func NewStorageLoadPackage(userID int64, packageID int64, storageID int64) *StorageLoadPackage { func NewStorageLoadPackage(userID cdssdk.UserID, packageID cdssdk.PackageID, storageID cdssdk.StorageID) *StorageLoadPackage {
return &StorageLoadPackage{ return &StorageLoadPackage{
UserID: userID, UserID: userID,
PackageID: packageID, PackageID: packageID,

View File

@ -3,6 +3,7 @@ package manager
import ( import (
"gitlink.org.cn/cloudream/common/pkgs/mq" "gitlink.org.cn/cloudream/common/pkgs/mq"
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler" schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
jobmod "gitlink.org.cn/cloudream/scheduler/common/models/job" jobmod "gitlink.org.cn/cloudream/scheduler/common/models/job"
) )
@ -49,16 +50,16 @@ var _ = Register(Service.JobSetLocalFileUploaded)
type JobSetLocalFileUploaded struct { type JobSetLocalFileUploaded struct {
mq.MessageBodyBase mq.MessageBodyBase
JobSetID schsdk.JobSetID `json:"jobSetID"` JobSetID schsdk.JobSetID `json:"jobSetID"`
LocalPath string `json:"localPath"` LocalPath string `json:"localPath"`
Error string `json:"error"` // 如果上传文件失败,那么这个字段说明了失败原因 Error string `json:"error"` // 如果上传文件失败,那么这个字段说明了失败原因
PackageID int64 `json:"packageID"` // 如果上传文件成功那么这个字段是上传之后得到的PackageID PackageID cdssdk.PackageID `json:"packageID"` // 如果上传文件成功那么这个字段是上传之后得到的PackageID
} }
type JobSetLocalFileUploadedResp struct { type JobSetLocalFileUploadedResp struct {
mq.MessageBodyBase mq.MessageBodyBase
} }
func NewJobSetLocalFileUploaded(jobSetID schsdk.JobSetID, localPath string, err string, packageID int64) *JobSetLocalFileUploaded { func NewJobSetLocalFileUploaded(jobSetID schsdk.JobSetID, localPath string, err string, packageID cdssdk.PackageID) *JobSetLocalFileUploaded {
return &JobSetLocalFileUploaded{ return &JobSetLocalFileUploaded{
JobSetID: jobSetID, JobSetID: jobSetID,
LocalPath: localPath, LocalPath: localPath,

View File

@ -7,10 +7,11 @@ import (
"time" "time"
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler" schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
) )
func MakeJobOutputFullPath(stgDir string, userID int64, jobID schsdk.JobID) string { func MakeJobOutputFullPath(stgDir string, userID cdssdk.UserID, jobID schsdk.JobID) string {
return filepath.Join(stgDir, strconv.FormatInt(userID, 10), "jobs", string(jobID), "output") return filepath.Join(stgDir, strconv.FormatInt(int64(userID), 10), "jobs", string(jobID), "output")
} }
func MakeResourcePackageName(jobID schsdk.JobID) string { func MakeResourcePackageName(jobID schsdk.JobID) string {

View File

@ -26,11 +26,11 @@ func (t *CacheMovePackage) Execute(task *task.Task[TaskContext], ctx TaskContext
log.Debugf("begin with %v", logger.FormatStruct(t.CacheMovePackage)) log.Debugf("begin with %v", logger.FormatStruct(t.CacheMovePackage))
defer log.Debugf("end") defer log.Debugf("end")
cacheInfos, err := t.do(ctx) err := t.do(ctx)
if err != nil { if err != nil {
ctx.reporter.Report(task.ID(), exectsk.NewCacheMovePackageStatus(err.Error(), cacheInfos)) ctx.reporter.Report(task.ID(), exectsk.NewCacheMovePackageStatus(err.Error()))
} else { } else {
ctx.reporter.Report(task.ID(), exectsk.NewCacheMovePackageStatus("", cacheInfos)) ctx.reporter.Report(task.ID(), exectsk.NewCacheMovePackageStatus(""))
} }
ctx.reporter.ReportNow() ctx.reporter.ReportNow()
@ -39,23 +39,23 @@ func (t *CacheMovePackage) Execute(task *task.Task[TaskContext], ctx TaskContext
}) })
} }
func (t *CacheMovePackage) do(ctx TaskContext) ([]cdssdk.ObjectCacheInfo, error) { func (t *CacheMovePackage) do(ctx TaskContext) error {
stgCli, err := schglb.CloudreamStoragePool.Acquire() stgCli, err := schglb.CloudreamStoragePool.Acquire()
if err != nil { if err != nil {
return nil, fmt.Errorf("new cloudream storage client: %w", err) return fmt.Errorf("new cloudream storage client: %w", err)
} }
defer schglb.CloudreamStoragePool.Release(stgCli) defer schglb.CloudreamStoragePool.Release(stgCli)
resp, err := stgCli.CacheMovePackage(cdssdk.CacheMovePackageReq{ _, err = stgCli.CacheMovePackage(cdssdk.CacheMovePackageReq{
UserID: t.UserID, UserID: t.UserID,
PackageID: t.PackageID, PackageID: t.PackageID,
NodeID: t.StgNodeID, NodeID: t.StgNodeID,
}) })
if err != nil { if err != nil {
return nil, err return err
} }
return resp.CacheInfos, err return err
} }
func init() { func init() {

View File

@ -46,12 +46,11 @@ func (t *StorageCreatePackage) do(taskID string, ctx TaskContext) error {
defer schglb.CloudreamStoragePool.Release(stgCli) defer schglb.CloudreamStoragePool.Release(stgCli)
resp, err := stgCli.StorageCreatePackage(cdssdk.StorageCreatePackageReq{ resp, err := stgCli.StorageCreatePackage(cdssdk.StorageCreatePackageReq{
UserID: t.UserID, UserID: t.UserID,
StorageID: t.StorageID, StorageID: t.StorageID,
Path: t.Path, Path: t.Path,
BucketID: t.BucketID, BucketID: t.BucketID,
Name: t.Name, Name: t.Name,
Redundancy: t.Redundancy,
}) })
if err != nil { if err != nil {
return err return err

View File

@ -55,7 +55,7 @@ func (h *AdjustingHandler) Handle(job jobmod.Job) {
colCli, err := schglb.CollectorMQPool.Acquire() colCli, err := schglb.CollectorMQPool.Acquire()
if err != nil { if err != nil {
h.changeJobState(job, jobmod.NewStateFailed(fmt.Sprintf("new collector client: %s", err), job.GetState())) h.changeJobState(job, jobmod.NewStateFailed(fmt.Sprintf("new collector client: %s", err.Error()), job.GetState()))
return return
} }
defer schglb.CollectorMQPool.Release(colCli) defer schglb.CollectorMQPool.Release(colCli)
@ -68,7 +68,7 @@ func (h *AdjustingHandler) Handle(job jobmod.Job) {
stgCli, err := schglb.CloudreamStoragePool.Acquire() stgCli, err := schglb.CloudreamStoragePool.Acquire()
if err != nil { if err != nil {
h.changeJobState(job, jobmod.NewStateFailed(fmt.Sprintf("new cloudream storage client: %s", err), job.GetState())) h.changeJobState(job, jobmod.NewStateFailed(fmt.Sprintf("new cloudream storage client: %s", err.Error()), job.GetState()))
return return
} }
defer schglb.CloudreamStoragePool.Release(stgCli) defer schglb.CloudreamStoragePool.Release(stgCli)
@ -77,7 +77,7 @@ func (h *AdjustingHandler) Handle(job jobmod.Job) {
StorageID: ccInfo.CDSStorageID, StorageID: ccInfo.CDSStorageID,
}) })
if err != nil { if err != nil {
h.changeJobState(job, jobmod.NewStateFailed(fmt.Sprintf("getting cloudream storage info: %s", err), job.GetState())) h.changeJobState(job, jobmod.NewStateFailed(fmt.Sprintf("getting cloudream storage info: %s", err.Error()), job.GetState()))
return return
} }
@ -277,11 +277,22 @@ func (h *AdjustingHandler) doImageScheduling(evt event.Event, job *adjustingJob,
return fmt.Errorf("cache move pacakge: %s", cacheMoveRet.Error) return fmt.Errorf("cache move pacakge: %s", cacheMoveRet.Error)
} }
if len(cacheMoveRet.CacheInfos) != 1 { stgCli, err := schglb.CloudreamStoragePool.Acquire()
if err != nil {
return fmt.Errorf("new cloudream storage client: %w", err)
}
defer schglb.CloudreamStoragePool.Release(stgCli)
pkgObjs, err := stgCli.ObjectGetPackageObjects(cdssdk.ObjectGetPackageObjectsReq{UserID: 0, PackageID: *file.PackageID})
if err != nil {
return fmt.Errorf("getting package objects: %w", err)
}
if len(pkgObjs.Objects) != 1 {
return fmt.Errorf("there must be only 1 object in the package that will be imported") return fmt.Errorf("there must be only 1 object in the package that will be imported")
} }
fullTaskID, err := h.mgr.execMgr.StartTask(job.job.JobID, exectsk.NewUploadImage(job.ccInfo.PCMParticipantID, cdssdk.MakeIPFSFilePath(cacheMoveRet.CacheInfos[0].FileHash))) fullTaskID, err := h.mgr.execMgr.StartTask(job.job.JobID, exectsk.NewUploadImage(job.ccInfo.PCMParticipantID, cdssdk.MakeIPFSFilePath(pkgObjs.Objects[0].FileHash)))
if err != nil { if err != nil {
return fmt.Errorf("starting import image: %w", err) return fmt.Errorf("starting import image: %w", err)
} }

View File

@ -1,16 +1,19 @@
package event package event
import schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler" import (
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
)
// 本地文件上传结束 // 本地文件上传结束
type LocalFileUploaded struct { type LocalFileUploaded struct {
JobSetID schsdk.JobSetID JobSetID schsdk.JobSetID
LocalPath string LocalPath string
Error string Error string
PackageID int64 PackageID cdssdk.PackageID
} }
func NewLocalFileUploaded(jobSetID schsdk.JobSetID, localPath string, err string, packageID int64) *LocalFileUploaded { func NewLocalFileUploaded(jobSetID schsdk.JobSetID, localPath string, err string, packageID cdssdk.PackageID) *LocalFileUploaded {
return &LocalFileUploaded{ return &LocalFileUploaded{
JobSetID: jobSetID, JobSetID: jobSetID,
LocalPath: localPath, LocalPath: localPath,

View File

@ -186,7 +186,6 @@ func (h *ExecutingHandler) onResourceJobEvent(evt event.Event, job *executingJob
tarNorJob.OutputFullPath, tarNorJob.OutputFullPath,
resJob.Info.BucketID, resJob.Info.BucketID,
utils.MakeResourcePackageName(resJob.JobID), utils.MakeResourcePackageName(resJob.JobID),
resJob.Info.Redundancy,
)) ))
if err != nil { if err != nil {
h.changeJobState(job.job, jobmod.NewStateFailed(err.Error(), job.state)) h.changeJobState(job.job, jobmod.NewStateFailed(err.Error(), job.state))

View File

@ -9,6 +9,7 @@ import (
"gitlink.org.cn/cloudream/common/pkgs/logger" "gitlink.org.cn/cloudream/common/pkgs/logger"
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler" schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
myreflect "gitlink.org.cn/cloudream/common/utils/reflect" myreflect "gitlink.org.cn/cloudream/common/utils/reflect"
jobmod "gitlink.org.cn/cloudream/scheduler/common/models/job" jobmod "gitlink.org.cn/cloudream/scheduler/common/models/job"
"gitlink.org.cn/cloudream/scheduler/common/pkgs/db" "gitlink.org.cn/cloudream/scheduler/common/pkgs/db"
@ -170,7 +171,7 @@ func (m *Manager) SubmitJobSet(jobSetInfo schsdk.JobSetInfo, preScheduleScheme j
return jobSet, nil return jobSet, nil
} }
func (m *Manager) LocalFileUploaded(jobSetID schsdk.JobSetID, localPath string, err string, packageID int64) error { func (m *Manager) LocalFileUploaded(jobSetID schsdk.JobSetID, localPath string, err string, packageID cdssdk.PackageID) error {
m.pubLock.Lock() m.pubLock.Lock()
defer m.pubLock.Unlock() defer m.pubLock.Unlock()

View File

@ -345,15 +345,26 @@ func (h *PreSchedulingHandler) doImageScheduling(evt event.Event, job *preSchedu
return fmt.Errorf("cache move pacakge: %s", cacheMoveRet.Error) return fmt.Errorf("cache move pacakge: %s", cacheMoveRet.Error)
} }
if len(cacheMoveRet.CacheInfos) == 0 { stgCli, err := schglb.CloudreamStoragePool.Acquire()
if err != nil {
return fmt.Errorf("new cloudream storage client: %w", err)
}
defer schglb.CloudreamStoragePool.Release(stgCli)
pkgObjs, err := stgCli.ObjectGetPackageObjects(cdssdk.ObjectGetPackageObjectsReq{UserID: 0, PackageID: *file.PackageID})
if err != nil {
return fmt.Errorf("getting package objects: %w", err)
}
if len(pkgObjs.Objects) == 0 {
return fmt.Errorf("no object in the package which will be imported") return fmt.Errorf("no object in the package which will be imported")
} }
if len(cacheMoveRet.CacheInfos) > 1 { if len(pkgObjs.Objects) > 1 {
return fmt.Errorf("there must be only 1 object in the package which will be imported") return fmt.Errorf("there must be only 1 object in the package which will be imported")
} }
fullTaskID, err := h.mgr.execMgr.StartTask(job.job.JobID, exectsk.NewUploadImage(job.ccInfo.PCMParticipantID, cdssdk.MakeIPFSFilePath(cacheMoveRet.CacheInfos[0].FileHash))) fullTaskID, err := h.mgr.execMgr.StartTask(job.job.JobID, exectsk.NewUploadImage(job.ccInfo.PCMParticipantID, cdssdk.MakeIPFSFilePath(pkgObjs.Objects[0].FileHash)))
if err != nil { if err != nil {
return fmt.Errorf("starting import image: %w", err) return fmt.Errorf("starting import image: %w", err)
} }