68 lines
2.3 KiB
Go
68 lines
2.3 KiB
Go
package mq
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"gitlink.org.cn/cloudream/common/consts/errorcode"
|
|
"gitlink.org.cn/cloudream/common/pkgs/logger"
|
|
"gitlink.org.cn/cloudream/common/pkgs/mq"
|
|
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
|
|
mgrmq "gitlink.org.cn/cloudream/scheduler/common/pkgs/mq/manager"
|
|
"gitlink.org.cn/cloudream/scheduler/manager/internal/jobmgr"
|
|
"gitlink.org.cn/cloudream/scheduler/manager/internal/jobmgr/event"
|
|
"gitlink.org.cn/cloudream/scheduler/manager/internal/jobmgr/job"
|
|
"gitlink.org.cn/cloudream/scheduler/manager/internal/jobmgr/job/state"
|
|
)
|
|
|
|
// 提交任务集
|
|
func (svc *Service) SubmitJobSet(msg *mgrmq.SubmitJobSet) (*mgrmq.SubmitJobSetResp, *mq.CodeMessage) {
|
|
logger.Debugf("submitting job")
|
|
|
|
var jobs []jobmgr.SubmittingJob
|
|
for _, jobInfo := range msg.JobSet.Jobs {
|
|
switch info := jobInfo.(type) {
|
|
case *schsdk.NormalJobInfo:
|
|
job := job.NewNormalJob(*info)
|
|
|
|
preSch, ok := msg.PreScheduleScheme.JobSchemes[info.LocalJobID]
|
|
if !ok {
|
|
return nil, mq.Failed(errorcode.OperationFailed, fmt.Sprintf("pre schedule scheme for job %s is not found", info.LocalJobID))
|
|
}
|
|
|
|
jobs = append(jobs, jobmgr.SubmittingJob{
|
|
Body: job,
|
|
InitState: state.NewPreSchuduling(preSch),
|
|
})
|
|
|
|
case *schsdk.DataReturnJobInfo:
|
|
job := job.NewResourceJob(*info)
|
|
jobs = append(jobs, jobmgr.SubmittingJob{
|
|
Body: job,
|
|
InitState: state.NewWaitTargetComplete(),
|
|
})
|
|
}
|
|
}
|
|
|
|
return mq.ReplyOK(mgrmq.NewSubmitJobSetResp(svc.jobMgr.SubmitJobSet(jobs)))
|
|
}
|
|
|
|
// 任务集中某个文件上传完成
|
|
func (svc *Service) JobSetLocalFileUploaded(msg *mgrmq.JobSetLocalFileUploaded) (*mgrmq.JobSetLocalFileUploadedResp, *mq.CodeMessage) {
|
|
logger.WithField("LocalPath", msg.LocalPath).
|
|
WithField("PackageID", msg.PackageID).
|
|
Debugf("local file uploaded")
|
|
|
|
svc.jobMgr.BroadcastEvent(msg.JobSetID, event.NewLocalFileUploaded(msg.LocalPath, errors.New(msg.Error), msg.PackageID))
|
|
return mq.ReplyOK(mgrmq.NewJobSetLocalFileUploadedResp())
|
|
}
|
|
|
|
func (svc *Service) GetJobSetStatus(msg *mgrmq.GetJobSetStatus) (*mgrmq.GetJobSetStatusResp, *mq.CodeMessage) {
|
|
jobs := svc.jobMgr.DumpJobSet(msg.JobSetID)
|
|
if len(jobs) == 0 {
|
|
return nil, mq.Failed(errorcode.OperationFailed, "job set not found")
|
|
}
|
|
|
|
return mq.ReplyOK(mgrmq.RespGetJobSetStatus(jobs))
|
|
}
|