package scheduler import "context" // Scheduler 三层编排器——串联 TaskGenerator → ConstraintFilter → PolicyEngine。 // 骨架阶段:只定义接口和编排流程,不直接修改 processor 包。 // 后续阶段:processor 包的 JobRuntime 将通过此 Scheduler 替代直接调用 Dispatcher。 type Scheduler struct { generator TaskGenerator filter ConstraintFilter policy PolicyEngine } func NewScheduler(g TaskGenerator, f ConstraintFilter, p PolicyEngine) *Scheduler { return &Scheduler{ generator: g, filter: f, policy: p, } } // ScheduleAll 对多个 Job 执行三层调度,合并结果后排序。 // 用于全局调度场景(如收到 MachineTaskComplete 信号后重新评估所有 Job)。 func (s *Scheduler) ScheduleAll(ctx context.Context, jobs []JobView, state SystemState) []CandidateTask { var allCandidates []CandidateTask for _, job := range jobs { candidates := s.generator.Generate(job) allCandidates = append(allCandidates, candidates...) } if len(allCandidates) == 0 { return nil } feasible := s.filter.Filter(ctx, allCandidates, state) if len(feasible) == 0 { return nil } return s.policy.Rank(feasible, state) } // DefaultScheduler 创建默认配置的 Scheduler。 // 使用 RecipeTaskGenerator + 所有内置约束 + 默认优先级策略。 func DefaultScheduler() *Scheduler { generator := NewRecipeTaskGenerator() filter := NewCompositeFilter( NewMachineDisabledConstraint(), NewMachineBusyConstraint(), NewMachineEmptyConstraint(), NewTempSlotFullConstraint(), NewOrderPausedConstraint(), NewOrderPausingConstraint(), NewOrderCancellingConstraint(), NewJobSuspendedConstraint(), NewExchangePairConstraint(), NewReplenishConstraint(), NewWasteReadyConstraint(), ) policy := NewPriorityPolicy( UnloadFirstRule, SamplingFirstRule, LaterStageUnloadFirstRule, IdleMachineLoadFirstRule, LaterStageLoadFirstRule, ExchangeFirstRule, BasePriorityRule, JobIDSmallerFirstRule, SameMachineRule, ) return NewScheduler(generator, filter, policy) }