in pkg/plugin/scheduler_plugin.go [142:177]
func (sp *YuniKornSchedulerPlugin) PreFilter(_ context.Context, _ *framework.CycleState, pod *v1.Pod) (*framework.PreFilterResult, *framework.Status) {
log.Log(log.ShimSchedulerPlugin).Debug("PreFilter check",
zap.String("namespace", pod.Namespace),
zap.String("pod", pod.Name))
// we don't process pods without appID defined
appID := utils.GetApplicationIDFromPod(pod)
if appID == "" {
log.Log(log.ShimSchedulerPlugin).Debug("Releasing non-managed Pod for scheduling (PreFilter phase)",
zap.String("namespace", pod.Namespace),
zap.String("pod", pod.Name))
return nil, framework.NewStatus(framework.Skip)
}
taskID := string(pod.UID)
if app, task, ok := sp.getTask(appID, taskID); ok {
if _, ok := sp.context.GetInProgressPodAllocation(taskID); ok {
// pod must have failed scheduling, reject it and return unschedulable
sp.failTask(pod, app, task)
return nil, framework.NewStatus(framework.UnschedulableAndUnresolvable, "Pod is not ready for scheduling")
}
nodeID, ok := sp.context.GetPendingPodAllocation(taskID)
if task.GetTaskState() == cache.TaskStates().Bound && ok {
log.Log(log.ShimSchedulerPlugin).Info("Releasing pod for scheduling (PreFilter phase)",
zap.String("namespace", pod.Namespace),
zap.String("pod", pod.Name),
zap.String("taskID", taskID),
zap.String("assignedNode", nodeID))
return &framework.PreFilterResult{NodeNames: sets.NewString(nodeID)}, nil
}
}
return nil, framework.NewStatus(framework.UnschedulableAndUnresolvable, "Pod is not ready for scheduling")
}