Merge pull request #108230 from sanposhiho/fake-extender-name

Support ExtenderName in FakeExtender
This commit is contained in:
Kubernetes Prow Robot 2022-02-22 21:36:18 -08:00 committed by GitHub
commit 296bf4f016
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 80 additions and 23 deletions

View File

@ -22,7 +22,7 @@ import (
"testing" "testing"
"time" "time"
"k8s.io/api/core/v1" 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/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
@ -58,10 +58,12 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
}, },
extenders: []st.FakeExtender{ extenders: []st.FakeExtender{
{ {
Predicates: []st.FitPredicate{st.TruePredicateExtender}, ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{st.TruePredicateExtender},
}, },
{ {
Predicates: []st.FitPredicate{st.ErrorPredicateExtender}, ExtenderName: "FakeExtender2",
Predicates: []st.FitPredicate{st.ErrorPredicateExtender},
}, },
}, },
nodes: []string{"node1", "node2"}, nodes: []string{"node1", "node2"},
@ -76,10 +78,12 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
}, },
extenders: []st.FakeExtender{ extenders: []st.FakeExtender{
{ {
Predicates: []st.FitPredicate{st.TruePredicateExtender}, ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{st.TruePredicateExtender},
}, },
{ {
Predicates: []st.FitPredicate{st.FalsePredicateExtender}, ExtenderName: "FakeExtender2",
Predicates: []st.FitPredicate{st.FalsePredicateExtender},
}, },
}, },
nodes: []string{"node1", "node2"}, nodes: []string{"node1", "node2"},
@ -94,10 +98,12 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
}, },
extenders: []st.FakeExtender{ extenders: []st.FakeExtender{
{ {
Predicates: []st.FitPredicate{st.TruePredicateExtender}, ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{st.TruePredicateExtender},
}, },
{ {
Predicates: []st.FitPredicate{st.Node1PredicateExtender}, ExtenderName: "FakeExtender2",
Predicates: []st.FitPredicate{st.Node1PredicateExtender},
}, },
}, },
nodes: []string{"node1", "node2"}, nodes: []string{"node1", "node2"},
@ -116,10 +122,12 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
}, },
extenders: []st.FakeExtender{ extenders: []st.FakeExtender{
{ {
Predicates: []st.FitPredicate{st.Node2PredicateExtender}, ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{st.Node2PredicateExtender},
}, },
{ {
Predicates: []st.FitPredicate{st.Node1PredicateExtender}, ExtenderName: "FakeExtender2",
Predicates: []st.FitPredicate{st.Node1PredicateExtender},
}, },
}, },
nodes: []string{"node1", "node2"}, nodes: []string{"node1", "node2"},
@ -134,6 +142,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
}, },
extenders: []st.FakeExtender{ extenders: []st.FakeExtender{
{ {
ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{st.TruePredicateExtender}, Predicates: []st.FitPredicate{st.TruePredicateExtender},
Prioritizers: []st.PriorityConfig{{Function: st.ErrorPrioritizerExtender, Weight: 10}}, Prioritizers: []st.PriorityConfig{{Function: st.ErrorPrioritizerExtender, Weight: 10}},
Weight: 1, Weight: 1,
@ -155,11 +164,13 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
}, },
extenders: []st.FakeExtender{ extenders: []st.FakeExtender{
{ {
ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{st.TruePredicateExtender}, Predicates: []st.FitPredicate{st.TruePredicateExtender},
Prioritizers: []st.PriorityConfig{{Function: st.Node1PrioritizerExtender, Weight: 10}}, Prioritizers: []st.PriorityConfig{{Function: st.Node1PrioritizerExtender, Weight: 10}},
Weight: 1, Weight: 1,
}, },
{ {
ExtenderName: "FakeExtender2",
Predicates: []st.FitPredicate{st.TruePredicateExtender}, Predicates: []st.FitPredicate{st.TruePredicateExtender},
Prioritizers: []st.PriorityConfig{{Function: st.Node2PrioritizerExtender, Weight: 10}}, Prioritizers: []st.PriorityConfig{{Function: st.Node2PrioritizerExtender, Weight: 10}},
Weight: 5, Weight: 5,
@ -182,6 +193,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
}, },
extenders: []st.FakeExtender{ extenders: []st.FakeExtender{
{ {
ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{st.TruePredicateExtender}, Predicates: []st.FitPredicate{st.TruePredicateExtender},
Prioritizers: []st.PriorityConfig{{Function: st.Node1PrioritizerExtender, Weight: 10}}, Prioritizers: []st.PriorityConfig{{Function: st.Node1PrioritizerExtender, Weight: 10}},
Weight: 1, Weight: 1,
@ -211,6 +223,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
}, },
extenders: []st.FakeExtender{ extenders: []st.FakeExtender{
{ {
ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{st.ErrorPredicateExtender}, Predicates: []st.FitPredicate{st.ErrorPredicateExtender},
Prioritizers: []st.PriorityConfig{{Function: st.ErrorPrioritizerExtender, Weight: 10}}, Prioritizers: []st.PriorityConfig{{Function: st.ErrorPrioritizerExtender, Weight: 10}},
UnInterested: true, UnInterested: true,
@ -238,11 +251,13 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
}, },
extenders: []st.FakeExtender{ extenders: []st.FakeExtender{
{ {
Predicates: []st.FitPredicate{st.ErrorPredicateExtender}, ExtenderName: "FakeExtender1",
Ignorable: true, Predicates: []st.FitPredicate{st.ErrorPredicateExtender},
Ignorable: true,
}, },
{ {
Predicates: []st.FitPredicate{st.Node1PredicateExtender}, ExtenderName: "FakeExtender2",
Predicates: []st.FitPredicate{st.Node1PredicateExtender},
}, },
}, },
nodes: []string{"node1", "node2"}, nodes: []string{"node1", "node2"},

View File

@ -227,7 +227,10 @@ func TestPostFilter(t *testing.T) {
"node1": framework.NewStatus(framework.Unschedulable), "node1": framework.NewStatus(framework.Unschedulable),
"node2": framework.NewStatus(framework.Unschedulable), "node2": framework.NewStatus(framework.Unschedulable),
}, },
extender: &st.FakeExtender{Predicates: []st.FitPredicate{st.Node1PredicateExtender}}, extender: &st.FakeExtender{
ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{st.Node1PredicateExtender},
},
wantResult: framework.NewPostFilterResultWithNominatedNode("node1"), wantResult: framework.NewPostFilterResultWithNominatedNode("node1"),
wantStatus: framework.NewStatus(framework.Success), wantStatus: framework.NewStatus(framework.Success),
}, },
@ -1506,8 +1509,14 @@ func TestPreempt(t *testing.T) {
}, },
nodeNames: []string{"node1", "node2", "node3"}, nodeNames: []string{"node1", "node2", "node3"},
extenders: []*st.FakeExtender{ extenders: []*st.FakeExtender{
{Predicates: []st.FitPredicate{st.TruePredicateExtender}}, {
{Predicates: []st.FitPredicate{st.Node1PredicateExtender}}, ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{st.TruePredicateExtender},
},
{
ExtenderName: "FakeExtender2",
Predicates: []st.FitPredicate{st.Node1PredicateExtender},
},
}, },
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"), registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
want: framework.NewPostFilterResultWithNominatedNode("node1"), want: framework.NewPostFilterResultWithNominatedNode("node1"),
@ -1523,7 +1532,10 @@ func TestPreempt(t *testing.T) {
}, },
nodeNames: []string{"node1", "node2", "node3"}, nodeNames: []string{"node1", "node2", "node3"},
extenders: []*st.FakeExtender{ extenders: []*st.FakeExtender{
{Predicates: []st.FitPredicate{st.FalsePredicateExtender}}, {
ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{st.FalsePredicateExtender},
},
}, },
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"), registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
want: nil, want: nil,
@ -1539,8 +1551,15 @@ func TestPreempt(t *testing.T) {
}, },
nodeNames: []string{"node1", "node2", "node3"}, nodeNames: []string{"node1", "node2", "node3"},
extenders: []*st.FakeExtender{ extenders: []*st.FakeExtender{
{Predicates: []st.FitPredicate{st.ErrorPredicateExtender}, Ignorable: true}, {
{Predicates: []st.FitPredicate{st.Node1PredicateExtender}}, Predicates: []st.FitPredicate{st.ErrorPredicateExtender},
Ignorable: true,
ExtenderName: "FakeExtender1",
},
{
Predicates: []st.FitPredicate{st.Node1PredicateExtender},
ExtenderName: "FakeExtender2",
},
}, },
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"), registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
want: framework.NewPostFilterResultWithNominatedNode("node1"), want: framework.NewPostFilterResultWithNominatedNode("node1"),
@ -1556,8 +1575,15 @@ func TestPreempt(t *testing.T) {
}, },
nodeNames: []string{"node1", "node2"}, nodeNames: []string{"node1", "node2"},
extenders: []*st.FakeExtender{ extenders: []*st.FakeExtender{
{Predicates: []st.FitPredicate{st.Node1PredicateExtender}, UnInterested: true}, {
{Predicates: []st.FitPredicate{st.TruePredicateExtender}}, ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{st.Node1PredicateExtender},
UnInterested: true,
},
{
ExtenderName: "FakeExtender2",
Predicates: []st.FitPredicate{st.TruePredicateExtender},
},
}, },
registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"), registerPlugin: st.RegisterPluginAsExtensions(noderesources.Name, nodeResourcesFitFunc, "Filter", "PreFilter"),
// sum of priorities of all victims on node1 is larger than node2, node2 is chosen. // sum of priorities of all victims on node1 is larger than node2, node2 is chosen.

View File

@ -285,7 +285,8 @@ func TestFindNodesThatPassExtenders(t *testing.T) {
name: "error", name: "error",
extenders: []st.FakeExtender{ extenders: []st.FakeExtender{
{ {
Predicates: []st.FitPredicate{st.ErrorPredicateExtender}, ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{st.ErrorPredicateExtender},
}, },
}, },
nodes: makeNodeList([]string{"a"}), nodes: makeNodeList([]string{"a"}),
@ -296,7 +297,8 @@ func TestFindNodesThatPassExtenders(t *testing.T) {
name: "success", name: "success",
extenders: []st.FakeExtender{ extenders: []st.FakeExtender{
{ {
Predicates: []st.FitPredicate{st.TruePredicateExtender}, ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{st.TruePredicateExtender},
}, },
}, },
nodes: makeNodeList([]string{"a"}), nodes: makeNodeList([]string{"a"}),
@ -309,6 +311,7 @@ func TestFindNodesThatPassExtenders(t *testing.T) {
name: "unschedulable", name: "unschedulable",
extenders: []st.FakeExtender{ extenders: []st.FakeExtender{
{ {
ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{func(pod *v1.Pod, node *v1.Node) *framework.Status { Predicates: []st.FitPredicate{func(pod *v1.Pod, node *v1.Node) *framework.Status {
if node.Name == "a" { if node.Name == "a" {
return framework.NewStatus(framework.Success) return framework.NewStatus(framework.Success)
@ -329,6 +332,7 @@ func TestFindNodesThatPassExtenders(t *testing.T) {
name: "unschedulable and unresolvable", name: "unschedulable and unresolvable",
extenders: []st.FakeExtender{ extenders: []st.FakeExtender{
{ {
ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{func(pod *v1.Pod, node *v1.Node) *framework.Status { Predicates: []st.FitPredicate{func(pod *v1.Pod, node *v1.Node) *framework.Status {
if node.Name == "a" { if node.Name == "a" {
return framework.NewStatus(framework.Success) return framework.NewStatus(framework.Success)
@ -353,6 +357,7 @@ func TestFindNodesThatPassExtenders(t *testing.T) {
name: "extender may overwrite the statuses", name: "extender may overwrite the statuses",
extenders: []st.FakeExtender{ extenders: []st.FakeExtender{
{ {
ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{func(pod *v1.Pod, node *v1.Node) *framework.Status { Predicates: []st.FitPredicate{func(pod *v1.Pod, node *v1.Node) *framework.Status {
if node.Name == "a" { if node.Name == "a" {
return framework.NewStatus(framework.Success) return framework.NewStatus(framework.Success)
@ -379,6 +384,7 @@ func TestFindNodesThatPassExtenders(t *testing.T) {
name: "multiple extenders", name: "multiple extenders",
extenders: []st.FakeExtender{ extenders: []st.FakeExtender{
{ {
ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{func(pod *v1.Pod, node *v1.Node) *framework.Status { Predicates: []st.FitPredicate{func(pod *v1.Pod, node *v1.Node) *framework.Status {
if node.Name == "a" { if node.Name == "a" {
return framework.NewStatus(framework.Success) return framework.NewStatus(framework.Success)
@ -390,6 +396,7 @@ func TestFindNodesThatPassExtenders(t *testing.T) {
}}, }},
}, },
{ {
ExtenderName: "FakeExtender1",
Predicates: []st.FitPredicate{func(pod *v1.Pod, node *v1.Node) *framework.Status { Predicates: []st.FitPredicate{func(pod *v1.Pod, node *v1.Node) *framework.Status {
if node.Name == "a" { if node.Name == "a" {
return framework.NewStatus(framework.Success) return framework.NewStatus(framework.Success)

View File

@ -143,6 +143,9 @@ func (pl *node2PrioritizerPlugin) ScoreExtensions() framework.ScoreExtensions {
// FakeExtender is a data struct which implements the Extender interface. // FakeExtender is a data struct which implements the Extender interface.
type FakeExtender struct { type FakeExtender struct {
// ExtenderName indicates this fake extender's name.
// Note that extender name should be unique.
ExtenderName string
Predicates []FitPredicate Predicates []FitPredicate
Prioritizers []PriorityConfig Prioritizers []PriorityConfig
Weight int64 Weight int64
@ -155,9 +158,15 @@ type FakeExtender struct {
CachedNodeNameToInfo map[string]*framework.NodeInfo CachedNodeNameToInfo map[string]*framework.NodeInfo
} }
const defaultFakeExtenderName = "defaultFakeExtender"
// Name returns name of the extender. // Name returns name of the extender.
func (f *FakeExtender) Name() string { func (f *FakeExtender) Name() string {
return "FakeExtender" if f.ExtenderName == "" {
// If ExtenderName is unset, use default name.
return defaultFakeExtenderName
}
return f.ExtenderName
} }
// IsIgnorable returns a bool value indicating whether internal errors can be ignored. // IsIgnorable returns a bool value indicating whether internal errors can be ignored.