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

58 lines
1.5 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"
)
type MakingAdjustScheme struct {
}
func NewMakeingAdjustScheme() *MakingAdjustScheme {
return &MakingAdjustScheme{}
}
func (s *MakingAdjustScheme) Run(rtx jobmgr.JobStateRunContext, jo *jobmgr.Job) {
scheme, err := s.do(rtx, jo)
if err != nil {
rtx.Mgr.ChangeState(jo, FailureComplete(err))
} else {
rtx.Mgr.ChangeState(jo, NewAdjusting(*scheme))
}
}
func (s *MakingAdjustScheme) do(rtx jobmgr.JobStateRunContext, jo *jobmgr.Job) (*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(jo.Dump(rtx, jo, s)))
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.JobStateDump {
return &jobmod.MakeingAdjustSchemeDump{}
}