101 lines
2.9 KiB
Go
101 lines
2.9 KiB
Go
package jobmod
|
|
|
|
import (
|
|
"github.com/samber/lo"
|
|
"gitlink.org.cn/cloudream/common/pkgs/mq"
|
|
"gitlink.org.cn/cloudream/common/pkgs/types"
|
|
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
|
|
uopsdk "gitlink.org.cn/cloudream/common/sdks/unifyops"
|
|
)
|
|
|
|
type FileScheduleAction string
|
|
|
|
// 文件调度方案
|
|
const (
|
|
ActionNo FileScheduleAction = "No" // 不需要操作
|
|
ActionMove FileScheduleAction = "Move" // 需要在指定节点上建立缓存
|
|
ActionLoad FileScheduleAction = "Load" // 需要加载到Storage
|
|
ActionImportImage FileScheduleAction = "ImportImage" // 需要导入镜像
|
|
)
|
|
|
|
type FileScheduleScheme struct {
|
|
Action FileScheduleAction `json:"action"`
|
|
}
|
|
|
|
// 任务调度方案
|
|
type JobScheduleScheme struct {
|
|
TargetSlwNodeID uopsdk.SlwNodeID `json:"targetSlwNodeID"`
|
|
Dataset FileScheduleScheme `json:"dataset"`
|
|
Code FileScheduleScheme `json:"code"`
|
|
Image FileScheduleScheme `json:"image"`
|
|
}
|
|
|
|
// 任务集的预调度方案
|
|
type JobSetPreScheduleScheme struct {
|
|
JobSchemes map[string]JobScheduleScheme `json:"jobSchemes"` // 任务的预调度方案。Key为LocalJobID
|
|
}
|
|
|
|
// 任务集
|
|
type JobSet struct {
|
|
JobSetID schsdk.JobSetID `json:"jobSetID"` // 全局唯一的任务集ID
|
|
JobRefs []JobSetJobRef `json:"jobRefs"` // 任务集中包含的任务,只是一个引用
|
|
PreScheduleScheme JobSetPreScheduleScheme `json:"preScheduleScheme"`
|
|
}
|
|
type JobSetJobRef struct {
|
|
JobID schsdk.JobID `json:"jobID"` // 任务ID
|
|
LocalJobID string `json:"localJobID"` // 在当前任务集内的任务ID
|
|
}
|
|
|
|
func NewJobSet(jobSetID schsdk.JobSetID, jobRefs []JobSetJobRef, preScheduleScheme JobSetPreScheduleScheme) *JobSet {
|
|
return &JobSet{
|
|
JobSetID: jobSetID,
|
|
JobRefs: jobRefs,
|
|
PreScheduleScheme: preScheduleScheme,
|
|
}
|
|
}
|
|
|
|
func (j *JobSet) FindRefByLocalJobID(localJobID string) *JobSetJobRef {
|
|
ref, ok := lo.Find(j.JobRefs, func(item JobSetJobRef) bool { return item.LocalJobID == localJobID })
|
|
if !ok {
|
|
return nil
|
|
}
|
|
|
|
return &ref
|
|
}
|
|
|
|
// 任务
|
|
type Job interface {
|
|
GetJobSetID() schsdk.JobSetID
|
|
GetJobID() schsdk.JobID
|
|
GetState() JobState
|
|
SetState(state JobState)
|
|
Clone() Job
|
|
}
|
|
|
|
var JobTypeUnion = types.NewTypeUnion[Job](
|
|
(*NormalJob)(nil),
|
|
(*ResourceJob)(nil),
|
|
)
|
|
var _ = mq.RegisterUnionType(JobTypeUnion)
|
|
|
|
// TODO var _ = serder.RegisterNewTaggedTypeUnion(JobTypeUnion, "Type", "type")
|
|
|
|
type JobBase struct {
|
|
JobSetID schsdk.JobSetID `json:"jobSetID"` // 任务集ID
|
|
JobID schsdk.JobID `json:"jobID"` // 全局唯一任务ID
|
|
State JobState `json:"state"` // 任务当前的状态。包含当前在状态下执行操作所需的数据
|
|
}
|
|
|
|
func (j *JobBase) GetJobSetID() schsdk.JobSetID {
|
|
return j.JobSetID
|
|
}
|
|
func (j *JobBase) GetJobID() schsdk.JobID {
|
|
return j.JobID
|
|
}
|
|
func (j *JobBase) GetState() JobState {
|
|
return j.State
|
|
}
|
|
func (j *JobBase) SetState(state JobState) {
|
|
j.State = state
|
|
}
|