76 lines
2.0 KiB
Go
76 lines
2.0 KiB
Go
package state
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
|
|
jobmod "gitlink.org.cn/cloudream/scheduler/common/models/job"
|
|
"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"
|
|
)
|
|
|
|
type ReadyToAdjust struct {
|
|
}
|
|
|
|
func NewReadyToAdjust() *ReadyToAdjust {
|
|
return &ReadyToAdjust{}
|
|
}
|
|
|
|
func (s *ReadyToAdjust) Run(rtx jobmgr.JobStateRunContext, jo *jobmgr.Job) {
|
|
err := s.do(rtx, jo)
|
|
if err != nil {
|
|
rtx.Mgr.ChangeState(jo, FailureComplete(err))
|
|
} else {
|
|
rtx.Mgr.ChangeState(jo, NewMakeingAdjustScheme())
|
|
}
|
|
}
|
|
|
|
func (s *ReadyToAdjust) do(rtx jobmgr.JobStateRunContext, jo *jobmgr.Job) error {
|
|
var jobFilesInfo schsdk.JobFilesInfo
|
|
var jobFiles *jobmod.JobFiles
|
|
|
|
switch runningJob := jo.Body.(type) {
|
|
case *job.NormalJob:
|
|
jobFilesInfo = runningJob.Info.Files
|
|
jobFiles = &runningJob.Files
|
|
case *job.InstanceJob:
|
|
jobFilesInfo = runningJob.Info.Files
|
|
jobFiles = &runningJob.Files
|
|
}
|
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
|
|
// 监听取消事件
|
|
go func() {
|
|
event.WaitType[*event.Cancel](ctx, rtx.EventSet)
|
|
cancel()
|
|
}()
|
|
|
|
if rt, ok := jobFilesInfo.Dataset.(*schsdk.DataReturnJobFileInfo); ok {
|
|
evt, ok := event.WaitTypeAnd[*event.JobCompleted](ctx, rtx.EventSet, func(val *event.JobCompleted) bool {
|
|
return val.Job.GetInfo().GetLocalJobID() == rt.DataReturnLocalJobID
|
|
})
|
|
if !ok {
|
|
return jobmgr.ErrJobCancelled
|
|
}
|
|
if evt.Err != nil {
|
|
return fmt.Errorf("depended job %s was failed", evt.Job.JobID)
|
|
}
|
|
rtJob, ok := evt.Job.Body.(*job.DataReturnJob)
|
|
if !ok {
|
|
return fmt.Errorf("job %s is not a DataReturn job(which is %T)", evt.Job.JobID, evt.Job)
|
|
}
|
|
|
|
jobFiles.Dataset.PackageID = rtJob.DataReturnPackageID
|
|
jobFiles.Dataset.ECSInstanceID = rtJob.ECSInstanceID
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (s *ReadyToAdjust) Dump(rtx jobmgr.JobStateRunContext, jo *jobmgr.Job) jobmod.JobStateDump {
|
|
return &jobmod.ReadyToAdjustDump{}
|
|
}
|