From b97367034469693c2e64018de945f2002badaabf Mon Sep 17 00:00:00 2001 From: PingWang Date: Fri, 20 May 2016 08:49:53 +0800 Subject: [PATCH 1/3] Add the length detection of the "predicateFuncs" in generic_scheduler.go MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The PR add the length detection of the "predicateFuncs" for "findNodesThatFit" function of generic_scheduler.go. In “findNodesThatFit” function, if the length of the "predicateFuncs" parameter is 0, it can set filtered equals nodes.Items, and needn't to traverse the nodes.Items. --- plugin/pkg/scheduler/generic_scheduler.go | 42 +++++++++++++---------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/plugin/pkg/scheduler/generic_scheduler.go b/plugin/pkg/scheduler/generic_scheduler.go index 8020b9eaa26..fdd75898449 100644 --- a/plugin/pkg/scheduler/generic_scheduler.go +++ b/plugin/pkg/scheduler/generic_scheduler.go @@ -137,31 +137,35 @@ func (g *genericScheduler) selectHost(priorityList schedulerapi.HostPriorityList // Filters the nodes to find the ones that fit based on the given predicate functions // Each node is passed through the predicate functions to determine if it is a fit func findNodesThatFit(pod *api.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo, predicateFuncs map[string]algorithm.FitPredicate, nodes api.NodeList, extenders []algorithm.SchedulerExtender) (api.NodeList, FailedPredicateMap, error) { - predicateResultLock := sync.Mutex{} filtered := []api.Node{} failedPredicateMap := FailedPredicateMap{} - errs := []error{} - checkNode := func(i int) { - nodeName := nodes.Items[i].Name - fits, failedPredicate, err := podFitsOnNode(pod, nodeNameToInfo[nodeName], predicateFuncs) - - predicateResultLock.Lock() - defer predicateResultLock.Unlock() - if err != nil { - errs = append(errs, err) - return + if len(predicateFuncs) == 0 { + filtered = nodes.Items + } else { + predicateResultLock := sync.Mutex{} + errs := []error{} + checkNode := func(i int) { + nodeName := nodes.Items[i].Name + fits, failedPredicate, err := podFitsOnNode(pod, nodeNameToInfo[nodeName], predicateFuncs) + + predicateResultLock.Lock() + defer predicateResultLock.Unlock() + if err != nil { + errs = append(errs, err) + return + } + if fits { + filtered = append(filtered, nodes.Items[i]) + } else { + failedPredicateMap[nodeName] = failedPredicate + } } - if fits { - filtered = append(filtered, nodes.Items[i]) - } else { - failedPredicateMap[nodeName] = failedPredicate + workqueue.Parallelize(16, len(nodes.Items), checkNode) + if len(errs) > 0 { + return api.NodeList{}, FailedPredicateMap{}, errors.NewAggregate(errs) } } - workqueue.Parallelize(16, len(nodes.Items), checkNode) - if len(errs) > 0 { - return api.NodeList{}, FailedPredicateMap{}, errors.NewAggregate(errs) - } if len(filtered) > 0 && len(extenders) != 0 { for _, extender := range extenders { From 36740719d9544d9adb2e4df3b8e24c41a3d6767e Mon Sep 17 00:00:00 2001 From: PingWang Date: Mon, 23 May 2016 09:17:17 +0800 Subject: [PATCH 2/3] exec gofmt -s --- plugin/pkg/scheduler/generic_scheduler.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/plugin/pkg/scheduler/generic_scheduler.go b/plugin/pkg/scheduler/generic_scheduler.go index fdd75898449..fecb6fbf923 100644 --- a/plugin/pkg/scheduler/generic_scheduler.go +++ b/plugin/pkg/scheduler/generic_scheduler.go @@ -140,6 +140,7 @@ func findNodesThatFit(pod *api.Pod, nodeNameToInfo map[string]*schedulercache.No filtered := []api.Node{} failedPredicateMap := FailedPredicateMap{} + //wp:#25606 if len(predicateFuncs) == 0 { filtered = nodes.Items } else { @@ -148,7 +149,7 @@ func findNodesThatFit(pod *api.Pod, nodeNameToInfo map[string]*schedulercache.No checkNode := func(i int) { nodeName := nodes.Items[i].Name fits, failedPredicate, err := podFitsOnNode(pod, nodeNameToInfo[nodeName], predicateFuncs) - + predicateResultLock.Lock() defer predicateResultLock.Unlock() if err != nil { @@ -173,6 +174,24 @@ func findNodesThatFit(pod *api.Pod, nodeNameToInfo map[string]*schedulercache.No if err != nil { return api.NodeList{}, FailedPredicateMap{}, err } + //add the extender failed info to failedPredicateMap wp:#25797 + for _, filteredNode := range filtered { + nodeIn := false + for _, exNode := range filteredList.Items { + if filteredNode.Name == exNode.Name { + nodeIn = true + break + } + } + if !nodeIn { + if re, ok := extender.(*HTTPExtender); ok { + failedPredicateMap[filteredNode.Name] = fmt.Sprintf("%s, %s", re.extenderURL, re.filterVerb) + } else { + failedPredicateMap[filteredNode.Name] = "extender failed" + } + } + } + filtered = filteredList.Items if len(filtered) == 0 { break From e2af16b1d5358e71c10affeafb5e538df4ae67b5 Mon Sep 17 00:00:00 2001 From: PingWang Date: Mon, 23 May 2016 09:18:15 +0800 Subject: [PATCH 3/3] Update generic_scheduler.go --- plugin/pkg/scheduler/generic_scheduler.go | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/plugin/pkg/scheduler/generic_scheduler.go b/plugin/pkg/scheduler/generic_scheduler.go index fecb6fbf923..4c7288f4e59 100644 --- a/plugin/pkg/scheduler/generic_scheduler.go +++ b/plugin/pkg/scheduler/generic_scheduler.go @@ -140,7 +140,6 @@ func findNodesThatFit(pod *api.Pod, nodeNameToInfo map[string]*schedulercache.No filtered := []api.Node{} failedPredicateMap := FailedPredicateMap{} - //wp:#25606 if len(predicateFuncs) == 0 { filtered = nodes.Items } else { @@ -174,24 +173,6 @@ func findNodesThatFit(pod *api.Pod, nodeNameToInfo map[string]*schedulercache.No if err != nil { return api.NodeList{}, FailedPredicateMap{}, err } - //add the extender failed info to failedPredicateMap wp:#25797 - for _, filteredNode := range filtered { - nodeIn := false - for _, exNode := range filteredList.Items { - if filteredNode.Name == exNode.Name { - nodeIn = true - break - } - } - if !nodeIn { - if re, ok := extender.(*HTTPExtender); ok { - failedPredicateMap[filteredNode.Name] = fmt.Sprintf("%s, %s", re.extenderURL, re.filterVerb) - } else { - failedPredicateMap[filteredNode.Name] = "extender failed" - } - } - } - filtered = filteredList.Items if len(filtered) == 0 { break