Merge pull request #68563 from DylanBLE/dev
fix scheduler crash when Prioritize Map function failed
This commit is contained in:
		@@ -29,6 +29,7 @@ go_test(
 | 
				
			|||||||
        "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
 | 
					        "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
 | 
				
			||||||
        "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
					        "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
				
			||||||
        "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
					        "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
				
			||||||
 | 
					        "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library",
 | 
				
			||||||
        "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
					        "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
				
			||||||
        "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
					        "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -667,6 +667,7 @@ func PrioritizeNodes(
 | 
				
			|||||||
			results[i] = make(schedulerapi.HostPriorityList, len(nodes))
 | 
								results[i] = make(schedulerapi.HostPriorityList, len(nodes))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	processNode := func(index int) {
 | 
						processNode := func(index int) {
 | 
				
			||||||
		nodeInfo := nodeNameToInfo[nodes[index].Name]
 | 
							nodeInfo := nodeNameToInfo[nodes[index].Name]
 | 
				
			||||||
		var err error
 | 
							var err error
 | 
				
			||||||
@@ -677,7 +678,7 @@ func PrioritizeNodes(
 | 
				
			|||||||
			results[i][index], err = priorityConfigs[i].Map(pod, meta, nodeInfo)
 | 
								results[i][index], err = priorityConfigs[i].Map(pod, meta, nodeInfo)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				appendError(err)
 | 
									appendError(err)
 | 
				
			||||||
				return
 | 
									results[i][index].Host = nodes[index].Name
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,6 +31,7 @@ import (
 | 
				
			|||||||
	"k8s.io/apimachinery/pkg/api/resource"
 | 
						"k8s.io/apimachinery/pkg/api/resource"
 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/types"
 | 
						"k8s.io/apimachinery/pkg/types"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/util/errors"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
						"k8s.io/apimachinery/pkg/util/sets"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/wait"
 | 
						"k8s.io/apimachinery/pkg/util/wait"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/scheduler/algorithm"
 | 
						"k8s.io/kubernetes/pkg/scheduler/algorithm"
 | 
				
			||||||
@@ -44,7 +45,8 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
	order = []string{"false", "true", "matches", "nopods", algorithmpredicates.MatchInterPodAffinityPred}
 | 
						errPrioritize = fmt.Errorf("priority map encounters an error")
 | 
				
			||||||
 | 
						order         = []string{"false", "true", "matches", "nopods", algorithmpredicates.MatchInterPodAffinityPred}
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func falsePredicate(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) {
 | 
					func falsePredicate(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) {
 | 
				
			||||||
@@ -111,6 +113,26 @@ func reverseNumericPriority(pod *v1.Pod, nodeNameToInfo map[string]*schedulercac
 | 
				
			|||||||
	return reverseResult, nil
 | 
						return reverseResult, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func trueMapPriority(pod *v1.Pod, meta interface{}, nodeInfo *schedulercache.NodeInfo) (schedulerapi.HostPriority, error) {
 | 
				
			||||||
 | 
						return schedulerapi.HostPriority{
 | 
				
			||||||
 | 
							Host:  nodeInfo.Node().Name,
 | 
				
			||||||
 | 
							Score: 1,
 | 
				
			||||||
 | 
						}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func falseMapPriority(pod *v1.Pod, meta interface{}, nodeInfo *schedulercache.NodeInfo) (schedulerapi.HostPriority, error) {
 | 
				
			||||||
 | 
						return schedulerapi.HostPriority{}, errPrioritize
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func getNodeReducePriority(pod *v1.Pod, meta interface{}, nodeNameToInfo map[string]*schedulercache.NodeInfo, result schedulerapi.HostPriorityList) error {
 | 
				
			||||||
 | 
						for _, host := range result {
 | 
				
			||||||
 | 
							if host.Host == "" {
 | 
				
			||||||
 | 
								return fmt.Errorf("unexpected empty host name")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func makeNodeList(nodeNames []string) []*v1.Node {
 | 
					func makeNodeList(nodeNames []string) []*v1.Node {
 | 
				
			||||||
	result := make([]*v1.Node, 0, len(nodeNames))
 | 
						result := make([]*v1.Node, 0, len(nodeNames))
 | 
				
			||||||
	for _, nodeName := range nodeNames {
 | 
						for _, nodeName := range nodeNames {
 | 
				
			||||||
@@ -399,6 +421,14 @@ func TestGenericScheduler(t *testing.T) {
 | 
				
			|||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								predicates:   map[string]algorithm.FitPredicate{"true": truePredicate},
 | 
				
			||||||
 | 
								prioritizers: []algorithm.PriorityConfig{{Map: falseMapPriority, Weight: 1}, {Map: trueMapPriority, Reduce: getNodeReducePriority, Weight: 2}},
 | 
				
			||||||
 | 
								nodes:        []string{"2", "1"},
 | 
				
			||||||
 | 
								pod:          &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "2"}},
 | 
				
			||||||
 | 
								name:         "test error with priority map",
 | 
				
			||||||
 | 
								wErr:         errors.NewAggregate([]error{errPrioritize, errPrioritize}),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for _, test := range tests {
 | 
						for _, test := range tests {
 | 
				
			||||||
		t.Run(test.name, func(t *testing.T) {
 | 
							t.Run(test.name, func(t *testing.T) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user