in pkg/plugin/predicates/predicate_manager.go [210:238]
func (p *predicateManagerImpl) runPreFilterPlugins(ctx context.Context, state *framework.CycleState, plugins []framework.PreFilterPlugin, pod *v1.Pod, node *framework.NodeInfo) (status *framework.Status, plugin string, skip map[string]interface{}) {
var mergedNodes *framework.PreFilterResult = nil
skip = nil
for _, pl := range plugins {
nodes, status := p.runPreFilterPlugin(ctx, pl, state, pod)
if status.IsSkip() {
if skip == nil {
skip = make(map[string]interface{})
}
skip[pl.Name()] = nil
} else if !status.IsSuccess() {
if status.IsUnschedulable() {
return status, plugin, skip
}
err := errors.New(status.Message())
log.Log(log.ShimPredicates).Error("failed running PreFilter plugin",
zap.String("pluginName", pl.Name()),
zap.String("pod", fmt.Sprintf("%s/%s", pod.Namespace, pod.Name)),
zap.Error(err))
return framework.AsStatus(fmt.Errorf("running PreFilter plugin %q: %w", pl.Name(), err)), plugin, skip
}
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
}