Merge pull request #72079 from sonasingh46/cleanup

refactor(scheduler): Move priority types to priorities package
pull/564/head
Kubernetes Prow Robot 2019-01-15 09:24:15 -08:00 committed by GitHub
commit 14b2014c4a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 159 additions and 145 deletions

View File

@ -46,6 +46,7 @@ go_test(
"//pkg/controller/volume/persistentvolume:go_default_library", "//pkg/controller/volume/persistentvolume:go_default_library",
"//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm:go_default_library",
"//pkg/scheduler/algorithm/predicates: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/api:go_default_library",
"//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/apis/config:go_default_library",
"//pkg/scheduler/core:go_default_library", "//pkg/scheduler/core:go_default_library",

View File

@ -1,10 +1,6 @@
package(default_visibility = ["//visibility:public"]) package(default_visibility = ["//visibility:public"])
load( load("@io_bazel_rules_go//go:def.bzl", "go_library")
"@io_bazel_rules_go//go:def.bzl",
"go_library",
"go_test",
)
go_library( go_library(
name = "go_default_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( filegroup(
name = "package-srcs", name = "package-srcs",
srcs = glob(["**"]), srcs = glob(["**"]),

View File

@ -26,6 +26,7 @@ go_library(
"selector_spreading.go", "selector_spreading.go",
"taint_toleration.go", "taint_toleration.go",
"test_util.go", "test_util.go",
"types.go",
], ],
importpath = "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities", importpath = "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities",
deps = [ deps = [
@ -65,11 +66,13 @@ go_test(
"resource_limits_test.go", "resource_limits_test.go",
"selector_spreading_test.go", "selector_spreading_test.go",
"taint_toleration_test.go", "taint_toleration_test.go",
"types_test.go",
], ],
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//pkg/features:go_default_library", "//pkg/features:go_default_library",
"//pkg/kubelet/apis: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/algorithm/priorities/util:go_default_library",
"//pkg/scheduler/api:go_default_library", "//pkg/scheduler/api:go_default_library",
"//pkg/scheduler/nodeinfo: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/api/core/v1:go_default_library",
"//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/labels:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature: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", "//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
"//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library",

View File

@ -46,7 +46,7 @@ func NewInterPodAffinityPriority(
info predicates.NodeInfo, info predicates.NodeInfo,
nodeLister algorithm.NodeLister, nodeLister algorithm.NodeLister,
podLister algorithm.PodLister, podLister algorithm.PodLister,
hardPodAffinityWeight int32) algorithm.PriorityFunction { hardPodAffinityWeight int32) PriorityFunction {
interPodAffinity := &InterPodAffinity{ interPodAffinity := &InterPodAffinity{
info: info, info: info,
nodeLister: nodeLister, nodeLister: nodeLister,

View File

@ -33,7 +33,7 @@ type PriorityMetadataFactory struct {
} }
// NewPriorityMetadataFactory creates a PriorityMetadataFactory. // 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{ factory := &PriorityMetadataFactory{
serviceLister: serviceLister, serviceLister: serviceLister,
controllerLister: controllerLister, controllerLister: controllerLister,

View File

@ -21,7 +21,6 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/labels"
"k8s.io/kubernetes/pkg/scheduler/algorithm"
schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api"
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
) )
@ -33,7 +32,7 @@ type NodeLabelPrioritizer struct {
} }
// NewNodeLabelPriority creates a NodeLabelPrioritizer. // NewNodeLabelPriority creates a NodeLabelPrioritizer.
func NewNodeLabelPriority(label string, presence bool) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { func NewNodeLabelPriority(label string, presence bool) (PriorityMapFunction, PriorityReduceFunction) {
labelPrioritizer := &NodeLabelPrioritizer{ labelPrioritizer := &NodeLabelPrioritizer{
label: label, label: label,
presence: presence, presence: presence,

View File

@ -18,7 +18,6 @@ package priorities
import ( import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"k8s.io/kubernetes/pkg/scheduler/algorithm"
schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api"
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
) )
@ -26,7 +25,7 @@ import (
// NormalizeReduce generates a PriorityReduceFunction that can normalize the result // NormalizeReduce generates a PriorityReduceFunction that can normalize the result
// scores to [0, maxPriority]. If reverse is set to true, it reverses the scores by // scores to [0, maxPriority]. If reverse is set to true, it reverses the scores by
// subtracting it from maxPriority. // subtracting it from maxPriority.
func NormalizeReduce(maxPriority int, reverse bool) algorithm.PriorityReduceFunction { func NormalizeReduce(maxPriority int, reverse bool) PriorityReduceFunction {
return func( return func(
_ *v1.Pod, _ *v1.Pod,
_ interface{}, _ interface{},

View File

@ -46,7 +46,7 @@ func NewSelectorSpreadPriority(
serviceLister algorithm.ServiceLister, serviceLister algorithm.ServiceLister,
controllerLister algorithm.ControllerLister, controllerLister algorithm.ControllerLister,
replicaSetLister algorithm.ReplicaSetLister, replicaSetLister algorithm.ReplicaSetLister,
statefulSetLister algorithm.StatefulSetLister) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { statefulSetLister algorithm.StatefulSetLister) (PriorityMapFunction, PriorityReduceFunction) {
selectorSpread := &SelectorSpread{ selectorSpread := &SelectorSpread{
serviceLister: serviceLister, serviceLister: serviceLister,
controllerLister: controllerLister, controllerLister: controllerLister,
@ -159,7 +159,7 @@ type ServiceAntiAffinity struct {
} }
// NewServiceAntiAffinityPriority creates a ServiceAntiAffinity. // 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{ antiAffinity := &ServiceAntiAffinity{
podLister: podLister, podLister: podLister,
serviceLister: serviceLister, serviceLister: serviceLister,

View File

@ -20,7 +20,6 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"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/kubernetes/pkg/scheduler/algorithm"
schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api"
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" 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) { return func(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, nodes []*v1.Node) (schedulerapi.HostPriorityList, error) {
result := make(schedulerapi.HostPriorityList, 0, len(nodes)) result := make(schedulerapi.HostPriorityList, 0, len(nodes))
for i := range nodes { for i := range nodes {

View File

@ -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
}

View File

@ -14,13 +14,14 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package algorithm package priorities
import ( import (
"testing" "testing"
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/labels"
"k8s.io/kubernetes/pkg/scheduler/algorithm"
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" 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) t.Errorf("failed to produce empty metadata: got %v, expected nil", metadata)
} }
// Test EmptyControllerLister should return nill // Test EmptyControllerLister should return nill
controllerLister := EmptyControllerLister{} controllerLister := algorithm.EmptyControllerLister{}
nilController, nilError := controllerLister.List(fakeLabelSelector) nilController, nilError := controllerLister.List(fakeLabelSelector)
if nilController != nil || nilError != nil { if nilController != nil || nilError != nil {
t.Errorf("failed to produce empty controller lister: got %v, expected nil", nilController) 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) t.Errorf("failed to produce empty controller lister: got %v, expected nil", nilController)
} }
// Test GetPodReplicaSets on empty replica sets should return nill // Test GetPodReplicaSets on empty replica sets should return nill
replicaSetLister := EmptyReplicaSetLister{} replicaSetLister := algorithm.EmptyReplicaSetLister{}
nilRss, nilErrRss := replicaSetLister.GetPodReplicaSets(fakePod) nilRss, nilErrRss := replicaSetLister.GetPodReplicaSets(fakePod)
if nilRss != nil || nilErrRss != nil { if nilRss != nil || nilErrRss != nil {
t.Errorf("failed to produce empty replicaSetLister: got %v, expected nil", nilRss) t.Errorf("failed to produce empty replicaSetLister: got %v, expected nil", nilRss)
} }
// Test GetPodStatefulSets on empty replica sets should return nill // Test GetPodStatefulSets on empty replica sets should return nill
statefulSetLister := EmptyStatefulSetLister{} statefulSetLister := algorithm.EmptyStatefulSetLister{}
nilSSL, nilErrSSL := statefulSetLister.GetPodStatefulSets(fakePod) nilSSL, nilErrSSL := statefulSetLister.GetPodStatefulSets(fakePod)
if nilSSL != nil || nilErrSSL != nil { if nilSSL != nil || nilErrSSL != nil {
t.Errorf("failed to produce empty statefulSetLister: got %v, expected nil", nilSSL) t.Errorf("failed to produce empty statefulSetLister: got %v, expected nil", nilSSL)

View File

@ -22,7 +22,6 @@ import (
policyv1beta1 "k8s.io/api/policy/v1beta1" policyv1beta1 "k8s.io/api/policy/v1beta1"
"k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/labels"
schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" 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 // 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 }, 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. // NodeLister interface represents anything that can list nodes for a scheduler.
type NodeLister interface { type NodeLister interface {
// We explicitly return []*v1.Node, instead of v1.NodeList, to avoid // We explicitly return []*v1.Node, instead of v1.NodeList, to avoid

View File

@ -26,7 +26,7 @@ import (
func init() { func init() {
// Register functions that extract metadata used by priorities computations. // Register functions that extract metadata used by priorities computations.
factory.RegisterPriorityMetadataProducerFactory( 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) return priorities.NewPriorityMetadataFactory(args.ServiceLister, args.ControllerLister, args.ReplicaSetLister, args.StatefulSetLister)
}) })
@ -37,7 +37,7 @@ func init() {
factory.RegisterPriorityConfigFactory( factory.RegisterPriorityConfigFactory(
priorities.ServiceSpreadingPriority, priorities.ServiceSpreadingPriority,
factory.PriorityConfigFactory{ 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{}) return priorities.NewSelectorSpreadPriority(args.ServiceLister, algorithm.EmptyControllerLister{}, algorithm.EmptyReplicaSetLister{}, algorithm.EmptyStatefulSetLister{})
}, },
Weight: 1, Weight: 1,
@ -58,7 +58,7 @@ func init() {
factory.RegisterPriorityConfigFactory( factory.RegisterPriorityConfigFactory(
priorities.SelectorSpreadPriority, priorities.SelectorSpreadPriority,
factory.PriorityConfigFactory{ 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) return priorities.NewSelectorSpreadPriority(args.ServiceLister, args.ControllerLister, args.ReplicaSetLister, args.StatefulSetLister)
}, },
Weight: 1, Weight: 1,
@ -69,7 +69,7 @@ func init() {
factory.RegisterPriorityConfigFactory( factory.RegisterPriorityConfigFactory(
priorities.InterPodAffinityPriority, priorities.InterPodAffinityPriority,
factory.PriorityConfigFactory{ 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) return priorities.NewInterPodAffinityPriority(args.NodeInfo, args.NodeLister, args.PodLister, args.HardPodAffinitySymmetricWeight)
}, },
Weight: 1, Weight: 1,

View File

@ -11,6 +11,7 @@ go_library(
deps = [ deps = [
"//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm:go_default_library",
"//pkg/scheduler/algorithm/predicates: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/api:go_default_library",
"//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/cache:go_default_library",
"//pkg/scheduler/internal/queue:go_default_library", "//pkg/scheduler/internal/queue:go_default_library",

View File

@ -27,6 +27,7 @@ import (
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
"k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm"
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api"
schedulerinternalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" schedulerinternalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue"
@ -340,7 +341,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
predicates map[string]predicates.FitPredicate predicates map[string]predicates.FitPredicate
prioritizers []algorithm.PriorityConfig prioritizers []priorities.PriorityConfig
extenders []FakeExtender extenders []FakeExtender
nodes []string nodes []string
expectedResult ScheduleResult expectedResult ScheduleResult
@ -348,7 +349,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
}{ }{
{ {
predicates: map[string]predicates.FitPredicate{"true": truePredicate}, predicates: map[string]predicates.FitPredicate{"true": truePredicate},
prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
extenders: []FakeExtender{ extenders: []FakeExtender{
{ {
predicates: []fitPredicate{truePredicateExtender}, predicates: []fitPredicate{truePredicateExtender},
@ -363,7 +364,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
}, },
{ {
predicates: map[string]predicates.FitPredicate{"true": truePredicate}, predicates: map[string]predicates.FitPredicate{"true": truePredicate},
prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
extenders: []FakeExtender{ extenders: []FakeExtender{
{ {
predicates: []fitPredicate{truePredicateExtender}, predicates: []fitPredicate{truePredicateExtender},
@ -378,7 +379,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
}, },
{ {
predicates: map[string]predicates.FitPredicate{"true": truePredicate}, predicates: map[string]predicates.FitPredicate{"true": truePredicate},
prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
extenders: []FakeExtender{ extenders: []FakeExtender{
{ {
predicates: []fitPredicate{truePredicateExtender}, predicates: []fitPredicate{truePredicateExtender},
@ -397,7 +398,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
}, },
{ {
predicates: map[string]predicates.FitPredicate{"true": truePredicate}, predicates: map[string]predicates.FitPredicate{"true": truePredicate},
prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
extenders: []FakeExtender{ extenders: []FakeExtender{
{ {
predicates: []fitPredicate{machine2PredicateExtender}, predicates: []fitPredicate{machine2PredicateExtender},
@ -412,7 +413,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
}, },
{ {
predicates: map[string]predicates.FitPredicate{"true": truePredicate}, predicates: map[string]predicates.FitPredicate{"true": truePredicate},
prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
extenders: []FakeExtender{ extenders: []FakeExtender{
{ {
predicates: []fitPredicate{truePredicateExtender}, predicates: []fitPredicate{truePredicateExtender},
@ -430,7 +431,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
}, },
{ {
predicates: map[string]predicates.FitPredicate{"true": truePredicate}, predicates: map[string]predicates.FitPredicate{"true": truePredicate},
prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
extenders: []FakeExtender{ extenders: []FakeExtender{
{ {
predicates: []fitPredicate{truePredicateExtender}, predicates: []fitPredicate{truePredicateExtender},
@ -453,7 +454,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
}, },
{ {
predicates: map[string]predicates.FitPredicate{"true": truePredicate}, predicates: map[string]predicates.FitPredicate{"true": truePredicate},
prioritizers: []algorithm.PriorityConfig{{Function: machine2Prioritizer, Weight: 20}}, prioritizers: []priorities.PriorityConfig{{Function: machine2Prioritizer, Weight: 20}},
extenders: []FakeExtender{ extenders: []FakeExtender{
{ {
predicates: []fitPredicate{truePredicateExtender}, predicates: []fitPredicate{truePredicateExtender},
@ -478,7 +479,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
// because of the errors from errorPredicateExtender and/or // because of the errors from errorPredicateExtender and/or
// errorPrioritizerExtender. // errorPrioritizerExtender.
predicates: map[string]predicates.FitPredicate{"true": truePredicate}, predicates: map[string]predicates.FitPredicate{"true": truePredicate},
prioritizers: []algorithm.PriorityConfig{{Function: machine2Prioritizer, Weight: 1}}, prioritizers: []priorities.PriorityConfig{{Function: machine2Prioritizer, Weight: 1}},
extenders: []FakeExtender{ extenders: []FakeExtender{
{ {
predicates: []fitPredicate{errorPredicateExtender}, predicates: []fitPredicate{errorPredicateExtender},
@ -502,7 +503,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
// If scheduler did not ignore the extender, the test would fail // If scheduler did not ignore the extender, the test would fail
// because of the errors from errorPredicateExtender. // because of the errors from errorPredicateExtender.
predicates: map[string]predicates.FitPredicate{"true": truePredicate}, predicates: map[string]predicates.FitPredicate{"true": truePredicate},
prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}, prioritizers: []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
extenders: []FakeExtender{ extenders: []FakeExtender{
{ {
predicates: []fitPredicate{errorPredicateExtender}, predicates: []fitPredicate{errorPredicateExtender},
@ -540,7 +541,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
test.predicates, test.predicates,
predicates.EmptyPredicateMetadataProducer, predicates.EmptyPredicateMetadataProducer,
test.prioritizers, test.prioritizers,
algorithm.EmptyPriorityMetadataProducer, priorities.EmptyPriorityMetadataProducer,
emptyPluginSet, emptyPluginSet,
extenders, extenders,
nil, nil,

View File

@ -38,6 +38,7 @@ import (
"k8s.io/client-go/util/workqueue" "k8s.io/client-go/util/workqueue"
"k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm"
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api"
schedulerinternalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" schedulerinternalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue"
@ -115,7 +116,7 @@ type ScheduleAlgorithm interface {
Predicates() map[string]predicates.FitPredicate Predicates() map[string]predicates.FitPredicate
// Prioritizers returns a slice of priority config. This is exposed for // Prioritizers returns a slice of priority config. This is exposed for
// testing. // testing.
Prioritizers() []algorithm.PriorityConfig Prioritizers() []priorities.PriorityConfig
} }
// ScheduleResult represents the result of one pod scheduled. It will contain // ScheduleResult represents the result of one pod scheduled. It will contain
@ -133,9 +134,9 @@ type genericScheduler struct {
cache schedulerinternalcache.Cache cache schedulerinternalcache.Cache
schedulingQueue internalqueue.SchedulingQueue schedulingQueue internalqueue.SchedulingQueue
predicates map[string]predicates.FitPredicate predicates map[string]predicates.FitPredicate
priorityMetaProducer algorithm.PriorityMetadataProducer priorityMetaProducer priorities.PriorityMetadataProducer
predicateMetaProducer predicates.PredicateMetadataProducer predicateMetaProducer predicates.PredicateMetadataProducer
prioritizers []algorithm.PriorityConfig prioritizers []priorities.PriorityConfig
pluginSet pluginsv1alpha1.PluginSet pluginSet pluginsv1alpha1.PluginSet
extenders []algorithm.SchedulerExtender extenders []algorithm.SchedulerExtender
lastNodeIndex uint64 lastNodeIndex uint64
@ -230,7 +231,7 @@ func (g *genericScheduler) Schedule(pod *v1.Pod, nodeLister algorithm.NodeLister
// Prioritizers returns a slice containing all the scheduler's priority // Prioritizers returns a slice containing all the scheduler's priority
// functions and their config. It is exposed for testing only. // 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 return g.prioritizers
} }
@ -643,7 +644,7 @@ func PrioritizeNodes(
pod *v1.Pod, pod *v1.Pod,
nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo,
meta interface{}, meta interface{},
priorityConfigs []algorithm.PriorityConfig, priorityConfigs []priorities.PriorityConfig,
nodes []*v1.Node, nodes []*v1.Node,
extenders []algorithm.SchedulerExtender, extenders []algorithm.SchedulerExtender,
) (schedulerapi.HostPriorityList, error) { ) (schedulerapi.HostPriorityList, error) {
@ -1171,8 +1172,8 @@ func NewGenericScheduler(
podQueue internalqueue.SchedulingQueue, podQueue internalqueue.SchedulingQueue,
predicates map[string]predicates.FitPredicate, predicates map[string]predicates.FitPredicate,
predicateMetaProducer predicates.PredicateMetadataProducer, predicateMetaProducer predicates.PredicateMetadataProducer,
prioritizers []algorithm.PriorityConfig, prioritizers []priorities.PriorityConfig,
priorityMetaProducer algorithm.PriorityMetadataProducer, priorityMetaProducer priorities.PriorityMetadataProducer,
pluginSet pluginsv1alpha1.PluginSet, pluginSet pluginsv1alpha1.PluginSet,
extenders []algorithm.SchedulerExtender, extenders []algorithm.SchedulerExtender,
volumeBinder *volumebinder.VolumeBinder, volumeBinder *volumebinder.VolumeBinder,

View File

@ -35,7 +35,7 @@ import (
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
"k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm"
algorithmpredicates "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" 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" priorityutil "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/util"
schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api"
schedulerinternalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" schedulerinternalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
@ -239,7 +239,7 @@ func TestGenericScheduler(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
predicates map[string]algorithmpredicates.FitPredicate predicates map[string]algorithmpredicates.FitPredicate
prioritizers []algorithm.PriorityConfig prioritizers []priorities.PriorityConfig
alwaysCheckAllPredicates bool alwaysCheckAllPredicates bool
nodes []string nodes []string
pvcs []*v1.PersistentVolumeClaim pvcs []*v1.PersistentVolumeClaim
@ -251,7 +251,7 @@ func TestGenericScheduler(t *testing.T) {
}{ }{
{ {
predicates: map[string]algorithmpredicates.FitPredicate{"false": falsePredicate}, 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"}, nodes: []string{"machine1", "machine2"},
expectsErr: true, expectsErr: true,
pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "2", UID: types.UID("2")}}, 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}, 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"}, nodes: []string{"machine1", "machine2"},
pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "ignore", UID: types.UID("ignore")}}, pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "ignore", UID: types.UID("ignore")}},
expectedHosts: sets.NewString("machine1", "machine2"), 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 // Fits on a machine where the pod ID matches the machine name
predicates: map[string]algorithmpredicates.FitPredicate{"matches": matchesPredicate}, 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"}, nodes: []string{"machine1", "machine2"},
pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "machine2", UID: types.UID("machine2")}}, pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "machine2", UID: types.UID("machine2")}},
expectedHosts: sets.NewString("machine2"), expectedHosts: sets.NewString("machine2"),
@ -285,7 +285,7 @@ func TestGenericScheduler(t *testing.T) {
}, },
{ {
predicates: map[string]algorithmpredicates.FitPredicate{"true": truePredicate}, 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"}, nodes: []string{"3", "2", "1"},
pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "ignore", UID: types.UID("ignore")}}, pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "ignore", UID: types.UID("ignore")}},
expectedHosts: sets.NewString("3"), expectedHosts: sets.NewString("3"),
@ -294,7 +294,7 @@ func TestGenericScheduler(t *testing.T) {
}, },
{ {
predicates: map[string]algorithmpredicates.FitPredicate{"matches": matchesPredicate}, 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"}, nodes: []string{"3", "2", "1"},
pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "2", UID: types.UID("2")}}, pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "2", UID: types.UID("2")}},
expectedHosts: sets.NewString("2"), expectedHosts: sets.NewString("2"),
@ -303,7 +303,7 @@ func TestGenericScheduler(t *testing.T) {
}, },
{ {
predicates: map[string]algorithmpredicates.FitPredicate{"true": truePredicate}, 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"}, nodes: []string{"3", "2", "1"},
pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "2", UID: types.UID("2")}}, pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "2", UID: types.UID("2")}},
expectedHosts: sets.NewString("1"), expectedHosts: sets.NewString("1"),
@ -312,7 +312,7 @@ func TestGenericScheduler(t *testing.T) {
}, },
{ {
predicates: map[string]algorithmpredicates.FitPredicate{"true": truePredicate, "false": falsePredicate}, 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"}, nodes: []string{"3", "2", "1"},
pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "2", UID: types.UID("2")}}, pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "2", UID: types.UID("2")}},
expectsErr: true, expectsErr: true,
@ -344,7 +344,7 @@ func TestGenericScheduler(t *testing.T) {
}, },
}, },
pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "2", UID: types.UID("2")}}, 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"}, nodes: []string{"1", "2"},
expectsErr: true, expectsErr: true,
name: "test 8", name: "test 8",
@ -360,7 +360,7 @@ func TestGenericScheduler(t *testing.T) {
{ {
// Pod with existing PVC // Pod with existing PVC
predicates: map[string]algorithmpredicates.FitPredicate{"true": truePredicate}, 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"}, nodes: []string{"machine1", "machine2"},
pvcs: []*v1.PersistentVolumeClaim{{ObjectMeta: metav1.ObjectMeta{Name: "existingPVC"}}}, pvcs: []*v1.PersistentVolumeClaim{{ObjectMeta: metav1.ObjectMeta{Name: "existingPVC"}}},
pod: &v1.Pod{ pod: &v1.Pod{
@ -384,7 +384,7 @@ func TestGenericScheduler(t *testing.T) {
{ {
// Pod with non existing PVC // Pod with non existing PVC
predicates: map[string]algorithmpredicates.FitPredicate{"true": truePredicate}, 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"}, nodes: []string{"machine1", "machine2"},
pod: &v1.Pod{ pod: &v1.Pod{
ObjectMeta: metav1.ObjectMeta{Name: "ignore", UID: types.UID("ignore")}, ObjectMeta: metav1.ObjectMeta{Name: "ignore", UID: types.UID("ignore")},
@ -407,7 +407,7 @@ func TestGenericScheduler(t *testing.T) {
{ {
// Pod with deleting PVC // Pod with deleting PVC
predicates: map[string]algorithmpredicates.FitPredicate{"true": truePredicate}, 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"}, nodes: []string{"machine1", "machine2"},
pvcs: []*v1.PersistentVolumeClaim{{ObjectMeta: metav1.ObjectMeta{Name: "existingPVC", DeletionTimestamp: &metav1.Time{}}}}, pvcs: []*v1.PersistentVolumeClaim{{ObjectMeta: metav1.ObjectMeta{Name: "existingPVC", DeletionTimestamp: &metav1.Time{}}}},
pod: &v1.Pod{ pod: &v1.Pod{
@ -431,7 +431,7 @@ func TestGenericScheduler(t *testing.T) {
{ {
// alwaysCheckAllPredicates is true // alwaysCheckAllPredicates is true
predicates: map[string]algorithmpredicates.FitPredicate{"true": truePredicate, "matches": matchesPredicate, "false": falsePredicate}, 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, alwaysCheckAllPredicates: true,
nodes: []string{"1"}, nodes: []string{"1"},
pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "2", UID: types.UID("2")}}, 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}, 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"}, nodes: []string{"2", "1"},
pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "2"}}, pod: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "2"}},
name: "test error with priority map", name: "test error with priority map",
@ -473,7 +473,7 @@ func TestGenericScheduler(t *testing.T) {
test.predicates, test.predicates,
algorithmpredicates.EmptyPredicateMetadataProducer, algorithmpredicates.EmptyPredicateMetadataProducer,
test.prioritizers, test.prioritizers,
algorithm.EmptyPriorityMetadataProducer, priorities.EmptyPriorityMetadataProducer,
emptyPluginSet, emptyPluginSet,
[]algorithm.SchedulerExtender{}, []algorithm.SchedulerExtender{},
nil, nil,
@ -501,7 +501,7 @@ func makeScheduler(predicates map[string]algorithmpredicates.FitPredicate, nodes
for _, n := range nodes { for _, n := range nodes {
cache.AddNode(n) cache.AddNode(n)
} }
prioritizers := []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}} prioritizers := []priorities.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}}
s := NewGenericScheduler( s := NewGenericScheduler(
cache, cache,
@ -509,7 +509,7 @@ func makeScheduler(predicates map[string]algorithmpredicates.FitPredicate, nodes
predicates, predicates,
algorithmpredicates.EmptyPredicateMetadataProducer, algorithmpredicates.EmptyPredicateMetadataProducer,
prioritizers, prioritizers,
algorithm.EmptyPriorityMetadataProducer, priorities.EmptyPriorityMetadataProducer,
emptyPluginSet, emptyPluginSet,
nil, nil, nil, nil, false, false, nil, nil, nil, nil, false, false,
schedulerapi.DefaultPercentageOfNodesToScore) schedulerapi.DefaultPercentageOfNodesToScore)
@ -713,21 +713,21 @@ func TestZeroRequest(t *testing.T) {
// This should match the configuration in defaultPriorities() in // This should match the configuration in defaultPriorities() in
// pkg/scheduler/algorithmprovider/defaults/defaults.go if you want // pkg/scheduler/algorithmprovider/defaults/defaults.go if you want
// to test what's actually in production. // to test what's actually in production.
priorityConfigs := []algorithm.PriorityConfig{ priorityConfigs := []priorities.PriorityConfig{
{Map: algorithmpriorities.LeastRequestedPriorityMap, Weight: 1}, {Map: priorities.LeastRequestedPriorityMap, Weight: 1},
{Map: algorithmpriorities.BalancedResourceAllocationMap, Weight: 1}, {Map: priorities.BalancedResourceAllocationMap, Weight: 1},
} }
selectorSpreadPriorityMap, selectorSpreadPriorityReduce := algorithmpriorities.NewSelectorSpreadPriority( selectorSpreadPriorityMap, selectorSpreadPriorityReduce := priorities.NewSelectorSpreadPriority(
schedulertesting.FakeServiceLister([]*v1.Service{}), schedulertesting.FakeServiceLister([]*v1.Service{}),
schedulertesting.FakeControllerLister([]*v1.ReplicationController{}), schedulertesting.FakeControllerLister([]*v1.ReplicationController{}),
schedulertesting.FakeReplicaSetLister([]*apps.ReplicaSet{}), schedulertesting.FakeReplicaSetLister([]*apps.ReplicaSet{}),
schedulertesting.FakeStatefulSetLister([]*apps.StatefulSet{})) 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) priorityConfigs = append(priorityConfigs, pc)
nodeNameToInfo := schedulernodeinfo.CreateNodeNameToInfoMap(test.pods, test.nodes) nodeNameToInfo := schedulernodeinfo.CreateNodeNameToInfoMap(test.pods, test.nodes)
metaDataProducer := algorithmpriorities.NewPriorityMetadataFactory( metaDataProducer := priorities.NewPriorityMetadataFactory(
schedulertesting.FakeServiceLister([]*v1.Service{}), schedulertesting.FakeServiceLister([]*v1.Service{}),
schedulertesting.FakeControllerLister([]*v1.ReplicationController{}), schedulertesting.FakeControllerLister([]*v1.ReplicationController{}),
schedulertesting.FakeReplicaSetLister([]*apps.ReplicaSet{}), schedulertesting.FakeReplicaSetLister([]*apps.ReplicaSet{}),
@ -1434,8 +1434,8 @@ func TestPreempt(t *testing.T) {
internalqueue.NewSchedulingQueue(nil), internalqueue.NewSchedulingQueue(nil),
map[string]algorithmpredicates.FitPredicate{"matches": algorithmpredicates.PodFitsResources}, map[string]algorithmpredicates.FitPredicate{"matches": algorithmpredicates.PodFitsResources},
algorithmpredicates.EmptyPredicateMetadataProducer, algorithmpredicates.EmptyPredicateMetadataProducer,
[]algorithm.PriorityConfig{{Function: numericPriority, Weight: 1}}, []priorities.PriorityConfig{{Function: numericPriority, Weight: 1}},
algorithm.EmptyPriorityMetadataProducer, priorities.EmptyPriorityMetadataProducer,
emptyPluginSet, emptyPluginSet,
extenders, extenders,
nil, nil,

View File

@ -50,6 +50,7 @@ import (
kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
"k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm"
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api"
"k8s.io/kubernetes/pkg/scheduler/api/validation" "k8s.io/kubernetes/pkg/scheduler/api/validation"
"k8s.io/kubernetes/pkg/scheduler/core" "k8s.io/kubernetes/pkg/scheduler/core"
@ -916,7 +917,7 @@ func (n *nodeLister) List() ([]*v1.Node, error) {
return n.NodeLister.List(labels.Everything()) 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() pluginArgs, err := c.getPluginArgs()
if err != nil { if err != nil {
return nil, err return nil, err
@ -925,7 +926,7 @@ func (c *configFactory) GetPriorityFunctionConfigs(priorityKeys sets.String) ([]
return getPriorityFunctionConfigs(priorityKeys, *pluginArgs) return getPriorityFunctionConfigs(priorityKeys, *pluginArgs)
} }
func (c *configFactory) GetPriorityMetadataProducer() (algorithm.PriorityMetadataProducer, error) { func (c *configFactory) GetPriorityMetadataProducer() (priorities.PriorityMetadataProducer, error) {
pluginArgs, err := c.getPluginArgs() pluginArgs, err := c.getPluginArgs()
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -51,7 +51,7 @@ type PluginFactoryArgs struct {
} }
// PriorityMetadataProducerFactory produces PriorityMetadataProducer from the given args. // 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. // PredicateMetadataProducerFactory produces PredicateMetadataProducer from the given args.
type PredicateMetadataProducerFactory func(PluginFactoryArgs) predicates.PredicateMetadataProducer type PredicateMetadataProducerFactory func(PluginFactoryArgs) predicates.PredicateMetadataProducer
@ -62,12 +62,12 @@ type FitPredicateFactory func(PluginFactoryArgs) predicates.FitPredicate
// PriorityFunctionFactory produces a PriorityConfig from the given args. // PriorityFunctionFactory produces a PriorityConfig from the given args.
// DEPRECATED // DEPRECATED
// Use Map-Reduce pattern for priority functions. // 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 // PriorityFunctionFactory2 produces map & reduce priority functions
// from a given args. // from a given args.
// FIXME: Rename to PriorityFunctionFactory. // 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 // PriorityConfigFactory produces a PriorityConfig from the given function and weight
type PriorityConfigFactory struct { type PriorityConfigFactory struct {
@ -270,9 +270,9 @@ func RegisterPredicateMetadataProducerFactory(factory PredicateMetadataProducerF
// with which the function was registered. // with which the function was registered.
// DEPRECATED // DEPRECATED
// Use Map-Reduce pattern for priority functions. // 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{ return RegisterPriorityConfigFactory(name, PriorityConfigFactory{
Function: func(PluginFactoryArgs) algorithm.PriorityFunction { Function: func(PluginFactoryArgs) priorities.PriorityFunction {
return function return function
}, },
Weight: weight, Weight: weight,
@ -284,11 +284,11 @@ func RegisterPriorityFunction(name string, function algorithm.PriorityFunction,
// FIXME: Rename to PriorityFunctionFactory. // FIXME: Rename to PriorityFunctionFactory.
func RegisterPriorityFunction2( func RegisterPriorityFunction2(
name string, name string,
mapFunction algorithm.PriorityMapFunction, mapFunction priorities.PriorityMapFunction,
reduceFunction algorithm.PriorityReduceFunction, reduceFunction priorities.PriorityReduceFunction,
weight int) string { weight int) string {
return RegisterPriorityConfigFactory(name, PriorityConfigFactory{ return RegisterPriorityConfigFactory(name, PriorityConfigFactory{
MapReduceFunction: func(PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { MapReduceFunction: func(PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) {
return mapFunction, reduceFunction return mapFunction, reduceFunction
}, },
Weight: weight, Weight: weight,
@ -315,7 +315,7 @@ func RegisterCustomPriorityFunction(policy schedulerapi.PriorityPolicy) string {
if policy.Argument != nil { if policy.Argument != nil {
if policy.Argument.ServiceAntiAffinity != nil { if policy.Argument.ServiceAntiAffinity != nil {
pcf = &PriorityConfigFactory{ pcf = &PriorityConfigFactory{
MapReduceFunction: func(args PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { MapReduceFunction: func(args PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) {
return priorities.NewServiceAntiAffinityPriority( return priorities.NewServiceAntiAffinityPriority(
args.PodLister, args.PodLister,
args.ServiceLister, args.ServiceLister,
@ -326,7 +326,7 @@ func RegisterCustomPriorityFunction(policy schedulerapi.PriorityPolicy) string {
} }
} else if policy.Argument.LabelPreference != nil { } else if policy.Argument.LabelPreference != nil {
pcf = &PriorityConfigFactory{ pcf = &PriorityConfigFactory{
MapReduceFunction: func(args PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { MapReduceFunction: func(args PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) {
return priorities.NewNodeLabelPriority( return priorities.NewNodeLabelPriority(
policy.Argument.LabelPreference.Label, policy.Argument.LabelPreference.Label,
policy.Argument.LabelPreference.Presence, policy.Argument.LabelPreference.Presence,
@ -336,7 +336,7 @@ func RegisterCustomPriorityFunction(policy schedulerapi.PriorityPolicy) string {
} }
} else if policy.Argument.RequestedToCapacityRatioArguments != nil { } else if policy.Argument.RequestedToCapacityRatioArguments != nil {
pcf = &PriorityConfigFactory{ pcf = &PriorityConfigFactory{
MapReduceFunction: func(args PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction) { MapReduceFunction: func(args PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) {
scoringFunctionShape := buildScoringFunctionShapeFromRequestedToCapacityRatioArguments(policy.Argument.RequestedToCapacityRatioArguments) scoringFunctionShape := buildScoringFunctionShapeFromRequestedToCapacityRatioArguments(policy.Argument.RequestedToCapacityRatioArguments)
p := priorities.RequestedToCapacityRatioResourceAllocationPriority(scoringFunctionShape) p := priorities.RequestedToCapacityRatioResourceAllocationPriority(scoringFunctionShape)
return p.PriorityMap, nil return p.PriorityMap, nil
@ -431,12 +431,12 @@ func getFitPredicateFunctions(names sets.String, args PluginFactoryArgs) (map[st
return predicates, nil return predicates, nil
} }
func getPriorityMetadataProducer(args PluginFactoryArgs) (algorithm.PriorityMetadataProducer, error) { func getPriorityMetadataProducer(args PluginFactoryArgs) (priorities.PriorityMetadataProducer, error) {
schedulerFactoryMutex.Lock() schedulerFactoryMutex.Lock()
defer schedulerFactoryMutex.Unlock() defer schedulerFactoryMutex.Unlock()
if priorityMetadataProducer == nil { if priorityMetadataProducer == nil {
return algorithm.EmptyPriorityMetadataProducer, nil return priorities.EmptyPriorityMetadataProducer, nil
} }
return priorityMetadataProducer(args), nil return priorityMetadataProducer(args), nil
} }
@ -451,25 +451,25 @@ func getPredicateMetadataProducer(args PluginFactoryArgs) (predicates.PredicateM
return predicateMetadataProducer(args), nil 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() schedulerFactoryMutex.Lock()
defer schedulerFactoryMutex.Unlock() defer schedulerFactoryMutex.Unlock()
configs := []algorithm.PriorityConfig{} configs := []priorities.PriorityConfig{}
for _, name := range names.List() { for _, name := range names.List() {
factory, ok := priorityFunctionMap[name] factory, ok := priorityFunctionMap[name]
if !ok { if !ok {
return nil, fmt.Errorf("Invalid priority name %s specified - no corresponding function found", name) return nil, fmt.Errorf("Invalid priority name %s specified - no corresponding function found", name)
} }
if factory.Function != nil { if factory.Function != nil {
configs = append(configs, algorithm.PriorityConfig{ configs = append(configs, priorities.PriorityConfig{
Name: name, Name: name,
Function: factory.Function(args), Function: factory.Function(args),
Weight: factory.Weight, Weight: factory.Weight,
}) })
} else { } else {
mapFunction, reduceFunction := factory.MapReduceFunction(args) mapFunction, reduceFunction := factory.MapReduceFunction(args)
configs = append(configs, algorithm.PriorityConfig{ configs = append(configs, priorities.PriorityConfig{
Name: name, Name: name,
Map: mapFunction, Map: mapFunction,
Reduce: reduceFunction, Reduce: reduceFunction,
@ -484,7 +484,7 @@ func getPriorityFunctionConfigs(names sets.String, args PluginFactoryArgs) ([]al
} }
// validateSelectedConfigs validates the config weights to avoid the overflow. // validateSelectedConfigs validates the config weights to avoid the overflow.
func validateSelectedConfigs(configs []algorithm.PriorityConfig) error { func validateSelectedConfigs(configs []priorities.PriorityConfig) error {
var totalPriority int var totalPriority int
for _, config := range configs { for _, config := range configs {
// Checks totalPriority against MaxTotalPriority to avoid overflow // Checks totalPriority against MaxTotalPriority to avoid overflow

View File

@ -20,7 +20,6 @@ import (
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"k8s.io/kubernetes/pkg/scheduler/algorithm"
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
"k8s.io/kubernetes/pkg/scheduler/api" "k8s.io/kubernetes/pkg/scheduler/api"
) )
@ -54,22 +53,22 @@ func TestAlgorithmNameValidation(t *testing.T) {
func TestValidatePriorityConfigOverFlow(t *testing.T) { func TestValidatePriorityConfigOverFlow(t *testing.T) {
tests := []struct { tests := []struct {
description string description string
configs []algorithm.PriorityConfig configs []priorities.PriorityConfig
expected bool expected bool
}{ }{
{ {
description: "one of the weights is MaxInt", 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, expected: true,
}, },
{ {
description: "after multiplication with MaxPriority the weight is larger than MaxWeight", 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, expected: true,
}, },
{ {
description: "normal weights", description: "normal weights",
configs: []algorithm.PriorityConfig{{Weight: 10000}, {Weight: 5}}, configs: []priorities.PriorityConfig{{Weight: 10000}, {Weight: 5}},
expected: false, expected: false,
}, },
} }

View File

@ -41,6 +41,7 @@ import (
"k8s.io/kubernetes/pkg/controller/volume/persistentvolume" "k8s.io/kubernetes/pkg/controller/volume/persistentvolume"
"k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm"
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
"k8s.io/kubernetes/pkg/scheduler/api" "k8s.io/kubernetes/pkg/scheduler/api"
kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config"
"k8s.io/kubernetes/pkg/scheduler/core" "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 { func (es mockScheduler) Predicates() map[string]predicates.FitPredicate {
return nil return nil
} }
func (es mockScheduler) Prioritizers() []algorithm.PriorityConfig { func (es mockScheduler) Prioritizers() []priorities.PriorityConfig {
return nil return nil
} }
@ -635,8 +636,8 @@ func setupTestScheduler(queuedPodStore *clientcache.FIFO, scache schedulerintern
nil, nil,
predicateMap, predicateMap,
predicates.EmptyPredicateMetadataProducer, predicates.EmptyPredicateMetadataProducer,
[]algorithm.PriorityConfig{}, []priorities.PriorityConfig{},
algorithm.EmptyPriorityMetadataProducer, priorities.EmptyPriorityMetadataProducer,
&EmptyPluginSet{}, &EmptyPluginSet{},
[]algorithm.SchedulerExtender{}, []algorithm.SchedulerExtender{},
nil, nil,
@ -686,8 +687,8 @@ func setupTestSchedulerLongBindingWithRetry(queuedPodStore *clientcache.FIFO, sc
nil, nil,
predicateMap, predicateMap,
predicates.EmptyPredicateMetadataProducer, predicates.EmptyPredicateMetadataProducer,
[]algorithm.PriorityConfig{}, []priorities.PriorityConfig{},
algorithm.EmptyPriorityMetadataProducer, priorities.EmptyPriorityMetadataProducer,
&EmptyPluginSet{}, &EmptyPluginSet{},
[]algorithm.SchedulerExtender{}, []algorithm.SchedulerExtender{},
nil, nil,