Merge pull request #87401 from zouyee/move

Move scheduler's SchedulerExtender interface to core/extenders.go
This commit is contained in:
Kubernetes Prow Robot 2020-01-21 09:21:50 -08:00 committed by GitHub
commit 37f98ac3b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 71 additions and 112 deletions

View File

@ -12,7 +12,6 @@ go_library(
deps = [ deps = [
"//pkg/api/v1/pod:go_default_library", "//pkg/api/v1/pod:go_default_library",
"//pkg/features:go_default_library", "//pkg/features:go_default_library",
"//pkg/scheduler/algorithm:go_default_library",
"//pkg/scheduler/algorithmprovider:go_default_library", "//pkg/scheduler/algorithmprovider:go_default_library",
"//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/apis/config:go_default_library",
"//pkg/scheduler/apis/config/scheme:go_default_library", "//pkg/scheduler/apis/config/scheme:go_default_library",
@ -62,7 +61,6 @@ go_test(
"//pkg/api/testing:go_default_library", "//pkg/api/testing:go_default_library",
"//pkg/controller/volume/scheduling:go_default_library", "//pkg/controller/volume/scheduling:go_default_library",
"//pkg/features:go_default_library", "//pkg/features:go_default_library",
"//pkg/scheduler/algorithm:go_default_library",
"//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/apis/config:go_default_library",
"//pkg/scheduler/apis/config/scheme:go_default_library", "//pkg/scheduler/apis/config/scheme:go_default_library",
"//pkg/scheduler/apis/extender/v1:go_default_library", "//pkg/scheduler/apis/extender/v1:go_default_library",

View File

@ -2,17 +2,9 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
go_library( go_library(
name = "go_default_library", name = "go_default_library",
srcs = [ srcs = ["doc.go"],
"doc.go",
"scheduler_interface.go",
],
importpath = "k8s.io/kubernetes/pkg/scheduler/algorithm", importpath = "k8s.io/kubernetes/pkg/scheduler/algorithm",
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [
"//pkg/scheduler/apis/extender/v1:go_default_library",
"//pkg/scheduler/listers:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
],
) )
filegroup( filegroup(

View File

@ -1,71 +0,0 @@
/*
Copyright 2014 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 algorithm
import (
"k8s.io/api/core/v1"
extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1"
"k8s.io/kubernetes/pkg/scheduler/listers"
)
// SchedulerExtender is an interface for external processes to influence scheduling
// decisions made by Kubernetes. This is typically needed for resources not directly
// managed by Kubernetes.
type SchedulerExtender interface {
// Name returns a unique name that identifies the extender.
Name() string
// Filter based on extender-implemented predicate functions. The filtered list is
// expected to be a subset of the supplied list. failedNodesMap optionally contains
// the list of failed nodes and failure reasons.
Filter(pod *v1.Pod, nodes []*v1.Node) (filteredNodes []*v1.Node, failedNodesMap extenderv1.FailedNodesMap, err error)
// Prioritize based on extender-implemented priority functions. The returned scores & weight
// are used to compute the weighted score for an extender. The weighted scores are added to
// the scores computed by Kubernetes scheduler. The total scores are used to do the host selection.
Prioritize(pod *v1.Pod, nodes []*v1.Node) (hostPriorities *extenderv1.HostPriorityList, weight int64, err error)
// Bind delegates the action of binding a pod to a node to the extender.
Bind(binding *v1.Binding) error
// IsBinder returns whether this extender is configured for the Bind method.
IsBinder() bool
// IsInterested returns true if at least one extended resource requested by
// this pod is managed by this extender.
IsInterested(pod *v1.Pod) bool
// ProcessPreemption returns nodes with their victim pods processed by extender based on
// given:
// 1. Pod to schedule
// 2. Candidate nodes and victim pods (nodeToVictims) generated by previous scheduling process.
// 3. nodeNameToInfo to restore v1.Node from node name if extender cache is enabled.
// The possible changes made by extender may include:
// 1. Subset of given candidate nodes after preemption phase of extender.
// 2. A different set of victim pod for every given candidate node after preemption phase of extender.
ProcessPreemption(
pod *v1.Pod,
nodeToVictims map[*v1.Node]*extenderv1.Victims,
nodeInfos listers.NodeInfoLister) (map[*v1.Node]*extenderv1.Victims, error)
// SupportsPreemption returns if the scheduler extender support preemption or not.
SupportsPreemption() bool
// IsIgnorable returns true indicates scheduling should not fail when this extender
// is unavailable. This gives scheduler ability to fail fast and tolerate non-critical extenders as well.
IsIgnorable() bool
}

View File

@ -10,7 +10,6 @@ go_library(
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [ deps = [
"//pkg/api/v1/pod:go_default_library", "//pkg/api/v1/pod:go_default_library",
"//pkg/scheduler/algorithm:go_default_library",
"//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/apis/config:go_default_library",
"//pkg/scheduler/apis/extender/v1:go_default_library", "//pkg/scheduler/apis/extender/v1:go_default_library",
"//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/framework/v1alpha1:go_default_library",
@ -45,7 +44,6 @@ go_test(
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//pkg/api/v1/pod:go_default_library", "//pkg/api/v1/pod:go_default_library",
"//pkg/scheduler/algorithm:go_default_library",
"//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/apis/config:go_default_library",
"//pkg/scheduler/apis/extender/v1:go_default_library", "//pkg/scheduler/apis/extender/v1:go_default_library",
"//pkg/scheduler/framework/plugins/defaultpodtopologyspread:go_default_library", "//pkg/scheduler/framework/plugins/defaultpodtopologyspread:go_default_library",

View File

@ -28,7 +28,6 @@ import (
utilnet "k8s.io/apimachinery/pkg/util/net" utilnet "k8s.io/apimachinery/pkg/util/net"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
restclient "k8s.io/client-go/rest" restclient "k8s.io/client-go/rest"
"k8s.io/kubernetes/pkg/scheduler/algorithm"
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1" extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1"
"k8s.io/kubernetes/pkg/scheduler/listers" "k8s.io/kubernetes/pkg/scheduler/listers"
@ -40,7 +39,55 @@ const (
DefaultExtenderTimeout = 5 * time.Second DefaultExtenderTimeout = 5 * time.Second
) )
// HTTPExtender implements the algorithm.SchedulerExtender interface. // SchedulerExtender is an interface for external processes to influence scheduling
// decisions made by Kubernetes. This is typically needed for resources not directly
// managed by Kubernetes.
type SchedulerExtender interface {
// Name returns a unique name that identifies the extender.
Name() string
// Filter based on extender-implemented predicate functions. The filtered list is
// expected to be a subset of the supplied list. failedNodesMap optionally contains
// the list of failed nodes and failure reasons.
Filter(pod *v1.Pod, nodes []*v1.Node) (filteredNodes []*v1.Node, failedNodesMap extenderv1.FailedNodesMap, err error)
// Prioritize based on extender-implemented priority functions. The returned scores & weight
// are used to compute the weighted score for an extender. The weighted scores are added to
// the scores computed by Kubernetes scheduler. The total scores are used to do the host selection.
Prioritize(pod *v1.Pod, nodes []*v1.Node) (hostPriorities *extenderv1.HostPriorityList, weight int64, err error)
// Bind delegates the action of binding a pod to a node to the extender.
Bind(binding *v1.Binding) error
// IsBinder returns whether this extender is configured for the Bind method.
IsBinder() bool
// IsInterested returns true if at least one extended resource requested by
// this pod is managed by this extender.
IsInterested(pod *v1.Pod) bool
// ProcessPreemption returns nodes with their victim pods processed by extender based on
// given:
// 1. Pod to schedule
// 2. Candidate nodes and victim pods (nodeToVictims) generated by previous scheduling process.
// 3. nodeNameToInfo to restore v1.Node from node name if extender cache is enabled.
// The possible changes made by extender may include:
// 1. Subset of given candidate nodes after preemption phase of extender.
// 2. A different set of victim pod for every given candidate node after preemption phase of extender.
ProcessPreemption(
pod *v1.Pod,
nodeToVictims map[*v1.Node]*extenderv1.Victims,
nodeInfos listers.NodeInfoLister) (map[*v1.Node]*extenderv1.Victims, error)
// SupportsPreemption returns if the scheduler extender support preemption or not.
SupportsPreemption() bool
// IsIgnorable returns true indicates scheduling should not fail when this extender
// is unavailable. This gives scheduler ability to fail fast and tolerate non-critical extenders as well.
IsIgnorable() bool
}
// HTTPExtender implements the SchedulerExtender interface.
type HTTPExtender struct { type HTTPExtender struct {
extenderURL string extenderURL string
preemptVerb string preemptVerb string
@ -85,7 +132,7 @@ func makeTransport(config *schedulerapi.Extender) (http.RoundTripper, error) {
} }
// NewHTTPExtender creates an HTTPExtender object. // NewHTTPExtender creates an HTTPExtender object.
func NewHTTPExtender(config *schedulerapi.Extender) (algorithm.SchedulerExtender, error) { func NewHTTPExtender(config *schedulerapi.Extender) (SchedulerExtender, error) {
if config.HTTPTimeout.Nanoseconds() == 0 { if config.HTTPTimeout.Nanoseconds() == 0 {
config.HTTPTimeout = time.Duration(DefaultExtenderTimeout) config.HTTPTimeout = time.Duration(DefaultExtenderTimeout)
} }

View File

@ -33,7 +33,6 @@ import (
"k8s.io/client-go/informers" "k8s.io/client-go/informers"
clientsetfake "k8s.io/client-go/kubernetes/fake" clientsetfake "k8s.io/client-go/kubernetes/fake"
podutil "k8s.io/kubernetes/pkg/api/v1/pod" podutil "k8s.io/kubernetes/pkg/api/v1/pod"
"k8s.io/kubernetes/pkg/scheduler/algorithm"
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1" extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1"
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort"
@ -353,7 +352,7 @@ func (f *FakeExtender) IsInterested(pod *v1.Pod) bool {
return !f.unInterested return !f.unInterested
} }
var _ algorithm.SchedulerExtender = &FakeExtender{} var _ SchedulerExtender = &FakeExtender{}
func TestGenericSchedulerWithExtenders(t *testing.T) { func TestGenericSchedulerWithExtenders(t *testing.T) {
tests := []struct { tests := []struct {
@ -566,7 +565,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
client := clientsetfake.NewSimpleClientset() client := clientsetfake.NewSimpleClientset()
informerFactory := informers.NewSharedInformerFactory(client, 0) informerFactory := informers.NewSharedInformerFactory(client, 0)
extenders := []algorithm.SchedulerExtender{} extenders := []SchedulerExtender{}
for ii := range test.extenders { for ii := range test.extenders {
extenders = append(extenders, &test.extenders[ii]) extenders = append(extenders, &test.extenders[ii])
} }

View File

@ -37,7 +37,6 @@ import (
policylisters "k8s.io/client-go/listers/policy/v1beta1" policylisters "k8s.io/client-go/listers/policy/v1beta1"
"k8s.io/client-go/util/workqueue" "k8s.io/client-go/util/workqueue"
podutil "k8s.io/kubernetes/pkg/api/v1/pod" podutil "k8s.io/kubernetes/pkg/api/v1/pod"
"k8s.io/kubernetes/pkg/scheduler/algorithm"
extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1" extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1"
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
@ -111,7 +110,7 @@ type ScheduleAlgorithm interface {
Preempt(context.Context, *framework.CycleState, *v1.Pod, error) (selectedNode *v1.Node, preemptedPods []*v1.Pod, cleanupNominatedPods []*v1.Pod, err error) Preempt(context.Context, *framework.CycleState, *v1.Pod, error) (selectedNode *v1.Node, preemptedPods []*v1.Pod, cleanupNominatedPods []*v1.Pod, err error)
// Prioritizers returns a slice of priority config. This is exposed for // Prioritizers returns a slice of priority config. This is exposed for
// testing. // testing.
Extenders() []algorithm.SchedulerExtender Extenders() []SchedulerExtender
// Snapshot snapshots scheduler cache and node infos. This is needed // Snapshot snapshots scheduler cache and node infos. This is needed
// for cluster autoscaler integration. // for cluster autoscaler integration.
// TODO(#85691): remove this once CA migrates to creating a Framework instead of a full scheduler. // TODO(#85691): remove this once CA migrates to creating a Framework instead of a full scheduler.
@ -136,7 +135,7 @@ type genericScheduler struct {
cache internalcache.Cache cache internalcache.Cache
schedulingQueue internalqueue.SchedulingQueue schedulingQueue internalqueue.SchedulingQueue
framework framework.Framework framework framework.Framework
extenders []algorithm.SchedulerExtender extenders []SchedulerExtender
nodeInfoSnapshot *internalcache.Snapshot nodeInfoSnapshot *internalcache.Snapshot
volumeBinder *volumebinder.VolumeBinder volumeBinder *volumebinder.VolumeBinder
pvcLister corelisters.PersistentVolumeClaimLister pvcLister corelisters.PersistentVolumeClaimLister
@ -241,7 +240,7 @@ func (g *genericScheduler) Schedule(ctx context.Context, state *framework.CycleS
}, err }, err
} }
func (g *genericScheduler) Extenders() []algorithm.SchedulerExtender { func (g *genericScheduler) Extenders() []SchedulerExtender {
return g.extenders return g.extenders
} }
@ -1098,7 +1097,7 @@ func NewGenericScheduler(
podQueue internalqueue.SchedulingQueue, podQueue internalqueue.SchedulingQueue,
nodeInfoSnapshot *internalcache.Snapshot, nodeInfoSnapshot *internalcache.Snapshot,
framework framework.Framework, framework framework.Framework,
extenders []algorithm.SchedulerExtender, extenders []SchedulerExtender,
volumeBinder *volumebinder.VolumeBinder, volumeBinder *volumebinder.VolumeBinder,
pvcLister corelisters.PersistentVolumeClaimLister, pvcLister corelisters.PersistentVolumeClaimLister,
pdbLister policylisters.PodDisruptionBudgetLister, pdbLister policylisters.PodDisruptionBudgetLister,

View File

@ -36,7 +36,6 @@ import (
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
"k8s.io/client-go/informers" "k8s.io/client-go/informers"
clientsetfake "k8s.io/client-go/kubernetes/fake" clientsetfake "k8s.io/client-go/kubernetes/fake"
"k8s.io/kubernetes/pkg/scheduler/algorithm"
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1" extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1"
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultpodtopologyspread" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultpodtopologyspread"
@ -807,7 +806,7 @@ func TestGenericScheduler(t *testing.T) {
internalqueue.NewSchedulingQueue(nil), internalqueue.NewSchedulingQueue(nil),
snapshot, snapshot,
fwk, fwk,
[]algorithm.SchedulerExtender{}, []SchedulerExtender{},
nil, nil,
pvcLister, pvcLister,
informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(), informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(),
@ -1152,7 +1151,7 @@ func TestZeroRequest(t *testing.T) {
nil, nil,
emptySnapshot, emptySnapshot,
fwk, fwk,
[]algorithm.SchedulerExtender{}, []SchedulerExtender{},
nil, nil,
nil, nil,
nil, nil,
@ -1611,7 +1610,7 @@ func TestSelectNodesForPreemption(t *testing.T) {
internalqueue.NewSchedulingQueue(nil), internalqueue.NewSchedulingQueue(nil),
snapshot, snapshot,
fwk, fwk,
[]algorithm.SchedulerExtender{}, []SchedulerExtender{},
nil, nil,
nil, nil,
informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(), informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(),
@ -2374,7 +2373,7 @@ func TestPreempt(t *testing.T) {
cachedNodeInfo.SetNode(node) cachedNodeInfo.SetNode(node)
cachedNodeInfoMap[node.Name] = cachedNodeInfo cachedNodeInfoMap[node.Name] = cachedNodeInfo
} }
var extenders []algorithm.SchedulerExtender var extenders []SchedulerExtender
for _, extender := range test.extenders { for _, extender := range test.extenders {
// Set nodeInfoMap as extenders cached node information. // Set nodeInfoMap as extenders cached node information.
extender.cachedNodeNameToInfo = cachedNodeInfoMap extender.cachedNodeNameToInfo = cachedNodeInfoMap

View File

@ -37,7 +37,6 @@ import (
"k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/cache"
"k8s.io/klog" "k8s.io/klog"
kubefeatures "k8s.io/kubernetes/pkg/features" kubefeatures "k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/scheduler/algorithm"
"k8s.io/kubernetes/pkg/scheduler/algorithmprovider" "k8s.io/kubernetes/pkg/scheduler/algorithmprovider"
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
"k8s.io/kubernetes/pkg/scheduler/apis/config/validation" "k8s.io/kubernetes/pkg/scheduler/apis/config/validation"
@ -110,7 +109,7 @@ type Configurator struct {
} }
// create a scheduler from a set of registered plugins. // create a scheduler from a set of registered plugins.
func (c *Configurator) create(extenders []algorithm.SchedulerExtender) (*Scheduler, error) { func (c *Configurator) create(extenders []core.SchedulerExtender) (*Scheduler, error) {
framework, err := framework.NewFramework( framework, err := framework.NewFramework(
c.registry, c.registry,
c.plugins, c.plugins,
@ -186,7 +185,7 @@ func (c *Configurator) createFromProvider(providerName string) (*Scheduler, erro
pluginConfig = append(pluginConfig, c.pluginConfig...) pluginConfig = append(pluginConfig, c.pluginConfig...)
c.pluginConfig = pluginConfig c.pluginConfig = pluginConfig
return c.create([]algorithm.SchedulerExtender{}) return c.create([]core.SchedulerExtender{})
} }
// createFromConfig creates a scheduler from the configuration file // createFromConfig creates a scheduler from the configuration file
@ -227,9 +226,9 @@ func (c *Configurator) createFromConfig(policy schedulerapi.Policy) (*Scheduler,
} }
} }
var extenders []algorithm.SchedulerExtender var extenders []core.SchedulerExtender
if len(policy.Extenders) != 0 { if len(policy.Extenders) != 0 {
var ignorableExtenders []algorithm.SchedulerExtender var ignorableExtenders []core.SchedulerExtender
var ignoredExtendedResources []string var ignoredExtendedResources []string
for ii := range policy.Extenders { for ii := range policy.Extenders {
klog.V(2).Infof("Creating extender with config %+v", policy.Extenders[ii]) klog.V(2).Infof("Creating extender with config %+v", policy.Extenders[ii])

View File

@ -44,7 +44,6 @@ import (
clientcache "k8s.io/client-go/tools/cache" clientcache "k8s.io/client-go/tools/cache"
"k8s.io/client-go/tools/events" "k8s.io/client-go/tools/events"
volumescheduling "k8s.io/kubernetes/pkg/controller/volume/scheduling" volumescheduling "k8s.io/kubernetes/pkg/controller/volume/scheduling"
"k8s.io/kubernetes/pkg/scheduler/algorithm"
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
"k8s.io/kubernetes/pkg/scheduler/core" "k8s.io/kubernetes/pkg/scheduler/core"
frameworkplugins "k8s.io/kubernetes/pkg/scheduler/framework/plugins" frameworkplugins "k8s.io/kubernetes/pkg/scheduler/framework/plugins"
@ -144,7 +143,7 @@ func (es mockScheduler) Schedule(ctx context.Context, state *framework.CycleStat
return es.result, es.err return es.result, es.err
} }
func (es mockScheduler) Extenders() []algorithm.SchedulerExtender { func (es mockScheduler) Extenders() []core.SchedulerExtender {
return nil return nil
} }
func (es mockScheduler) Preempt(ctx context.Context, state *framework.CycleState, pod *v1.Pod, scheduleErr error) (*v1.Node, []*v1.Pod, []*v1.Pod, error) { func (es mockScheduler) Preempt(ctx context.Context, state *framework.CycleState, pod *v1.Pod, scheduleErr error) (*v1.Node, []*v1.Pod, []*v1.Pod, error) {
@ -614,7 +613,7 @@ func setupTestScheduler(queuedPodStore *clientcache.FIFO, scache internalcache.C
internalqueue.NewSchedulingQueue(nil), internalqueue.NewSchedulingQueue(nil),
internalcache.NewEmptySnapshot(), internalcache.NewEmptySnapshot(),
fwk, fwk,
[]algorithm.SchedulerExtender{}, []core.SchedulerExtender{},
nil, nil,
informerFactory.Core().V1().PersistentVolumeClaims().Lister(), informerFactory.Core().V1().PersistentVolumeClaims().Lister(),
informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(), informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(),
@ -941,14 +940,14 @@ priorities:
func TestSchedulerBinding(t *testing.T) { func TestSchedulerBinding(t *testing.T) {
table := []struct { table := []struct {
podName string podName string
extenders []algorithm.SchedulerExtender extenders []core.SchedulerExtender
wantBinderID int wantBinderID int
name string name string
}{ }{
{ {
name: "the extender is not a binder", name: "the extender is not a binder",
podName: "pod0", podName: "pod0",
extenders: []algorithm.SchedulerExtender{ extenders: []core.SchedulerExtender{
&fakeExtender{isBinder: false, interestedPodName: "pod0"}, &fakeExtender{isBinder: false, interestedPodName: "pod0"},
}, },
wantBinderID: -1, // default binding. wantBinderID: -1, // default binding.
@ -956,7 +955,7 @@ func TestSchedulerBinding(t *testing.T) {
{ {
name: "one of the extenders is a binder and interested in pod", name: "one of the extenders is a binder and interested in pod",
podName: "pod0", podName: "pod0",
extenders: []algorithm.SchedulerExtender{ extenders: []core.SchedulerExtender{
&fakeExtender{isBinder: false, interestedPodName: "pod0"}, &fakeExtender{isBinder: false, interestedPodName: "pod0"},
&fakeExtender{isBinder: true, interestedPodName: "pod0"}, &fakeExtender{isBinder: true, interestedPodName: "pod0"},
}, },
@ -965,7 +964,7 @@ func TestSchedulerBinding(t *testing.T) {
{ {
name: "one of the extenders is a binder, but not interested in pod", name: "one of the extenders is a binder, but not interested in pod",
podName: "pod1", podName: "pod1",
extenders: []algorithm.SchedulerExtender{ extenders: []core.SchedulerExtender{
&fakeExtender{isBinder: false, interestedPodName: "pod1"}, &fakeExtender{isBinder: false, interestedPodName: "pod1"},
&fakeExtender{isBinder: true, interestedPodName: "pod0"}, &fakeExtender{isBinder: true, interestedPodName: "pod0"},
}, },