2023-09-04 09:51:20 +08:00
|
|
|
|
package task
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"fmt"
|
|
|
|
|
|
"gitlink.org.cn/cloudream/common/pkgs/logger"
|
2024-08-09 17:42:10 +08:00
|
|
|
|
pcmsdk "gitlink.org.cn/cloudream/common/sdks/pcm"
|
2023-09-21 10:44:26 +08:00
|
|
|
|
schglb "gitlink.org.cn/cloudream/scheduler/common/globals"
|
2023-09-04 09:51:20 +08:00
|
|
|
|
exectsk "gitlink.org.cn/cloudream/scheduler/common/pkgs/mq/executor/task"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2023-11-03 11:18:01 +08:00
|
|
|
|
type PCMSubmitTask struct {
|
|
|
|
|
|
*exectsk.SubmitTask
|
2023-09-04 09:51:20 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-11-03 11:18:01 +08:00
|
|
|
|
func NewPCMSubmitTask(info *exectsk.SubmitTask) *PCMSubmitTask {
|
|
|
|
|
|
return &PCMSubmitTask{
|
|
|
|
|
|
SubmitTask: info,
|
2023-09-04 09:51:20 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-08-09 17:42:10 +08:00
|
|
|
|
func (t *PCMSubmitTask) Execute(task *Task, ctx TaskContext) {
|
2023-11-03 11:18:01 +08:00
|
|
|
|
log := logger.WithType[PCMSubmitTask]("Task")
|
|
|
|
|
|
log.Debugf("begin with %v", logger.FormatStruct(t.SubmitTask))
|
2023-09-04 09:51:20 +08:00
|
|
|
|
defer log.Debugf("end")
|
|
|
|
|
|
|
2024-09-03 16:51:24 +08:00
|
|
|
|
err := t.do(task, ctx)
|
2023-09-04 16:48:46 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
//TODO 若任务失败,上报的状态failed字段根据情况修改
|
2024-08-09 17:42:10 +08:00
|
|
|
|
task.SendStatus(exectsk.NewSubmitTaskStatus("failed", err.Error()))
|
|
|
|
|
|
} else {
|
|
|
|
|
|
task.SendStatus(exectsk.NewSubmitTaskStatus("succeeded", ""))
|
2023-09-04 16:48:46 +08:00
|
|
|
|
}
|
2023-09-04 09:51:20 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-08-09 17:42:10 +08:00
|
|
|
|
func (t *PCMSubmitTask) do(task *Task, ctx TaskContext) error {
|
2024-06-07 16:18:07 +08:00
|
|
|
|
log := logger.WithType[PCMSubmitTask]("Task")
|
|
|
|
|
|
|
2023-09-21 10:44:26 +08:00
|
|
|
|
pcmCli, err := schglb.PCMPool.Acquire()
|
2023-09-04 09:51:20 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return fmt.Errorf("new pcm client: %w", err)
|
|
|
|
|
|
}
|
2023-09-26 09:59:01 +08:00
|
|
|
|
defer schglb.PCMPool.Release(pcmCli)
|
2023-09-04 09:51:20 +08:00
|
|
|
|
|
2023-11-02 11:22:13 +08:00
|
|
|
|
resp, err := pcmCli.SubmitTask(pcmsdk.SubmitTaskReq{
|
2023-11-06 16:31:50 +08:00
|
|
|
|
PartID: t.PCMParticipantID,
|
|
|
|
|
|
ImageID: t.PCMImageID,
|
|
|
|
|
|
ResourceID: t.PCMResourceID,
|
2023-11-03 11:18:01 +08:00
|
|
|
|
CMD: t.CMD,
|
|
|
|
|
|
Envs: t.Envs,
|
2024-06-05 15:43:17 +08:00
|
|
|
|
Params: t.Params,
|
2023-09-04 09:51:20 +08:00
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-06-07 16:18:07 +08:00
|
|
|
|
log.Infof("pcm submit task success, task id: %v", resp.TaskID)
|
|
|
|
|
|
|
2023-11-03 11:18:01 +08:00
|
|
|
|
var prevStatus pcmsdk.TaskStatus
|
2024-06-07 16:18:07 +08:00
|
|
|
|
retryCount := 0
|
2023-09-04 09:51:20 +08:00
|
|
|
|
for {
|
2023-11-02 11:22:13 +08:00
|
|
|
|
tsResp, err := pcmCli.GetTask(pcmsdk.GetTaskReq{
|
2023-11-06 16:31:50 +08:00
|
|
|
|
PartID: t.PCMParticipantID,
|
2023-11-02 11:22:13 +08:00
|
|
|
|
TaskID: resp.TaskID,
|
2023-09-04 09:51:20 +08:00
|
|
|
|
})
|
|
|
|
|
|
if err != nil {
|
2024-06-07 16:18:07 +08:00
|
|
|
|
retryCount++
|
|
|
|
|
|
if retryCount > 3 {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
continue
|
2023-09-04 09:51:20 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-11-02 11:22:13 +08:00
|
|
|
|
if tsResp.TaskStatus != prevStatus {
|
2024-08-09 17:42:10 +08:00
|
|
|
|
task.SendStatus(exectsk.NewSubmitTaskStatus(tsResp.TaskStatus, ""))
|
2023-09-04 11:25:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-11-02 11:22:13 +08:00
|
|
|
|
prevStatus = tsResp.TaskStatus
|
2023-09-04 11:25:33 +08:00
|
|
|
|
|
|
|
|
|
|
// 根据返回的result判定任务是否完成,若完成 跳出循环,结束任务
|
2024-06-06 14:26:19 +08:00
|
|
|
|
if tsResp.TaskStatus == "succeeded" || tsResp.TaskStatus == "Completed" {
|
2023-09-04 11:25:33 +08:00
|
|
|
|
return nil
|
|
|
|
|
|
}
|
2023-11-03 11:18:01 +08:00
|
|
|
|
|
2024-04-26 09:27:10 +08:00
|
|
|
|
if tsResp.TaskStatus == pcmsdk.TaskStatusFailed {
|
2023-11-03 11:18:01 +08:00
|
|
|
|
// TODO 返回更详细的信息
|
|
|
|
|
|
return fmt.Errorf("task failed")
|
|
|
|
|
|
}
|
2023-09-04 09:51:20 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2023-09-13 10:43:12 +08:00
|
|
|
|
|
|
|
|
|
|
func init() {
|
2023-11-03 11:18:01 +08:00
|
|
|
|
Register(NewPCMSubmitTask)
|
2023-09-13 10:43:12 +08:00
|
|
|
|
}
|