in pkg/crossnodepreemption/cross_node_preemption.go [183:206]
func dryRunOnePass(ctx context.Context, preemptor *v1.Pod, pods []*v1.Pod, nodeLister framework.NodeInfoLister,
fh framework.Handle, state *framework.CycleState) []dp.Candidate {
stateCopy := state.Clone()
var nodeCopies []*framework.NodeInfo
// Remove all victim pods.
for i := range pods {
pod := pods[i]
nodeInfo, _ := nodeLister.Get(pod.Spec.NodeName)
nodeCopy := nodeInfo.Clone()
nodeCopies = append(nodeCopies, nodeCopy)
nodeCopy.RemovePod(pod)
pInfo := framework.NewPodInfo(pod)
fh.RunPreFilterExtensionRemovePod(ctx, stateCopy, preemptor, pInfo, nodeCopy)
}
// See if all Filter plugins passed.
// NOTE: a complete search space is ALL nodes, but that would be expensive.
var candidates []dp.Candidate
for _, nodeInfo := range nodeCopies {
if s := fh.RunFilterPluginsWithNominatedPods(ctx, stateCopy, preemptor, nodeInfo); s.IsSuccess() {
candidates = append(candidates, &candidate{victims: pods, name: nodeInfo.Node().Name})
}
}
return candidates
}