JCC-CSScheduler/manager/internal/jobmgr/job/state/making_adjust_scheme.go

62 lines
1.6 KiB
Go

package state
import (
"context"
"fmt"
jobmod "gitlink.org.cn/cloudream/scheduler/common/models/job"
advtsk "gitlink.org.cn/cloudream/scheduler/common/pkgs/mq/advisor/task"
"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 MakingAdjustScheme struct {
}
func NewMakeingAdjustScheme() *MakingAdjustScheme {
return &MakingAdjustScheme{}
}
func (s *MakingAdjustScheme) Run(rtx jobmgr.JobStateRunContext, jo *jobmgr.Job) {
scheme, err := s.do(rtx, jo.Body.(*job.NormalJob))
if err != nil {
rtx.Mgr.ChangeState(jo, FailureComplete(err))
} else {
rtx.Mgr.ChangeState(jo, NewAdjusting(*scheme))
}
}
func (s *MakingAdjustScheme) do(rtx jobmgr.JobStateRunContext, norJob *job.NormalJob) (*jobmod.JobScheduleScheme, error) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
go func() {
event.WaitType[event.Cancel](ctx, rtx.EventSet)
cancel()
}()
wt := rtx.Mgr.AdvMgr.StartTask(advtsk.NewMakeAdjustScheme(norJob.Info, jobmod.NormalJobStatus{
TargetCCID: norJob.TargetCCID,
Files: norJob.Files,
}))
defer wt.Close()
status, err := wt.Receive(ctx)
if err != nil {
return nil, fmt.Errorf("making adjust scheme: %w", err)
}
mkStatus := status.(*advtsk.MakeAdjustSchemeStatus)
if mkStatus.Error != "" {
return nil, fmt.Errorf("making adjust scheme: %s", mkStatus.Error)
}
return &mkStatus.Scheme, nil
}
func (s *MakingAdjustScheme) Dump(rtx jobmgr.JobStateRunContext, jo *jobmgr.Job) jobmod.JobStateStatus {
// TODO
return nil
}