func()

in pkg/plugin/scheduler_plugin.go [141:176]


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.New[string](nodeID)}, nil
		}
	}

	return nil, framework.NewStatus(framework.UnschedulableAndUnresolvable, "Pod is not ready for scheduling")
}