mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Merge pull request #33834 from wojtek-t/scheduler_map_reduce_6
Automatic merge from submit-queue Migrate EqualPriority in scheduler to map-reduce-like framework Ref #24246
This commit is contained in:
		@@ -39,19 +39,16 @@ const maxPriority float32 = 10
 | 
				
			|||||||
const zoneWeighting = 2.0 / 3.0
 | 
					const zoneWeighting = 2.0 / 3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type SelectorSpread struct {
 | 
					type SelectorSpread struct {
 | 
				
			||||||
	podLister        algorithm.PodLister
 | 
					 | 
				
			||||||
	serviceLister    algorithm.ServiceLister
 | 
						serviceLister    algorithm.ServiceLister
 | 
				
			||||||
	controllerLister algorithm.ControllerLister
 | 
						controllerLister algorithm.ControllerLister
 | 
				
			||||||
	replicaSetLister algorithm.ReplicaSetLister
 | 
						replicaSetLister algorithm.ReplicaSetLister
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewSelectorSpreadPriority(
 | 
					func NewSelectorSpreadPriority(
 | 
				
			||||||
	podLister algorithm.PodLister,
 | 
					 | 
				
			||||||
	serviceLister algorithm.ServiceLister,
 | 
						serviceLister algorithm.ServiceLister,
 | 
				
			||||||
	controllerLister algorithm.ControllerLister,
 | 
						controllerLister algorithm.ControllerLister,
 | 
				
			||||||
	replicaSetLister algorithm.ReplicaSetLister) algorithm.PriorityFunction {
 | 
						replicaSetLister algorithm.ReplicaSetLister) algorithm.PriorityFunction {
 | 
				
			||||||
	selectorSpread := &SelectorSpread{
 | 
						selectorSpread := &SelectorSpread{
 | 
				
			||||||
		podLister:        podLister,
 | 
					 | 
				
			||||||
		serviceLister:    serviceLister,
 | 
							serviceLister:    serviceLister,
 | 
				
			||||||
		controllerLister: controllerLister,
 | 
							controllerLister: controllerLister,
 | 
				
			||||||
		replicaSetLister: replicaSetLister,
 | 
							replicaSetLister: replicaSetLister,
 | 
				
			||||||
@@ -59,31 +56,41 @@ func NewSelectorSpreadPriority(
 | 
				
			|||||||
	return selectorSpread.CalculateSpreadPriority
 | 
						return selectorSpread.CalculateSpreadPriority
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CalculateSpreadPriority spreads pods across hosts and zones, considering pods belonging to the same service or replication controller.
 | 
					// Returns selectors of services, RCs and RSs matching the given pod.
 | 
				
			||||||
// When a pod is scheduled, it looks for services or RCs that match the pod, then finds existing pods that match those selectors.
 | 
					func getSelectors(pod *api.Pod, sl algorithm.ServiceLister, cl algorithm.ControllerLister, rsl algorithm.ReplicaSetLister) []labels.Selector {
 | 
				
			||||||
// It favors nodes that have fewer existing matching pods.
 | 
					 | 
				
			||||||
// i.e. it pushes the scheduler towards a node where there's the smallest number of
 | 
					 | 
				
			||||||
// pods which match the same service selectors or RC selectors as the pod being scheduled.
 | 
					 | 
				
			||||||
// Where zone information is included on the nodes, it favors nodes in zones with fewer existing matching pods.
 | 
					 | 
				
			||||||
func (s *SelectorSpread) CalculateSpreadPriority(pod *api.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo, nodes []*api.Node) (schedulerapi.HostPriorityList, error) {
 | 
					 | 
				
			||||||
	selectors := make([]labels.Selector, 0, 3)
 | 
						selectors := make([]labels.Selector, 0, 3)
 | 
				
			||||||
	if services, err := s.serviceLister.GetPodServices(pod); err == nil {
 | 
						if services, err := sl.GetPodServices(pod); err == nil {
 | 
				
			||||||
		for _, service := range services {
 | 
							for _, service := range services {
 | 
				
			||||||
			selectors = append(selectors, labels.SelectorFromSet(service.Spec.Selector))
 | 
								selectors = append(selectors, labels.SelectorFromSet(service.Spec.Selector))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if rcs, err := s.controllerLister.GetPodControllers(pod); err == nil {
 | 
						if rcs, err := cl.GetPodControllers(pod); err == nil {
 | 
				
			||||||
		for _, rc := range rcs {
 | 
							for _, rc := range rcs {
 | 
				
			||||||
			selectors = append(selectors, labels.SelectorFromSet(rc.Spec.Selector))
 | 
								selectors = append(selectors, labels.SelectorFromSet(rc.Spec.Selector))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if rss, err := s.replicaSetLister.GetPodReplicaSets(pod); err == nil {
 | 
						if rss, err := rsl.GetPodReplicaSets(pod); err == nil {
 | 
				
			||||||
		for _, rs := range rss {
 | 
							for _, rs := range rss {
 | 
				
			||||||
			if selector, err := unversioned.LabelSelectorAsSelector(rs.Spec.Selector); err == nil {
 | 
								if selector, err := unversioned.LabelSelectorAsSelector(rs.Spec.Selector); err == nil {
 | 
				
			||||||
				selectors = append(selectors, selector)
 | 
									selectors = append(selectors, selector)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						return selectors
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (s *SelectorSpread) getSelectors(pod *api.Pod) []labels.Selector {
 | 
				
			||||||
 | 
						return getSelectors(pod, s.serviceLister, s.controllerLister, s.replicaSetLister)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// CalculateSpreadPriority spreads pods across hosts and zones, considering pods belonging to the same service or replication controller.
 | 
				
			||||||
 | 
					// When a pod is scheduled, it looks for services, RCs or RSs that match the pod, then finds existing pods that match those selectors.
 | 
				
			||||||
 | 
					// It favors nodes that have fewer existing matching pods.
 | 
				
			||||||
 | 
					// i.e. it pushes the scheduler towards a node where there's the smallest number of
 | 
				
			||||||
 | 
					// pods which match the same service, RC or RS selectors as the pod being scheduled.
 | 
				
			||||||
 | 
					// Where zone information is included on the nodes, it favors nodes in zones with fewer existing matching pods.
 | 
				
			||||||
 | 
					func (s *SelectorSpread) CalculateSpreadPriority(pod *api.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo, nodes []*api.Node) (schedulerapi.HostPriorityList, error) {
 | 
				
			||||||
 | 
						selectors := s.getSelectors(pod)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Count similar pods by node
 | 
						// Count similar pods by node
 | 
				
			||||||
	countsByNodeName := make(map[string]float32, len(nodes))
 | 
						countsByNodeName := make(map[string]float32, len(nodes))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -286,7 +286,6 @@ func TestSelectorSpreadPriority(t *testing.T) {
 | 
				
			|||||||
	for _, test := range tests {
 | 
						for _, test := range tests {
 | 
				
			||||||
		nodeNameToInfo := schedulercache.CreateNodeNameToInfoMap(test.pods, nil)
 | 
							nodeNameToInfo := schedulercache.CreateNodeNameToInfoMap(test.pods, nil)
 | 
				
			||||||
		selectorSpread := SelectorSpread{
 | 
							selectorSpread := SelectorSpread{
 | 
				
			||||||
			podLister:        algorithm.FakePodLister(test.pods),
 | 
					 | 
				
			||||||
			serviceLister:    algorithm.FakeServiceLister(test.services),
 | 
								serviceLister:    algorithm.FakeServiceLister(test.services),
 | 
				
			||||||
			controllerLister: algorithm.FakeControllerLister(test.rcs),
 | 
								controllerLister: algorithm.FakeControllerLister(test.rcs),
 | 
				
			||||||
			replicaSetLister: algorithm.FakeReplicaSetLister(test.rss),
 | 
								replicaSetLister: algorithm.FakeReplicaSetLister(test.rss),
 | 
				
			||||||
@@ -494,7 +493,6 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
 | 
				
			|||||||
	for _, test := range tests {
 | 
						for _, test := range tests {
 | 
				
			||||||
		nodeNameToInfo := schedulercache.CreateNodeNameToInfoMap(test.pods, nil)
 | 
							nodeNameToInfo := schedulercache.CreateNodeNameToInfoMap(test.pods, nil)
 | 
				
			||||||
		selectorSpread := SelectorSpread{
 | 
							selectorSpread := SelectorSpread{
 | 
				
			||||||
			podLister:        algorithm.FakePodLister(test.pods),
 | 
					 | 
				
			||||||
			serviceLister:    algorithm.FakeServiceLister(test.services),
 | 
								serviceLister:    algorithm.FakeServiceLister(test.services),
 | 
				
			||||||
			controllerLister: algorithm.FakeControllerLister(test.rcs),
 | 
								controllerLister: algorithm.FakeControllerLister(test.rcs),
 | 
				
			||||||
			replicaSetLister: algorithm.FakeReplicaSetLister(test.rss),
 | 
								replicaSetLister: algorithm.FakeReplicaSetLister(test.rss),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,7 +67,7 @@ func init() {
 | 
				
			|||||||
	// EqualPriority is a prioritizer function that gives an equal weight of one to all nodes
 | 
						// EqualPriority is a prioritizer function that gives an equal weight of one to all nodes
 | 
				
			||||||
	// Register the priority function so that its available
 | 
						// Register the priority function so that its available
 | 
				
			||||||
	// but do not include it as part of the default priorities
 | 
						// but do not include it as part of the default priorities
 | 
				
			||||||
	factory.RegisterPriorityFunction("EqualPriority", scheduler.EqualPriority, 1)
 | 
						factory.RegisterPriorityFunction2("EqualPriority", scheduler.EqualPriorityMap, nil, 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// ServiceSpreadingPriority is a priority config factory that spreads pods by minimizing
 | 
						// ServiceSpreadingPriority is a priority config factory that spreads pods by minimizing
 | 
				
			||||||
	// the number of pods (belonging to the same service) on the same node.
 | 
						// the number of pods (belonging to the same service) on the same node.
 | 
				
			||||||
@@ -77,7 +77,7 @@ func init() {
 | 
				
			|||||||
		"ServiceSpreadingPriority",
 | 
							"ServiceSpreadingPriority",
 | 
				
			||||||
		factory.PriorityConfigFactory{
 | 
							factory.PriorityConfigFactory{
 | 
				
			||||||
			Function: func(args factory.PluginFactoryArgs) algorithm.PriorityFunction {
 | 
								Function: func(args factory.PluginFactoryArgs) algorithm.PriorityFunction {
 | 
				
			||||||
				return priorities.NewSelectorSpreadPriority(args.PodLister, args.ServiceLister, algorithm.EmptyControllerLister{}, algorithm.EmptyReplicaSetLister{})
 | 
									return priorities.NewSelectorSpreadPriority(args.ServiceLister, algorithm.EmptyControllerLister{}, algorithm.EmptyReplicaSetLister{})
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			Weight: 1,
 | 
								Weight: 1,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@@ -182,7 +182,7 @@ func defaultPriorities() sets.String {
 | 
				
			|||||||
			"SelectorSpreadPriority",
 | 
								"SelectorSpreadPriority",
 | 
				
			||||||
			factory.PriorityConfigFactory{
 | 
								factory.PriorityConfigFactory{
 | 
				
			||||||
				Function: func(args factory.PluginFactoryArgs) algorithm.PriorityFunction {
 | 
									Function: func(args factory.PluginFactoryArgs) algorithm.PriorityFunction {
 | 
				
			||||||
					return priorities.NewSelectorSpreadPriority(args.PodLister, args.ServiceLister, args.ControllerLister, args.ReplicaSetLister)
 | 
										return priorities.NewSelectorSpreadPriority(args.ServiceLister, args.ControllerLister, args.ReplicaSetLister)
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				Weight: 1,
 | 
									Weight: 1,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,12 +19,13 @@ package scheduler
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/util/wait"
 | 
				
			||||||
	"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm"
 | 
						"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm"
 | 
				
			||||||
	schedulerapi "k8s.io/kubernetes/plugin/pkg/scheduler/api"
 | 
						schedulerapi "k8s.io/kubernetes/plugin/pkg/scheduler/api"
 | 
				
			||||||
	"k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache"
 | 
						"k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache"
 | 
				
			||||||
	schedulertesting "k8s.io/kubernetes/plugin/pkg/scheduler/testing"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type fitPredicate func(pod *api.Pod, node *api.Node) (bool, error)
 | 
					type fitPredicate func(pod *api.Pod, node *api.Node) (bool, error)
 | 
				
			||||||
@@ -170,7 +171,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
 | 
				
			|||||||
	}{
 | 
						}{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			predicates:   map[string]algorithm.FitPredicate{"true": truePredicate},
 | 
								predicates:   map[string]algorithm.FitPredicate{"true": truePredicate},
 | 
				
			||||||
			prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}},
 | 
								prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
 | 
				
			||||||
			extenders: []FakeExtender{
 | 
								extenders: []FakeExtender{
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					predicates: []fitPredicate{truePredicateExtender},
 | 
										predicates: []fitPredicate{truePredicateExtender},
 | 
				
			||||||
@@ -185,7 +186,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			predicates:   map[string]algorithm.FitPredicate{"true": truePredicate},
 | 
								predicates:   map[string]algorithm.FitPredicate{"true": truePredicate},
 | 
				
			||||||
			prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}},
 | 
								prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
 | 
				
			||||||
			extenders: []FakeExtender{
 | 
								extenders: []FakeExtender{
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					predicates: []fitPredicate{truePredicateExtender},
 | 
										predicates: []fitPredicate{truePredicateExtender},
 | 
				
			||||||
@@ -200,7 +201,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			predicates:   map[string]algorithm.FitPredicate{"true": truePredicate},
 | 
								predicates:   map[string]algorithm.FitPredicate{"true": truePredicate},
 | 
				
			||||||
			prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}},
 | 
								prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
 | 
				
			||||||
			extenders: []FakeExtender{
 | 
								extenders: []FakeExtender{
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					predicates: []fitPredicate{truePredicateExtender},
 | 
										predicates: []fitPredicate{truePredicateExtender},
 | 
				
			||||||
@@ -215,7 +216,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			predicates:   map[string]algorithm.FitPredicate{"true": truePredicate},
 | 
								predicates:   map[string]algorithm.FitPredicate{"true": truePredicate},
 | 
				
			||||||
			prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}},
 | 
								prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
 | 
				
			||||||
			extenders: []FakeExtender{
 | 
								extenders: []FakeExtender{
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					predicates: []fitPredicate{machine2PredicateExtender},
 | 
										predicates: []fitPredicate{machine2PredicateExtender},
 | 
				
			||||||
@@ -230,7 +231,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			predicates:   map[string]algorithm.FitPredicate{"true": truePredicate},
 | 
								predicates:   map[string]algorithm.FitPredicate{"true": truePredicate},
 | 
				
			||||||
			prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}},
 | 
								prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
 | 
				
			||||||
			extenders: []FakeExtender{
 | 
								extenders: []FakeExtender{
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					predicates:   []fitPredicate{truePredicateExtender},
 | 
										predicates:   []fitPredicate{truePredicateExtender},
 | 
				
			||||||
@@ -244,7 +245,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			predicates:   map[string]algorithm.FitPredicate{"true": truePredicate},
 | 
								predicates:   map[string]algorithm.FitPredicate{"true": truePredicate},
 | 
				
			||||||
			prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}},
 | 
								prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
 | 
				
			||||||
			extenders: []FakeExtender{
 | 
								extenders: []FakeExtender{
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					predicates:   []fitPredicate{truePredicateExtender},
 | 
										predicates:   []fitPredicate{truePredicateExtender},
 | 
				
			||||||
@@ -282,8 +283,15 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
 | 
				
			|||||||
		for ii := range test.extenders {
 | 
							for ii := range test.extenders {
 | 
				
			||||||
			extenders = append(extenders, &test.extenders[ii])
 | 
								extenders = append(extenders, &test.extenders[ii])
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							cache := schedulercache.New(time.Duration(0), wait.NeverStop)
 | 
				
			||||||
 | 
							for _, pod := range test.pods {
 | 
				
			||||||
 | 
								cache.AddPod(pod)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							for _, name := range test.nodes {
 | 
				
			||||||
 | 
								cache.AddNode(&api.Node{ObjectMeta: api.ObjectMeta{Name: name}})
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		scheduler := NewGenericScheduler(
 | 
							scheduler := NewGenericScheduler(
 | 
				
			||||||
			schedulertesting.PodsToCache(test.pods), test.predicates, algorithm.EmptyMetadataProducer,
 | 
								cache, test.predicates, algorithm.EmptyMetadataProducer,
 | 
				
			||||||
			test.prioritizers, extenders)
 | 
								test.prioritizers, extenders)
 | 
				
			||||||
		machine, err := scheduler.Schedule(test.pod, algorithm.FakeNodeLister(makeNodeList(test.nodes)))
 | 
							machine, err := scheduler.Schedule(test.pod, algorithm.FakeNodeLister(makeNodeList(test.nodes)))
 | 
				
			||||||
		if test.expectsErr {
 | 
							if test.expectsErr {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -243,7 +243,15 @@ func PrioritizeNodes(
 | 
				
			|||||||
	// If no priority configs are provided, then the EqualPriority function is applied
 | 
						// If no priority configs are provided, then the EqualPriority function is applied
 | 
				
			||||||
	// This is required to generate the priority list in the required format
 | 
						// This is required to generate the priority list in the required format
 | 
				
			||||||
	if len(priorityConfigs) == 0 && len(extenders) == 0 {
 | 
						if len(priorityConfigs) == 0 && len(extenders) == 0 {
 | 
				
			||||||
		return EqualPriority(pod, nodeNameToInfo, nodes)
 | 
							result := make(schedulerapi.HostPriorityList, 0, len(nodes))
 | 
				
			||||||
 | 
							for i := range nodes {
 | 
				
			||||||
 | 
								hostPriority, err := EqualPriorityMap(pod, meta, nodeNameToInfo[nodes[i].Name])
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return nil, err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								result = append(result, hostPriority)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return result, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var (
 | 
						var (
 | 
				
			||||||
@@ -355,15 +363,15 @@ func PrioritizeNodes(
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// EqualPriority is a prioritizer function that gives an equal weight of one to all nodes
 | 
					// EqualPriority is a prioritizer function that gives an equal weight of one to all nodes
 | 
				
			||||||
func EqualPriority(_ *api.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo, nodes []*api.Node) (schedulerapi.HostPriorityList, error) {
 | 
					func EqualPriorityMap(_ *api.Pod, _ interface{}, nodeInfo *schedulercache.NodeInfo) (schedulerapi.HostPriority, error) {
 | 
				
			||||||
	result := make(schedulerapi.HostPriorityList, len(nodes))
 | 
						node := nodeInfo.Node()
 | 
				
			||||||
	for _, node := range nodes {
 | 
						if node == nil {
 | 
				
			||||||
		result = append(result, schedulerapi.HostPriority{
 | 
							return schedulerapi.HostPriority{}, fmt.Errorf("node not found")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return schedulerapi.HostPriority{
 | 
				
			||||||
		Host:  node.Name,
 | 
							Host:  node.Name,
 | 
				
			||||||
		Score: 1,
 | 
							Score: 1,
 | 
				
			||||||
		})
 | 
						}, nil
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return result, nil
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewGenericScheduler(
 | 
					func NewGenericScheduler(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -189,7 +189,7 @@ func TestGenericScheduler(t *testing.T) {
 | 
				
			|||||||
	}{
 | 
						}{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			predicates:   map[string]algorithm.FitPredicate{"false": falsePredicate},
 | 
								predicates:   map[string]algorithm.FitPredicate{"false": falsePredicate},
 | 
				
			||||||
			prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}},
 | 
								prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
 | 
				
			||||||
			nodes:        []string{"machine1", "machine2"},
 | 
								nodes:        []string{"machine1", "machine2"},
 | 
				
			||||||
			expectsErr:   true,
 | 
								expectsErr:   true,
 | 
				
			||||||
			pod:          &api.Pod{ObjectMeta: api.ObjectMeta{Name: "2"}},
 | 
								pod:          &api.Pod{ObjectMeta: api.ObjectMeta{Name: "2"}},
 | 
				
			||||||
@@ -203,7 +203,7 @@ func TestGenericScheduler(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			predicates:    map[string]algorithm.FitPredicate{"true": truePredicate},
 | 
								predicates:    map[string]algorithm.FitPredicate{"true": truePredicate},
 | 
				
			||||||
			prioritizers:  []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}},
 | 
								prioritizers:  []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
 | 
				
			||||||
			nodes:         []string{"machine1", "machine2"},
 | 
								nodes:         []string{"machine1", "machine2"},
 | 
				
			||||||
			expectedHosts: sets.NewString("machine1", "machine2"),
 | 
								expectedHosts: sets.NewString("machine1", "machine2"),
 | 
				
			||||||
			name:          "test 2",
 | 
								name:          "test 2",
 | 
				
			||||||
@@ -212,7 +212,7 @@ func TestGenericScheduler(t *testing.T) {
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			// Fits on a machine where the pod ID matches the machine name
 | 
								// Fits on a machine where the pod ID matches the machine name
 | 
				
			||||||
			predicates:    map[string]algorithm.FitPredicate{"matches": matchesPredicate},
 | 
								predicates:    map[string]algorithm.FitPredicate{"matches": matchesPredicate},
 | 
				
			||||||
			prioritizers:  []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}},
 | 
								prioritizers:  []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
 | 
				
			||||||
			nodes:         []string{"machine1", "machine2"},
 | 
								nodes:         []string{"machine1", "machine2"},
 | 
				
			||||||
			pod:           &api.Pod{ObjectMeta: api.ObjectMeta{Name: "machine2"}},
 | 
								pod:           &api.Pod{ObjectMeta: api.ObjectMeta{Name: "machine2"}},
 | 
				
			||||||
			expectedHosts: sets.NewString("machine2"),
 | 
								expectedHosts: sets.NewString("machine2"),
 | 
				
			||||||
@@ -494,7 +494,6 @@ func TestZeroRequest(t *testing.T) {
 | 
				
			|||||||
			{Map: algorithmpriorities.BalancedResourceAllocationMap, Weight: 1},
 | 
								{Map: algorithmpriorities.BalancedResourceAllocationMap, Weight: 1},
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				Function: algorithmpriorities.NewSelectorSpreadPriority(
 | 
									Function: algorithmpriorities.NewSelectorSpreadPriority(
 | 
				
			||||||
					algorithm.FakePodLister(test.pods),
 | 
					 | 
				
			||||||
					algorithm.FakeServiceLister([]*api.Service{}),
 | 
										algorithm.FakeServiceLister([]*api.Service{}),
 | 
				
			||||||
					algorithm.FakeControllerLister([]*api.ReplicationController{}),
 | 
										algorithm.FakeControllerLister([]*api.ReplicationController{}),
 | 
				
			||||||
					algorithm.FakeReplicaSetLister([]extensions.ReplicaSet{})),
 | 
										algorithm.FakeReplicaSetLister([]extensions.ReplicaSet{})),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -185,6 +185,7 @@ func TestSchedulerNoPhantomPodAfterExpire(t *testing.T) {
 | 
				
			|||||||
	scache := schedulercache.New(100*time.Millisecond, stop)
 | 
						scache := schedulercache.New(100*time.Millisecond, stop)
 | 
				
			||||||
	pod := podWithPort("pod.Name", "", 8080)
 | 
						pod := podWithPort("pod.Name", "", 8080)
 | 
				
			||||||
	node := api.Node{ObjectMeta: api.ObjectMeta{Name: "machine1"}}
 | 
						node := api.Node{ObjectMeta: api.ObjectMeta{Name: "machine1"}}
 | 
				
			||||||
 | 
						scache.AddNode(&node)
 | 
				
			||||||
	nodeLister := algorithm.FakeNodeLister([]*api.Node{&node})
 | 
						nodeLister := algorithm.FakeNodeLister([]*api.Node{&node})
 | 
				
			||||||
	predicateMap := map[string]algorithm.FitPredicate{"PodFitsHostPorts": predicates.PodFitsHostPorts}
 | 
						predicateMap := map[string]algorithm.FitPredicate{"PodFitsHostPorts": predicates.PodFitsHostPorts}
 | 
				
			||||||
	scheduler, bindingChan, _ := setupTestSchedulerWithOnePodOnNode(t, queuedPodStore, scache, nodeLister, predicateMap, pod, &node)
 | 
						scheduler, bindingChan, _ := setupTestSchedulerWithOnePodOnNode(t, queuedPodStore, scache, nodeLister, predicateMap, pod, &node)
 | 
				
			||||||
@@ -242,6 +243,7 @@ func TestSchedulerNoPhantomPodAfterDelete(t *testing.T) {
 | 
				
			|||||||
	scache := schedulercache.New(10*time.Minute, stop)
 | 
						scache := schedulercache.New(10*time.Minute, stop)
 | 
				
			||||||
	firstPod := podWithPort("pod.Name", "", 8080)
 | 
						firstPod := podWithPort("pod.Name", "", 8080)
 | 
				
			||||||
	node := api.Node{ObjectMeta: api.ObjectMeta{Name: "machine1"}}
 | 
						node := api.Node{ObjectMeta: api.ObjectMeta{Name: "machine1"}}
 | 
				
			||||||
 | 
						scache.AddNode(&node)
 | 
				
			||||||
	nodeLister := algorithm.FakeNodeLister([]*api.Node{&node})
 | 
						nodeLister := algorithm.FakeNodeLister([]*api.Node{&node})
 | 
				
			||||||
	predicateMap := map[string]algorithm.FitPredicate{"PodFitsHostPorts": predicates.PodFitsHostPorts}
 | 
						predicateMap := map[string]algorithm.FitPredicate{"PodFitsHostPorts": predicates.PodFitsHostPorts}
 | 
				
			||||||
	scheduler, bindingChan, errChan := setupTestSchedulerWithOnePodOnNode(t, queuedPodStore, scache, nodeLister, predicateMap, firstPod, &node)
 | 
						scheduler, bindingChan, errChan := setupTestSchedulerWithOnePodOnNode(t, queuedPodStore, scache, nodeLister, predicateMap, firstPod, &node)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user