in pkg/plugin/predicates/predicate_manager.go [215:242]
func (p *predicateManagerImpl) runPreFilterPlugins(ctx context.Context, state *framework.CycleState, plugins []framework.PreFilterPlugin, pod *v1.Pod, node *framework.NodeInfo) (*framework.Status, string, map[string]bool) {
var mergedNodes *framework.PreFilterResult
skip := make(map[string]bool)
for _, pl := range plugins {
plugin := pl.Name()
nodes, status := p.runPreFilterPlugin(ctx, pl, state, pod)
if status.IsSkip() {
skip[plugin] = true
} else if !status.IsSuccess() {
if status.IsRejected() {
return status, "", skip
}
err := errors.New(status.Message())
log.Log(log.ShimPredicates).Error("failed running PreFilter plugin",
zap.String("pluginName", plugin),
zap.String("pod", fmt.Sprintf("%s/%s", pod.Namespace, pod.Name)),
zap.Error(err))
return framework.AsStatus(errors.Join(fmt.Errorf("running PreFilter plugin %q: ", plugin), err)), plugin, skip
}
// Merge is nil safe and returns a new PreFilterResult result if mergedNodes was nil
mergedNodes = mergedNodes.Merge(nodes)
if !mergedNodes.AllNodes() && !mergedNodes.NodeNames.Has(node.Node().Name) {
return framework.NewStatus(framework.UnschedulableAndUnresolvable, "node not eligible"), plugin, skip
}
}
return nil, "", skip
}