Merge pull request #79641 from yqwang-ms/yqwang/fix-ds-crash
Fix default scheduler crash if scheduler extender filter returns a not found node
This commit is contained in:
		| @@ -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] | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -305,7 +305,7 @@ func (sched *Scheduler) preempt(fwk framework.Framework, preemptor *v1.Pod, sche | |||||||
|  |  | ||||||
| 	node, victims, nominatedPodsToClear, err := sched.config.Algorithm.Preempt(preemptor, scheduleErr) | 	node, victims, nominatedPodsToClear, err := sched.config.Algorithm.Preempt(preemptor, 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 = "" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Kubernetes Prow Robot
					Kubernetes Prow Robot