mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
Fix default scheduler crash if scheduler extender filter returns a not found node
This commit is contained in:
parent
f7f1b2d5f7
commit
5927ec4f8b
@ -253,8 +253,8 @@ func convertToNodeNameToVictims(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Filter based on extender implemented predicate functions. The filtered list is
|
// Filter based on extender implemented predicate functions. The filtered list is
|
||||||
// expected to be a subset of the supplied list. failedNodesMap optionally contains
|
// expected to be a subset of the supplied list; otherwise the function returns an error.
|
||||||
// the list of failed nodes and failure reasons.
|
// failedNodesMap optionally contains the list of failed nodes and failure reasons.
|
||||||
func (h *HTTPExtender) Filter(
|
func (h *HTTPExtender) Filter(
|
||||||
pod *v1.Pod,
|
pod *v1.Pod,
|
||||||
nodes []*v1.Node, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo,
|
nodes []*v1.Node, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo,
|
||||||
@ -298,14 +298,20 @@ func (h *HTTPExtender) Filter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if h.nodeCacheCapable && result.NodeNames != nil {
|
if h.nodeCacheCapable && result.NodeNames != nil {
|
||||||
nodeResult = make([]*v1.Node, 0, len(*result.NodeNames))
|
nodeResult = make([]*v1.Node, len(*result.NodeNames))
|
||||||
for i := range *result.NodeNames {
|
for i, nodeName := range *result.NodeNames {
|
||||||
nodeResult = append(nodeResult, nodeNameToInfo[(*result.NodeNames)[i]].Node())
|
if node, ok := nodeNameToInfo[nodeName]; ok {
|
||||||
|
nodeResult[i] = node.Node()
|
||||||
|
} else {
|
||||||
|
return nil, nil, fmt.Errorf(
|
||||||
|
"extender %q claims a filtered node %q which is not found in nodeNameToInfo map",
|
||||||
|
h.extenderURL, nodeName)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if result.Nodes != nil {
|
} else if result.Nodes != nil {
|
||||||
nodeResult = make([]*v1.Node, 0, len(result.Nodes.Items))
|
nodeResult = make([]*v1.Node, len(result.Nodes.Items))
|
||||||
for i := range result.Nodes.Items {
|
for i := range result.Nodes.Items {
|
||||||
nodeResult = append(nodeResult, &result.Nodes.Items[i])
|
nodeResult[i] = &result.Nodes.Items[i]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -304,7 +304,7 @@ func (sched *Scheduler) preempt(preemptor *v1.Pod, scheduleErr error) (string, e
|
|||||||
|
|
||||||
node, victims, nominatedPodsToClear, err := sched.config.Algorithm.Preempt(preemptor, sched.config.NodeLister, scheduleErr)
|
node, victims, nominatedPodsToClear, err := sched.config.Algorithm.Preempt(preemptor, sched.config.NodeLister, scheduleErr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
klog.Errorf("Error preempting victims to make room for %v/%v.", preemptor.Namespace, preemptor.Name)
|
klog.Errorf("Error preempting victims to make room for %v/%v: %v", preemptor.Namespace, preemptor.Name, err)
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
var nodeName = ""
|
var nodeName = ""
|
||||||
|
Loading…
Reference in New Issue
Block a user