From 1fe7ce21bcf73c0a82811c75afb12254488adfaa Mon Sep 17 00:00:00 2001 From: sonasingh46 Date: Wed, 9 Jan 2019 02:39:11 +0530 Subject: [PATCH] refactor(scheduler): Move priority types to priorities package This moves the priority types from the algorithm package to priorities package. Idea is to move the type to the packages where it is implemented. This will ease the future refactor process. --- pkg/scheduler/BUILD | 1 + pkg/scheduler/algorithm/BUILD | 17 +----- pkg/scheduler/algorithm/priorities/BUILD | 4 ++ .../algorithm/priorities/interpod_affinity.go | 2 +- .../algorithm/priorities/metadata.go | 2 +- .../algorithm/priorities/node_label.go | 3 +- pkg/scheduler/algorithm/priorities/reduce.go | 3 +- .../priorities/selector_spreading.go | 4 +- .../algorithm/priorities/test_util.go | 3 +- pkg/scheduler/algorithm/priorities/types.go | 59 +++++++++++++++++++ .../algorithm/{ => priorities}/types_test.go | 9 +-- pkg/scheduler/algorithm/types.go | 37 ------------ .../defaults/register_priorities.go | 8 +-- pkg/scheduler/core/BUILD | 1 + pkg/scheduler/core/extender_test.go | 23 ++++---- pkg/scheduler/core/generic_scheduler.go | 15 ++--- pkg/scheduler/core/generic_scheduler_test.go | 52 ++++++++-------- pkg/scheduler/factory/factory.go | 5 +- pkg/scheduler/factory/plugins.go | 36 +++++------ pkg/scheduler/factory/plugins_test.go | 9 ++- pkg/scheduler/scheduler_test.go | 11 ++-- 21 files changed, 159 insertions(+), 145 deletions(-) create mode 100644 pkg/scheduler/algorithm/priorities/types.go rename pkg/scheduler/algorithm/{ => priorities}/types_test.go (91%) diff --git a/pkg/scheduler/BUILD b/pkg/scheduler/BUILD index b781d2178e..ada94b40b2 100644 --- a/pkg/scheduler/BUILD +++ b/pkg/scheduler/BUILD @@ -46,6 +46,7 @@ go_test( "//pkg/controller/volume/persistentvolume:go_default_library", "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library", + "//pkg/scheduler/algorithm/priorities:go_default_library", "//pkg/scheduler/api:go_default_library", "//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/core:go_default_library", diff --git a/pkg/scheduler/algorithm/BUILD b/pkg/scheduler/algorithm/BUILD index 6dfd534bf8..415aa85302 100644 --- a/pkg/scheduler/algorithm/BUILD +++ b/pkg/scheduler/algorithm/BUILD @@ -1,10 +1,6 @@ package(default_visibility = ["//visibility:public"]) -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", - "go_test", -) +load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", @@ -24,17 +20,6 @@ go_library( ], ) -go_test( - name = "go_default_test", - srcs = ["types_test.go"], - embed = [":go_default_library"], - deps = [ - "//pkg/scheduler/nodeinfo:go_default_library", - "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", - ], -) - filegroup( name = "package-srcs", srcs = glob(["**"]), diff --git a/pkg/scheduler/algorithm/priorities/BUILD b/pkg/scheduler/algorithm/priorities/BUILD index 98df72999d..5050bba242 100644 --- a/pkg/scheduler/algorithm/priorities/BUILD +++ b/pkg/scheduler/algorithm/priorities/BUILD @@ -26,6 +26,7 @@ go_library( "selector_spreading.go", "taint_toleration.go", "test_util.go", + "types.go", ], importpath = "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities", deps = [ @@ -65,11 +66,13 @@ go_test( "resource_limits_test.go", "selector_spreading_test.go", "taint_toleration_test.go", + "types_test.go", ], embed = [":go_default_library"], deps = [ "//pkg/features:go_default_library", "//pkg/kubelet/apis:go_default_library", + "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/priorities/util:go_default_library", "//pkg/scheduler/api:go_default_library", "//pkg/scheduler/nodeinfo:go_default_library", @@ -79,6 +82,7 @@ go_test( "//staging/src/k8s.io/api/core/v1: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/labels:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", diff --git a/pkg/scheduler/algorithm/priorities/interpod_affinity.go b/pkg/scheduler/algorithm/priorities/interpod_affinity.go index d18397446a..62540a5941 100644 --- a/pkg/scheduler/algorithm/priorities/interpod_affinity.go +++ b/pkg/scheduler/algorithm/priorities/interpod_affinity.go @@ -46,7 +46,7 @@ func NewInterPodAffinityPriority( info predicates.NodeInfo, nodeLister algorithm.NodeLister, podLister algorithm.PodLister, - hardPodAffinityWeight int32) algorithm.PriorityFunction { + hardPodAffinityWeight int32) PriorityFunction { interPodAffinity := &InterPodAffinity{ info: info, nodeLister: nodeLister, diff --git a/pkg/scheduler/algorithm/priorities/metadata.go b/pkg/scheduler/algorithm/priorities/metadata.go index b860c49695..c80fc7d035 100644 --- a/pkg/scheduler/algorithm/priorities/metadata.go +++ b/pkg/scheduler/algorithm/priorities/metadata.go @@ -33,7 +33,7 @@ type PriorityMetadataFactory struct { } // NewPriorityMetadataFactory creates a PriorityMetadataFactory. -func NewPriorityMetadataFactory(serviceLister algorithm.ServiceLister, controllerLister algorithm.ControllerLister, replicaSetLister algorithm.ReplicaSetLister, statefulSetLister algorithm.StatefulSetLister) algorithm.PriorityMetadataProducer { +func NewPriorityMetadataFactory(serviceLister algorithm.ServiceLister, controllerLister algorithm.ControllerLister, replicaSetLister algorithm.ReplicaSetLister, statefulSetLister algorithm.StatefulSetLister) PriorityMetadataProducer { factory := &PriorityMetadataFactory{ serviceLister: serviceLister, controllerLister: controllerLister, diff --git a/pkg/scheduler/algorithm/priorities/node_label.go b/pkg/scheduler/algorithm/priorities/node_label.go index c3ddb1af51..2cedd13142 100644 --- a/pkg/scheduler/algorithm/priorities/node_label.go +++ b/pkg/scheduler/algorithm/priorities/node_label.go @@ -21,7 +21,6 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/labels" - "k8s.io/kubernetes/pkg/scheduler/algorithm" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) @@ -33,7 +32,7 @@ type NodeLabelPrioritizer struct { } // NewNodeLabelPriority creates a NodeLabelPrioritizer. -func NewNodeLabelPriority(label string, presence bool) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { +func NewNodeLabelPriority(label string, presence bool) (PriorityMapFunction, PriorityReduceFunction) { labelPrioritizer := &NodeLabelPrioritizer{ label: label, presence: presence, diff --git a/pkg/scheduler/algorithm/priorities/reduce.go b/pkg/scheduler/algorithm/priorities/reduce.go index aaeb9add87..416724cbea 100644 --- a/pkg/scheduler/algorithm/priorities/reduce.go +++ b/pkg/scheduler/algorithm/priorities/reduce.go @@ -18,7 +18,6 @@ package priorities import ( "k8s.io/api/core/v1" - "k8s.io/kubernetes/pkg/scheduler/algorithm" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) @@ -26,7 +25,7 @@ import ( // NormalizeReduce generates a PriorityReduceFunction that can normalize the result // scores to [0, maxPriority]. If reverse is set to true, it reverses the scores by // subtracting it from maxPriority. -func NormalizeReduce(maxPriority int, reverse bool) algorithm.PriorityReduceFunction { +func NormalizeReduce(maxPriority int, reverse bool) PriorityReduceFunction { return func( _ *v1.Pod, _ interface{}, diff --git a/pkg/scheduler/algorithm/priorities/selector_spreading.go b/pkg/scheduler/algorithm/priorities/selector_spreading.go index 06cdc6edbb..2a965acbe7 100644 --- a/pkg/scheduler/algorithm/priorities/selector_spreading.go +++ b/pkg/scheduler/algorithm/priorities/selector_spreading.go @@ -46,7 +46,7 @@ func NewSelectorSpreadPriority( serviceLister algorithm.ServiceLister, controllerLister algorithm.ControllerLister, replicaSetLister algorithm.ReplicaSetLister, - statefulSetLister algorithm.StatefulSetLister) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { + statefulSetLister algorithm.StatefulSetLister) (PriorityMapFunction, PriorityReduceFunction) { selectorSpread := &SelectorSpread{ serviceLister: serviceLister, controllerLister: controllerLister, @@ -177,7 +177,7 @@ type ServiceAntiAffinity struct { } // NewServiceAntiAffinityPriority creates a ServiceAntiAffinity. -func NewServiceAntiAffinityPriority(podLister algorithm.PodLister, serviceLister algorithm.ServiceLister, label string) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { +func NewServiceAntiAffinityPriority(podLister algorithm.PodLister, serviceLister algorithm.ServiceLister, label string) (PriorityMapFunction, PriorityReduceFunction) { antiAffinity := &ServiceAntiAffinity{ podLister: podLister, serviceLister: serviceLister, diff --git a/pkg/scheduler/algorithm/priorities/test_util.go b/pkg/scheduler/algorithm/priorities/test_util.go index d154fca752..8c94d0fd6a 100644 --- a/pkg/scheduler/algorithm/priorities/test_util.go +++ b/pkg/scheduler/algorithm/priorities/test_util.go @@ -20,7 +20,6 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/scheduler/algorithm" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) @@ -41,7 +40,7 @@ func makeNode(node string, milliCPU, memory int64) *v1.Node { } } -func priorityFunction(mapFn algorithm.PriorityMapFunction, reduceFn algorithm.PriorityReduceFunction, metaData interface{}) algorithm.PriorityFunction { +func priorityFunction(mapFn PriorityMapFunction, reduceFn PriorityReduceFunction, metaData interface{}) PriorityFunction { return func(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, nodes []*v1.Node) (schedulerapi.HostPriorityList, error) { result := make(schedulerapi.HostPriorityList, 0, len(nodes)) for i := range nodes { diff --git a/pkg/scheduler/algorithm/priorities/types.go b/pkg/scheduler/algorithm/priorities/types.go new file mode 100644 index 0000000000..6c98a780ae --- /dev/null +++ b/pkg/scheduler/algorithm/priorities/types.go @@ -0,0 +1,59 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package priorities + +import ( + "k8s.io/api/core/v1" + schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" +) + +// PriorityMapFunction is a function that computes per-node results for a given node. +// TODO: Figure out the exact API of this method. +// TODO: Change interface{} to a specific type. +type PriorityMapFunction func(pod *v1.Pod, meta interface{}, nodeInfo *schedulernodeinfo.NodeInfo) (schedulerapi.HostPriority, error) + +// PriorityReduceFunction is a function that aggregated per-node results and computes +// final scores for all nodes. +// TODO: Figure out the exact API of this method. +// TODO: Change interface{} to a specific type. +type PriorityReduceFunction func(pod *v1.Pod, meta interface{}, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, result schedulerapi.HostPriorityList) error + +// PriorityMetadataProducer is a function that computes metadata for a given pod. This +// is now used for only for priority functions. For predicates please use PredicateMetadataProducer. +type PriorityMetadataProducer func(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo) interface{} + +// PriorityFunction is a function that computes scores for all nodes. +// DEPRECATED +// Use Map-Reduce pattern for priority functions. +type PriorityFunction func(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, nodes []*v1.Node) (schedulerapi.HostPriorityList, error) + +// PriorityConfig is a config used for a priority function. +type PriorityConfig struct { + Name string + Map PriorityMapFunction + Reduce PriorityReduceFunction + // TODO: Remove it after migrating all functions to + // Map-Reduce pattern. + Function PriorityFunction + Weight int +} + +// EmptyPriorityMetadataProducer returns a no-op PriorityMetadataProducer type. +func EmptyPriorityMetadataProducer(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo) interface{} { + return nil +} diff --git a/pkg/scheduler/algorithm/types_test.go b/pkg/scheduler/algorithm/priorities/types_test.go similarity index 91% rename from pkg/scheduler/algorithm/types_test.go rename to pkg/scheduler/algorithm/priorities/types_test.go index 9f117240d3..9d4250a354 100644 --- a/pkg/scheduler/algorithm/types_test.go +++ b/pkg/scheduler/algorithm/priorities/types_test.go @@ -14,13 +14,14 @@ See the License for the specific language governing permissions and limitations under the License. */ -package algorithm +package priorities import ( "testing" "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/labels" + "k8s.io/kubernetes/pkg/scheduler/algorithm" schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) @@ -39,7 +40,7 @@ func TestEmptyPriorityMetadataProducer(t *testing.T) { t.Errorf("failed to produce empty metadata: got %v, expected nil", metadata) } // Test EmptyControllerLister should return nill - controllerLister := EmptyControllerLister{} + controllerLister := algorithm.EmptyControllerLister{} nilController, nilError := controllerLister.List(fakeLabelSelector) if nilController != nil || nilError != nil { t.Errorf("failed to produce empty controller lister: got %v, expected nil", nilController) @@ -50,14 +51,14 @@ func TestEmptyPriorityMetadataProducer(t *testing.T) { t.Errorf("failed to produce empty controller lister: got %v, expected nil", nilController) } // Test GetPodReplicaSets on empty replica sets should return nill - replicaSetLister := EmptyReplicaSetLister{} + replicaSetLister := algorithm.EmptyReplicaSetLister{} nilRss, nilErrRss := replicaSetLister.GetPodReplicaSets(fakePod) if nilRss != nil || nilErrRss != nil { t.Errorf("failed to produce empty replicaSetLister: got %v, expected nil", nilRss) } // Test GetPodStatefulSets on empty replica sets should return nill - statefulSetLister := EmptyStatefulSetLister{} + statefulSetLister := algorithm.EmptyStatefulSetLister{} nilSSL, nilErrSSL := statefulSetLister.GetPodStatefulSets(fakePod) if nilSSL != nil || nilErrSSL != nil { t.Errorf("failed to produce empty statefulSetLister: got %v, expected nil", nilSSL) diff --git a/pkg/scheduler/algorithm/types.go b/pkg/scheduler/algorithm/types.go index d00951f500..f7a818a2b9 100644 --- a/pkg/scheduler/algorithm/types.go +++ b/pkg/scheduler/algorithm/types.go @@ -22,7 +22,6 @@ import ( policyv1beta1 "k8s.io/api/policy/v1beta1" "k8s.io/apimachinery/pkg/labels" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) // NodeFieldSelectorKeys is a map that: the key are node field selector keys; the values are @@ -31,42 +30,6 @@ var NodeFieldSelectorKeys = map[string]func(*v1.Node) string{ schedulerapi.NodeFieldSelectorKeyNodeName: func(n *v1.Node) string { return n.Name }, } -// PriorityMapFunction is a function that computes per-node results for a given node. -// TODO: Figure out the exact API of this method. -// TODO: Change interface{} to a specific type. -type PriorityMapFunction func(pod *v1.Pod, meta interface{}, nodeInfo *schedulernodeinfo.NodeInfo) (schedulerapi.HostPriority, error) - -// PriorityReduceFunction is a function that aggregated per-node results and computes -// final scores for all nodes. -// TODO: Figure out the exact API of this method. -// TODO: Change interface{} to a specific type. -type PriorityReduceFunction func(pod *v1.Pod, meta interface{}, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, result schedulerapi.HostPriorityList) error - -// PriorityMetadataProducer is a function that computes metadata for a given pod. This -// is now used for only for priority functions. For predicates please use PredicateMetadataProducer. -type PriorityMetadataProducer func(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo) interface{} - -// PriorityFunction is a function that computes scores for all nodes. -// DEPRECATED -// Use Map-Reduce pattern for priority functions. -type PriorityFunction func(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, nodes []*v1.Node) (schedulerapi.HostPriorityList, error) - -// PriorityConfig is a config used for a priority function. -type PriorityConfig struct { - Name string - Map PriorityMapFunction - Reduce PriorityReduceFunction - // TODO: Remove it after migrating all functions to - // Map-Reduce pattern. - Function PriorityFunction - Weight int -} - -// EmptyPriorityMetadataProducer returns a no-op PriorityMetadataProducer type. -func EmptyPriorityMetadataProducer(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo) interface{} { - return nil -} - // NodeLister interface represents anything that can list nodes for a scheduler. type NodeLister interface { // We explicitly return []*v1.Node, instead of v1.NodeList, to avoid diff --git a/pkg/scheduler/algorithmprovider/defaults/register_priorities.go b/pkg/scheduler/algorithmprovider/defaults/register_priorities.go index eeb649787f..afe54da77d 100644 --- a/pkg/scheduler/algorithmprovider/defaults/register_priorities.go +++ b/pkg/scheduler/algorithmprovider/defaults/register_priorities.go @@ -26,7 +26,7 @@ import ( func init() { // Register functions that extract metadata used by priorities computations. factory.RegisterPriorityMetadataProducerFactory( - func(args factory.PluginFactoryArgs) algorithm.PriorityMetadataProducer { + func(args factory.PluginFactoryArgs) priorities.PriorityMetadataProducer { return priorities.NewPriorityMetadataFactory(args.ServiceLister, args.ControllerLister, args.ReplicaSetLister, args.StatefulSetLister) }) @@ -37,7 +37,7 @@ func init() { factory.RegisterPriorityConfigFactory( priorities.ServiceSpreadingPriority, factory.PriorityConfigFactory{ - MapReduceFunction: func(args factory.PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { + MapReduceFunction: func(args factory.PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) { return priorities.NewSelectorSpreadPriority(args.ServiceLister, algorithm.EmptyControllerLister{}, algorithm.EmptyReplicaSetLister{}, algorithm.EmptyStatefulSetLister{}) }, Weight: 1, @@ -58,7 +58,7 @@ func init() { factory.RegisterPriorityConfigFactory( priorities.SelectorSpreadPriority, factory.PriorityConfigFactory{ - MapReduceFunction: func(args factory.PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { + MapReduceFunction: func(args factory.PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) { return priorities.NewSelectorSpreadPriority(args.ServiceLister, args.ControllerLister, args.ReplicaSetLister, args.StatefulSetLister) }, Weight: 1, @@ -69,7 +69,7 @@ func init() { factory.RegisterPriorityConfigFactory( priorities.InterPodAffinityPriority, factory.PriorityConfigFactory{ - Function: func(args factory.PluginFactoryArgs) algorithm.PriorityFunction { + Function: func(args factory.PluginFactoryArgs) priorities.PriorityFunction { return priorities.NewInterPodAffinityPriority(args.NodeInfo, args.NodeLister, args.PodLister, args.HardPodAffinitySymmetricWeight) }, Weight: 1, diff --git a/pkg/scheduler/core/BUILD b/pkg/scheduler/core/BUILD index 00c00804ce..a2ef61a73e 100644 --- a/pkg/scheduler/core/BUILD +++ b/pkg/scheduler/core/BUILD @@ -11,6 +11,7 @@ go_library( deps = [ "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library", + "//pkg/scheduler/algorithm/priorities:go_default_library", "//pkg/scheduler/api:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/queue:go_default_library", diff --git a/pkg/scheduler/core/extender_test.go b/pkg/scheduler/core/extender_test.go index a4c1efed63..3077e58122 100644 --- a/pkg/scheduler/core/extender_test.go +++ b/pkg/scheduler/core/extender_test.go @@ -27,6 +27,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" + "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" schedulerinternalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" @@ -340,7 +341,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) { tests := []struct { name string predicates map[string]predicates.FitPredicate - prioritizers []algorithm.PriorityConfig + prioritizers []priorities.PriorityConfig extenders []FakeExtender nodes []string expectedResult ScheduleResult @@ -348,7 +349,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) { }{ { predicates: map[string]predicates.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, extenders: []FakeExtender{ { predicates: []fitPredicate{truePredicateExtender}, @@ -363,7 +364,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) { }, { predicates: map[string]predicates.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, extenders: []FakeExtender{ { predicates: []fitPredicate{truePredicateExtender}, @@ -378,7 +379,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) { }, { predicates: map[string]predicates.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, extenders: []FakeExtender{ { predicates: []fitPredicate{truePredicateExtender}, @@ -397,7 +398,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) { }, { predicates: map[string]predicates.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, extenders: []FakeExtender{ { predicates: []fitPredicate{machine2PredicateExtender}, @@ -412,7 +413,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) { }, { predicates: map[string]predicates.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, extenders: []FakeExtender{ { predicates: []fitPredicate{truePredicateExtender}, @@ -430,7 +431,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) { }, { predicates: map[string]predicates.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, extenders: []FakeExtender{ { predicates: []fitPredicate{truePredicateExtender}, @@ -453,7 +454,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) { }, { predicates: map[string]predicates.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Function: machine2Prioritizer, Weight: 20}}, + prioritizers: []priorities.PriorityConfig{{Function: machine2Prioritizer, Weight: 20}}, extenders: []FakeExtender{ { predicates: []fitPredicate{truePredicateExtender}, @@ -478,7 +479,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) { // because of the errors from errorPredicateExtender and/or // errorPrioritizerExtender. predicates: map[string]predicates.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Function: machine2Prioritizer, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Function: machine2Prioritizer, Weight: 1}}, extenders: []FakeExtender{ { predicates: []fitPredicate{errorPredicateExtender}, @@ -502,7 +503,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) { // If scheduler did not ignore the extender, the test would fail // because of the errors from errorPredicateExtender. predicates: map[string]predicates.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, extenders: []FakeExtender{ { predicates: []fitPredicate{errorPredicateExtender}, @@ -540,7 +541,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) { test.predicates, predicates.EmptyPredicateMetadataProducer, test.prioritizers, - algorithm.EmptyPriorityMetadataProducer, + priorities.EmptyPriorityMetadataProducer, emptyPluginSet, extenders, nil, diff --git a/pkg/scheduler/core/generic_scheduler.go b/pkg/scheduler/core/generic_scheduler.go index 2f49b0733f..183cf7e900 100644 --- a/pkg/scheduler/core/generic_scheduler.go +++ b/pkg/scheduler/core/generic_scheduler.go @@ -38,6 +38,7 @@ import ( "k8s.io/client-go/util/workqueue" "k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" + "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" schedulerinternalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" @@ -115,7 +116,7 @@ type ScheduleAlgorithm interface { Predicates() map[string]predicates.FitPredicate // Prioritizers returns a slice of priority config. This is exposed for // testing. - Prioritizers() []algorithm.PriorityConfig + Prioritizers() []priorities.PriorityConfig } // ScheduleResult represents the result of one pod scheduled. It will contain @@ -133,9 +134,9 @@ type genericScheduler struct { cache schedulerinternalcache.Cache schedulingQueue internalqueue.SchedulingQueue predicates map[string]predicates.FitPredicate - priorityMetaProducer algorithm.PriorityMetadataProducer + priorityMetaProducer priorities.PriorityMetadataProducer predicateMetaProducer predicates.PredicateMetadataProducer - prioritizers []algorithm.PriorityConfig + prioritizers []priorities.PriorityConfig pluginSet pluginsv1alpha1.PluginSet extenders []algorithm.SchedulerExtender lastNodeIndex uint64 @@ -227,7 +228,7 @@ func (g *genericScheduler) Schedule(pod *v1.Pod, nodeLister algorithm.NodeLister // Prioritizers returns a slice containing all the scheduler's priority // functions and their config. It is exposed for testing only. -func (g *genericScheduler) Prioritizers() []algorithm.PriorityConfig { +func (g *genericScheduler) Prioritizers() []priorities.PriorityConfig { return g.prioritizers } @@ -637,7 +638,7 @@ func PrioritizeNodes( pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, meta interface{}, - priorityConfigs []algorithm.PriorityConfig, + priorityConfigs []priorities.PriorityConfig, nodes []*v1.Node, extenders []algorithm.SchedulerExtender, ) (schedulerapi.HostPriorityList, error) { @@ -1165,8 +1166,8 @@ func NewGenericScheduler( podQueue internalqueue.SchedulingQueue, predicates map[string]predicates.FitPredicate, predicateMetaProducer predicates.PredicateMetadataProducer, - prioritizers []algorithm.PriorityConfig, - priorityMetaProducer algorithm.PriorityMetadataProducer, + prioritizers []priorities.PriorityConfig, + priorityMetaProducer priorities.PriorityMetadataProducer, pluginSet pluginsv1alpha1.PluginSet, extenders []algorithm.SchedulerExtender, volumeBinder *volumebinder.VolumeBinder, diff --git a/pkg/scheduler/core/generic_scheduler_test.go b/pkg/scheduler/core/generic_scheduler_test.go index f72f2026ee..6df4852a6e 100644 --- a/pkg/scheduler/core/generic_scheduler_test.go +++ b/pkg/scheduler/core/generic_scheduler_test.go @@ -35,7 +35,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/kubernetes/pkg/scheduler/algorithm" algorithmpredicates "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" - algorithmpriorities "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" + "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" priorityutil "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/util" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" schedulerinternalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" @@ -239,7 +239,7 @@ func TestGenericScheduler(t *testing.T) { tests := []struct { name string predicates map[string]algorithmpredicates.FitPredicate - prioritizers []algorithm.PriorityConfig + prioritizers []priorities.PriorityConfig alwaysCheckAllPredicates bool nodes []string pvcs []*v1.PersistentVolumeClaim @@ -251,7 +251,7 @@ func TestGenericScheduler(t *testing.T) { }{ { predicates: map[string]algorithmpredicates.FitPredicate{"false": falsePredicate}, - prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, nodes: []string{"machine1", "machine2"}, expectsErr: true, pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "2", UID: types.UID("2")}}, @@ -266,7 +266,7 @@ func TestGenericScheduler(t *testing.T) { }, { predicates: map[string]algorithmpredicates.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, nodes: []string{"machine1", "machine2"}, pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "ignore", UID: types.UID("ignore")}}, expectedHosts: sets.NewString("machine1", "machine2"), @@ -276,7 +276,7 @@ func TestGenericScheduler(t *testing.T) { { // Fits on a machine where the pod ID matches the machine name predicates: map[string]algorithmpredicates.FitPredicate{"matches": matchesPredicate}, - prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, nodes: []string{"machine1", "machine2"}, pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "machine2", UID: types.UID("machine2")}}, expectedHosts: sets.NewString("machine2"), @@ -285,7 +285,7 @@ func TestGenericScheduler(t *testing.T) { }, { predicates: map[string]algorithmpredicates.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Function: numericPriority, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Function: numericPriority, Weight: 1}}, nodes: []string{"3", "2", "1"}, pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "ignore", UID: types.UID("ignore")}}, expectedHosts: sets.NewString("3"), @@ -294,7 +294,7 @@ func TestGenericScheduler(t *testing.T) { }, { predicates: map[string]algorithmpredicates.FitPredicate{"matches": matchesPredicate}, - prioritizers: []algorithm.PriorityConfig{{Function: numericPriority, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Function: numericPriority, Weight: 1}}, nodes: []string{"3", "2", "1"}, pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "2", UID: types.UID("2")}}, expectedHosts: sets.NewString("2"), @@ -303,7 +303,7 @@ func TestGenericScheduler(t *testing.T) { }, { predicates: map[string]algorithmpredicates.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Function: numericPriority, Weight: 1}, {Function: reverseNumericPriority, Weight: 2}}, + prioritizers: []priorities.PriorityConfig{{Function: numericPriority, Weight: 1}, {Function: reverseNumericPriority, Weight: 2}}, nodes: []string{"3", "2", "1"}, pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "2", UID: types.UID("2")}}, expectedHosts: sets.NewString("1"), @@ -312,7 +312,7 @@ func TestGenericScheduler(t *testing.T) { }, { predicates: map[string]algorithmpredicates.FitPredicate{"true": truePredicate, "false": falsePredicate}, - prioritizers: []algorithm.PriorityConfig{{Function: numericPriority, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Function: numericPriority, Weight: 1}}, nodes: []string{"3", "2", "1"}, pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "2", UID: types.UID("2")}}, expectsErr: true, @@ -344,7 +344,7 @@ func TestGenericScheduler(t *testing.T) { }, }, pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "2", UID: types.UID("2")}}, - prioritizers: []algorithm.PriorityConfig{{Function: numericPriority, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Function: numericPriority, Weight: 1}}, nodes: []string{"1", "2"}, expectsErr: true, name: "test 8", @@ -360,7 +360,7 @@ func TestGenericScheduler(t *testing.T) { { // Pod with existing PVC predicates: map[string]algorithmpredicates.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, nodes: []string{"machine1", "machine2"}, pvcs: []*v1.PersistentVolumeClaim{{ObjectMeta: metav1.ObjectMeta{Name: "existingPVC"}}}, pod: &v1.Pod{ @@ -384,7 +384,7 @@ func TestGenericScheduler(t *testing.T) { { // Pod with non existing PVC predicates: map[string]algorithmpredicates.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, nodes: []string{"machine1", "machine2"}, pod: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{Name: "ignore", UID: types.UID("ignore")}, @@ -407,7 +407,7 @@ func TestGenericScheduler(t *testing.T) { { // Pod with deleting PVC predicates: map[string]algorithmpredicates.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, nodes: []string{"machine1", "machine2"}, pvcs: []*v1.PersistentVolumeClaim{{ObjectMeta: metav1.ObjectMeta{Name: "existingPVC", DeletionTimestamp: &metav1.Time{}}}}, pod: &v1.Pod{ @@ -431,7 +431,7 @@ func TestGenericScheduler(t *testing.T) { { // alwaysCheckAllPredicates is true predicates: map[string]algorithmpredicates.FitPredicate{"true": truePredicate, "matches": matchesPredicate, "false": falsePredicate}, - prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, + prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, alwaysCheckAllPredicates: true, nodes: []string{"1"}, pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "2", UID: types.UID("2")}}, @@ -446,7 +446,7 @@ func TestGenericScheduler(t *testing.T) { }, { predicates: map[string]algorithmpredicates.FitPredicate{"true": truePredicate}, - prioritizers: []algorithm.PriorityConfig{{Map: falseMapPriority, Weight: 1}, {Map: trueMapPriority, Reduce: getNodeReducePriority, Weight: 2}}, + prioritizers: []priorities.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", @@ -473,7 +473,7 @@ func TestGenericScheduler(t *testing.T) { test.predicates, algorithmpredicates.EmptyPredicateMetadataProducer, test.prioritizers, - algorithm.EmptyPriorityMetadataProducer, + priorities.EmptyPriorityMetadataProducer, emptyPluginSet, []algorithm.SchedulerExtender{}, nil, @@ -501,7 +501,7 @@ func makeScheduler(predicates map[string]algorithmpredicates.FitPredicate, nodes for _, n := range nodes { cache.AddNode(n) } - prioritizers := []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}} + prioritizers := []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}} s := NewGenericScheduler( cache, @@ -509,7 +509,7 @@ func makeScheduler(predicates map[string]algorithmpredicates.FitPredicate, nodes predicates, algorithmpredicates.EmptyPredicateMetadataProducer, prioritizers, - algorithm.EmptyPriorityMetadataProducer, + priorities.EmptyPriorityMetadataProducer, emptyPluginSet, nil, nil, nil, nil, false, false, schedulerapi.DefaultPercentageOfNodesToScore) @@ -713,21 +713,21 @@ func TestZeroRequest(t *testing.T) { // This should match the configuration in defaultPriorities() in // pkg/scheduler/algorithmprovider/defaults/defaults.go if you want // to test what's actually in production. - priorityConfigs := []algorithm.PriorityConfig{ - {Map: algorithmpriorities.LeastRequestedPriorityMap, Weight: 1}, - {Map: algorithmpriorities.BalancedResourceAllocationMap, Weight: 1}, + priorityConfigs := []priorities.PriorityConfig{ + {Map: priorities.LeastRequestedPriorityMap, Weight: 1}, + {Map: priorities.BalancedResourceAllocationMap, Weight: 1}, } - selectorSpreadPriorityMap, selectorSpreadPriorityReduce := algorithmpriorities.NewSelectorSpreadPriority( + selectorSpreadPriorityMap, selectorSpreadPriorityReduce := priorities.NewSelectorSpreadPriority( schedulertesting.FakeServiceLister([]*v1.Service{}), schedulertesting.FakeControllerLister([]*v1.ReplicationController{}), schedulertesting.FakeReplicaSetLister([]*apps.ReplicaSet{}), schedulertesting.FakeStatefulSetLister([]*apps.StatefulSet{})) - pc := algorithm.PriorityConfig{Map: selectorSpreadPriorityMap, Reduce: selectorSpreadPriorityReduce, Weight: 1} + pc := priorities.PriorityConfig{Map: selectorSpreadPriorityMap, Reduce: selectorSpreadPriorityReduce, Weight: 1} priorityConfigs = append(priorityConfigs, pc) nodeNameToInfo := schedulernodeinfo.CreateNodeNameToInfoMap(test.pods, test.nodes) - metaDataProducer := algorithmpriorities.NewPriorityMetadataFactory( + metaDataProducer := priorities.NewPriorityMetadataFactory( schedulertesting.FakeServiceLister([]*v1.Service{}), schedulertesting.FakeControllerLister([]*v1.ReplicationController{}), schedulertesting.FakeReplicaSetLister([]*apps.ReplicaSet{}), @@ -1433,8 +1433,8 @@ func TestPreempt(t *testing.T) { internalqueue.NewSchedulingQueue(nil), map[string]algorithmpredicates.FitPredicate{"matches": algorithmpredicates.PodFitsResources}, algorithmpredicates.EmptyPredicateMetadataProducer, - []algorithm.PriorityConfig{{Function: numericPriority, Weight: 1}}, - algorithm.EmptyPriorityMetadataProducer, + []priorities.PriorityConfig{{Function: numericPriority, Weight: 1}}, + priorities.EmptyPriorityMetadataProducer, emptyPluginSet, extenders, nil, diff --git a/pkg/scheduler/factory/factory.go b/pkg/scheduler/factory/factory.go index bb2e3ee7a2..d1510a5278 100644 --- a/pkg/scheduler/factory/factory.go +++ b/pkg/scheduler/factory/factory.go @@ -50,6 +50,7 @@ import ( kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" "k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" + "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" "k8s.io/kubernetes/pkg/scheduler/api/validation" "k8s.io/kubernetes/pkg/scheduler/core" @@ -918,7 +919,7 @@ func (n *nodeLister) List() ([]*v1.Node, error) { return n.NodeLister.List(labels.Everything()) } -func (c *configFactory) GetPriorityFunctionConfigs(priorityKeys sets.String) ([]algorithm.PriorityConfig, error) { +func (c *configFactory) GetPriorityFunctionConfigs(priorityKeys sets.String) ([]priorities.PriorityConfig, error) { pluginArgs, err := c.getPluginArgs() if err != nil { return nil, err @@ -927,7 +928,7 @@ func (c *configFactory) GetPriorityFunctionConfigs(priorityKeys sets.String) ([] return getPriorityFunctionConfigs(priorityKeys, *pluginArgs) } -func (c *configFactory) GetPriorityMetadataProducer() (algorithm.PriorityMetadataProducer, error) { +func (c *configFactory) GetPriorityMetadataProducer() (priorities.PriorityMetadataProducer, error) { pluginArgs, err := c.getPluginArgs() if err != nil { return nil, err diff --git a/pkg/scheduler/factory/plugins.go b/pkg/scheduler/factory/plugins.go index 17d7efcfe3..b5127aba55 100644 --- a/pkg/scheduler/factory/plugins.go +++ b/pkg/scheduler/factory/plugins.go @@ -51,7 +51,7 @@ type PluginFactoryArgs struct { } // PriorityMetadataProducerFactory produces PriorityMetadataProducer from the given args. -type PriorityMetadataProducerFactory func(PluginFactoryArgs) algorithm.PriorityMetadataProducer +type PriorityMetadataProducerFactory func(PluginFactoryArgs) priorities.PriorityMetadataProducer // PredicateMetadataProducerFactory produces PredicateMetadataProducer from the given args. type PredicateMetadataProducerFactory func(PluginFactoryArgs) predicates.PredicateMetadataProducer @@ -62,12 +62,12 @@ type FitPredicateFactory func(PluginFactoryArgs) predicates.FitPredicate // PriorityFunctionFactory produces a PriorityConfig from the given args. // DEPRECATED // Use Map-Reduce pattern for priority functions. -type PriorityFunctionFactory func(PluginFactoryArgs) algorithm.PriorityFunction +type PriorityFunctionFactory func(PluginFactoryArgs) priorities.PriorityFunction // PriorityFunctionFactory2 produces map & reduce priority functions // from a given args. // FIXME: Rename to PriorityFunctionFactory. -type PriorityFunctionFactory2 func(PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) +type PriorityFunctionFactory2 func(PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) // PriorityConfigFactory produces a PriorityConfig from the given function and weight type PriorityConfigFactory struct { @@ -270,9 +270,9 @@ func RegisterPredicateMetadataProducerFactory(factory PredicateMetadataProducerF // with which the function was registered. // DEPRECATED // Use Map-Reduce pattern for priority functions. -func RegisterPriorityFunction(name string, function algorithm.PriorityFunction, weight int) string { +func RegisterPriorityFunction(name string, function priorities.PriorityFunction, weight int) string { return RegisterPriorityConfigFactory(name, PriorityConfigFactory{ - Function: func(PluginFactoryArgs) algorithm.PriorityFunction { + Function: func(PluginFactoryArgs) priorities.PriorityFunction { return function }, Weight: weight, @@ -284,11 +284,11 @@ func RegisterPriorityFunction(name string, function algorithm.PriorityFunction, // FIXME: Rename to PriorityFunctionFactory. func RegisterPriorityFunction2( name string, - mapFunction algorithm.PriorityMapFunction, - reduceFunction algorithm.PriorityReduceFunction, + mapFunction priorities.PriorityMapFunction, + reduceFunction priorities.PriorityReduceFunction, weight int) string { return RegisterPriorityConfigFactory(name, PriorityConfigFactory{ - MapReduceFunction: func(PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { + MapReduceFunction: func(PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) { return mapFunction, reduceFunction }, Weight: weight, @@ -315,7 +315,7 @@ func RegisterCustomPriorityFunction(policy schedulerapi.PriorityPolicy) string { if policy.Argument != nil { if policy.Argument.ServiceAntiAffinity != nil { pcf = &PriorityConfigFactory{ - MapReduceFunction: func(args PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { + MapReduceFunction: func(args PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) { return priorities.NewServiceAntiAffinityPriority( args.PodLister, args.ServiceLister, @@ -326,7 +326,7 @@ func RegisterCustomPriorityFunction(policy schedulerapi.PriorityPolicy) string { } } else if policy.Argument.LabelPreference != nil { pcf = &PriorityConfigFactory{ - MapReduceFunction: func(args PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { + MapReduceFunction: func(args PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) { return priorities.NewNodeLabelPriority( policy.Argument.LabelPreference.Label, policy.Argument.LabelPreference.Presence, @@ -336,7 +336,7 @@ func RegisterCustomPriorityFunction(policy schedulerapi.PriorityPolicy) string { } } else if policy.Argument.RequestedToCapacityRatioArguments != nil { pcf = &PriorityConfigFactory{ - MapReduceFunction: func(args PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { + MapReduceFunction: func(args PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) { scoringFunctionShape := buildScoringFunctionShapeFromRequestedToCapacityRatioArguments(policy.Argument.RequestedToCapacityRatioArguments) p := priorities.RequestedToCapacityRatioResourceAllocationPriority(scoringFunctionShape) return p.PriorityMap, nil @@ -431,12 +431,12 @@ func getFitPredicateFunctions(names sets.String, args PluginFactoryArgs) (map[st return predicates, nil } -func getPriorityMetadataProducer(args PluginFactoryArgs) (algorithm.PriorityMetadataProducer, error) { +func getPriorityMetadataProducer(args PluginFactoryArgs) (priorities.PriorityMetadataProducer, error) { schedulerFactoryMutex.Lock() defer schedulerFactoryMutex.Unlock() if priorityMetadataProducer == nil { - return algorithm.EmptyPriorityMetadataProducer, nil + return priorities.EmptyPriorityMetadataProducer, nil } return priorityMetadataProducer(args), nil } @@ -451,25 +451,25 @@ func getPredicateMetadataProducer(args PluginFactoryArgs) (predicates.PredicateM return predicateMetadataProducer(args), nil } -func getPriorityFunctionConfigs(names sets.String, args PluginFactoryArgs) ([]algorithm.PriorityConfig, error) { +func getPriorityFunctionConfigs(names sets.String, args PluginFactoryArgs) ([]priorities.PriorityConfig, error) { schedulerFactoryMutex.Lock() defer schedulerFactoryMutex.Unlock() - configs := []algorithm.PriorityConfig{} + configs := []priorities.PriorityConfig{} for _, name := range names.List() { factory, ok := priorityFunctionMap[name] if !ok { return nil, fmt.Errorf("Invalid priority name %s specified - no corresponding function found", name) } if factory.Function != nil { - configs = append(configs, algorithm.PriorityConfig{ + configs = append(configs, priorities.PriorityConfig{ Name: name, Function: factory.Function(args), Weight: factory.Weight, }) } else { mapFunction, reduceFunction := factory.MapReduceFunction(args) - configs = append(configs, algorithm.PriorityConfig{ + configs = append(configs, priorities.PriorityConfig{ Name: name, Map: mapFunction, Reduce: reduceFunction, @@ -484,7 +484,7 @@ func getPriorityFunctionConfigs(names sets.String, args PluginFactoryArgs) ([]al } // validateSelectedConfigs validates the config weights to avoid the overflow. -func validateSelectedConfigs(configs []algorithm.PriorityConfig) error { +func validateSelectedConfigs(configs []priorities.PriorityConfig) error { var totalPriority int for _, config := range configs { // Checks totalPriority against MaxTotalPriority to avoid overflow diff --git a/pkg/scheduler/factory/plugins_test.go b/pkg/scheduler/factory/plugins_test.go index 9b82056ef8..296933239f 100644 --- a/pkg/scheduler/factory/plugins_test.go +++ b/pkg/scheduler/factory/plugins_test.go @@ -20,7 +20,6 @@ import ( "testing" "github.com/stretchr/testify/assert" - "k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" "k8s.io/kubernetes/pkg/scheduler/api" ) @@ -54,22 +53,22 @@ func TestAlgorithmNameValidation(t *testing.T) { func TestValidatePriorityConfigOverFlow(t *testing.T) { tests := []struct { description string - configs []algorithm.PriorityConfig + configs []priorities.PriorityConfig expected bool }{ { description: "one of the weights is MaxInt", - configs: []algorithm.PriorityConfig{{Weight: api.MaxInt}, {Weight: 5}}, + configs: []priorities.PriorityConfig{{Weight: api.MaxInt}, {Weight: 5}}, expected: true, }, { description: "after multiplication with MaxPriority the weight is larger than MaxWeight", - configs: []algorithm.PriorityConfig{{Weight: api.MaxInt/api.MaxPriority + api.MaxPriority}, {Weight: 5}}, + configs: []priorities.PriorityConfig{{Weight: api.MaxInt/api.MaxPriority + api.MaxPriority}, {Weight: 5}}, expected: true, }, { description: "normal weights", - configs: []algorithm.PriorityConfig{{Weight: 10000}, {Weight: 5}}, + configs: []priorities.PriorityConfig{{Weight: 10000}, {Weight: 5}}, expected: false, }, } diff --git a/pkg/scheduler/scheduler_test.go b/pkg/scheduler/scheduler_test.go index d60a4cea3b..6a816b9faf 100644 --- a/pkg/scheduler/scheduler_test.go +++ b/pkg/scheduler/scheduler_test.go @@ -41,6 +41,7 @@ import ( "k8s.io/kubernetes/pkg/controller/volume/persistentvolume" "k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" + "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" "k8s.io/kubernetes/pkg/scheduler/api" kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/core" @@ -153,7 +154,7 @@ func (es mockScheduler) Schedule(pod *v1.Pod, ml algorithm.NodeLister) (core.Sch func (es mockScheduler) Predicates() map[string]predicates.FitPredicate { return nil } -func (es mockScheduler) Prioritizers() []algorithm.PriorityConfig { +func (es mockScheduler) Prioritizers() []priorities.PriorityConfig { return nil } @@ -638,8 +639,8 @@ func setupTestScheduler(queuedPodStore *clientcache.FIFO, scache schedulerintern nil, predicateMap, predicates.EmptyPredicateMetadataProducer, - []algorithm.PriorityConfig{}, - algorithm.EmptyPriorityMetadataProducer, + []priorities.PriorityConfig{}, + priorities.EmptyPriorityMetadataProducer, &EmptyPluginSet{}, []algorithm.SchedulerExtender{}, nil, @@ -690,8 +691,8 @@ func setupTestSchedulerLongBindingWithRetry(queuedPodStore *clientcache.FIFO, sc nil, predicateMap, predicates.EmptyPredicateMetadataProducer, - []algorithm.PriorityConfig{}, - algorithm.EmptyPriorityMetadataProducer, + []priorities.PriorityConfig{}, + priorities.EmptyPriorityMetadataProducer, &EmptyPluginSet{}, []algorithm.SchedulerExtender{}, nil,