58 lines
1.5 KiB
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{}
|
|
}
|