From 1837b49554ba8ced4660ed39176b2abc0dedb982 Mon Sep 17 00:00:00 2001 From: Wei Huang Date: Thu, 28 May 2020 14:20:56 -0700 Subject: [PATCH 1/2] Scheduler PostFilter API --- pkg/scheduler/apis/config/types.go | 5 ++ pkg/scheduler/apis/config/types_test.go | 85 ++++++++++--------- .../framework/plugins/legacy_registry_test.go | 3 +- .../kube-scheduler/config/v1beta1/types.go | 3 + 4 files changed, 55 insertions(+), 41 deletions(-) diff --git a/pkg/scheduler/apis/config/types.go b/pkg/scheduler/apis/config/types.go index 8cd0a3ace2b..7ae8bca8325 100644 --- a/pkg/scheduler/apis/config/types.go +++ b/pkg/scheduler/apis/config/types.go @@ -190,6 +190,9 @@ type Plugins struct { // Filter is a list of plugins that should be invoked when filtering out nodes that cannot run the Pod. Filter *PluginSet + // PostFilter is a list of plugins that are invoked after filtering phase, no matter whether filtering succeeds or not. + PostFilter *PluginSet + // PreScore is a list of plugins that are invoked before scoring. PreScore *PluginSet @@ -284,6 +287,7 @@ func (p *Plugins) Append(src *Plugins) { p.QueueSort = appendPluginSet(p.QueueSort, src.QueueSort) p.PreFilter = appendPluginSet(p.PreFilter, src.PreFilter) p.Filter = appendPluginSet(p.Filter, src.Filter) + p.PostFilter = appendPluginSet(p.PostFilter, src.PostFilter) p.PreScore = appendPluginSet(p.PreScore, src.PreScore) p.Score = appendPluginSet(p.Score, src.Score) p.Reserve = appendPluginSet(p.Reserve, src.Reserve) @@ -303,6 +307,7 @@ func (p *Plugins) Apply(customPlugins *Plugins) { p.QueueSort = mergePluginSets(p.QueueSort, customPlugins.QueueSort) p.PreFilter = mergePluginSets(p.PreFilter, customPlugins.PreFilter) p.Filter = mergePluginSets(p.Filter, customPlugins.Filter) + p.PostFilter = mergePluginSets(p.PostFilter, customPlugins.PostFilter) p.PreScore = mergePluginSets(p.PreScore, customPlugins.PreScore) p.Score = mergePluginSets(p.Score, customPlugins.Score) p.Reserve = mergePluginSets(p.Reserve, customPlugins.Reserve) diff --git a/pkg/scheduler/apis/config/types_test.go b/pkg/scheduler/apis/config/types_test.go index 3f6ddd599a0..4565617d5b0 100644 --- a/pkg/scheduler/apis/config/types_test.go +++ b/pkg/scheduler/apis/config/types_test.go @@ -56,14 +56,15 @@ func TestPluginsAppend(t *testing.T) { {Name: "CustomPlugin"}, }, }, - PreScore: &PluginSet{}, - Score: &PluginSet{}, - Reserve: &PluginSet{}, - Permit: &PluginSet{}, - PreBind: &PluginSet{}, - Bind: &PluginSet{}, - PostBind: &PluginSet{}, - Unreserve: &PluginSet{}, + PostFilter: &PluginSet{}, + PreScore: &PluginSet{}, + Score: &PluginSet{}, + Reserve: &PluginSet{}, + Permit: &PluginSet{}, + PreBind: &PluginSet{}, + Bind: &PluginSet{}, + PostBind: &PluginSet{}, + Unreserve: &PluginSet{}, }, }, { @@ -117,14 +118,15 @@ func TestPluginsApply(t *testing.T) { {Name: "CustomPlugin"}, }, }, - PreScore: &PluginSet{Enabled: []Plugin{}}, - Score: &PluginSet{Enabled: []Plugin{}}, - Reserve: &PluginSet{Enabled: []Plugin{}}, - Permit: &PluginSet{Enabled: []Plugin{}}, - PreBind: &PluginSet{Enabled: []Plugin{}}, - Bind: &PluginSet{Enabled: []Plugin{}}, - PostBind: &PluginSet{Enabled: []Plugin{}}, - Unreserve: &PluginSet{Enabled: []Plugin{}}, + PostFilter: &PluginSet{Enabled: []Plugin{}}, + PreScore: &PluginSet{Enabled: []Plugin{}}, + Score: &PluginSet{Enabled: []Plugin{}}, + Reserve: &PluginSet{Enabled: []Plugin{}}, + Permit: &PluginSet{Enabled: []Plugin{}}, + PreBind: &PluginSet{Enabled: []Plugin{}}, + Bind: &PluginSet{Enabled: []Plugin{}}, + PostBind: &PluginSet{Enabled: []Plugin{}}, + Unreserve: &PluginSet{Enabled: []Plugin{}}, }, }, { @@ -158,14 +160,15 @@ func TestPluginsApply(t *testing.T) { {Name: "DefaultPlugin2"}, }, }, - PreScore: &PluginSet{Enabled: []Plugin{}}, - Score: &PluginSet{Enabled: []Plugin{}}, - Reserve: &PluginSet{Enabled: []Plugin{}}, - Permit: &PluginSet{Enabled: []Plugin{}}, - PreBind: &PluginSet{Enabled: []Plugin{}}, - Bind: &PluginSet{Enabled: []Plugin{}}, - PostBind: &PluginSet{Enabled: []Plugin{}}, - Unreserve: &PluginSet{Enabled: []Plugin{}}, + PostFilter: &PluginSet{Enabled: []Plugin{}}, + PreScore: &PluginSet{Enabled: []Plugin{}}, + Score: &PluginSet{Enabled: []Plugin{}}, + Reserve: &PluginSet{Enabled: []Plugin{}}, + Permit: &PluginSet{Enabled: []Plugin{}}, + PreBind: &PluginSet{Enabled: []Plugin{}}, + Bind: &PluginSet{Enabled: []Plugin{}}, + PostBind: &PluginSet{Enabled: []Plugin{}}, + Unreserve: &PluginSet{Enabled: []Plugin{}}, }, }, { @@ -200,14 +203,15 @@ func TestPluginsApply(t *testing.T) { {Name: "DefaultPlugin2"}, }, }, - PreScore: &PluginSet{Enabled: []Plugin{}}, - Score: &PluginSet{Enabled: []Plugin{}}, - Reserve: &PluginSet{Enabled: []Plugin{}}, - Permit: &PluginSet{Enabled: []Plugin{}}, - PreBind: &PluginSet{Enabled: []Plugin{}}, - Bind: &PluginSet{Enabled: []Plugin{}}, - PostBind: &PluginSet{Enabled: []Plugin{}}, - Unreserve: &PluginSet{Enabled: []Plugin{}}, + PostFilter: &PluginSet{Enabled: []Plugin{}}, + PreScore: &PluginSet{Enabled: []Plugin{}}, + Score: &PluginSet{Enabled: []Plugin{}}, + Reserve: &PluginSet{Enabled: []Plugin{}}, + Permit: &PluginSet{Enabled: []Plugin{}}, + PreBind: &PluginSet{Enabled: []Plugin{}}, + Bind: &PluginSet{Enabled: []Plugin{}}, + PostBind: &PluginSet{Enabled: []Plugin{}}, + Unreserve: &PluginSet{Enabled: []Plugin{}}, }, }, { @@ -240,14 +244,15 @@ func TestPluginsApply(t *testing.T) { {Name: "DefaultPlugin1"}, }, }, - PreScore: &PluginSet{Enabled: []Plugin{}}, - Score: &PluginSet{Enabled: []Plugin{}}, - Reserve: &PluginSet{Enabled: []Plugin{}}, - Permit: &PluginSet{Enabled: []Plugin{}}, - PreBind: &PluginSet{Enabled: []Plugin{}}, - Bind: &PluginSet{Enabled: []Plugin{}}, - PostBind: &PluginSet{Enabled: []Plugin{}}, - Unreserve: &PluginSet{Enabled: []Plugin{}}, + PostFilter: &PluginSet{Enabled: []Plugin{}}, + PreScore: &PluginSet{Enabled: []Plugin{}}, + Score: &PluginSet{Enabled: []Plugin{}}, + Reserve: &PluginSet{Enabled: []Plugin{}}, + Permit: &PluginSet{Enabled: []Plugin{}}, + PreBind: &PluginSet{Enabled: []Plugin{}}, + Bind: &PluginSet{Enabled: []Plugin{}}, + PostBind: &PluginSet{Enabled: []Plugin{}}, + Unreserve: &PluginSet{Enabled: []Plugin{}}, }, }, { diff --git a/pkg/scheduler/framework/plugins/legacy_registry_test.go b/pkg/scheduler/framework/plugins/legacy_registry_test.go index 606499b9817..54d12a49fc1 100644 --- a/pkg/scheduler/framework/plugins/legacy_registry_test.go +++ b/pkg/scheduler/framework/plugins/legacy_registry_test.go @@ -102,7 +102,8 @@ func TestRegisterConfigProducers(t *testing.T) { {Name: testFilterName2}, }, }, - PreScore: &config.PluginSet{}, + PostFilter: &config.PluginSet{}, + PreScore: &config.PluginSet{}, Score: &config.PluginSet{ Enabled: []config.Plugin{ {Name: testScoreName1, Weight: 1}, diff --git a/staging/src/k8s.io/kube-scheduler/config/v1beta1/types.go b/staging/src/k8s.io/kube-scheduler/config/v1beta1/types.go index d872119b36d..4ff27eff003 100644 --- a/staging/src/k8s.io/kube-scheduler/config/v1beta1/types.go +++ b/staging/src/k8s.io/kube-scheduler/config/v1beta1/types.go @@ -173,6 +173,9 @@ type Plugins struct { // Filter is a list of plugins that should be invoked when filtering out nodes that cannot run the Pod. Filter *PluginSet `json:"filter,omitempty"` + // PostFilter is a list of plugins that are invoked after filtering phase, no matter whether filtering succeeds or not. + PostFilter *PluginSet `json:"postFilter,omitempty"` + // PreScore is a list of plugins that are invoked before scoring. PreScore *PluginSet `json:"preScore,omitempty"` From 8478c19a7fc68e6936f38f4210c23a70a05bd7e6 Mon Sep 17 00:00:00 2001 From: Wei Huang Date: Thu, 28 May 2020 14:33:16 -0700 Subject: [PATCH 2/2] autogen: PostFilter --- .../config/v1beta1/zz_generated.conversion.go | 18 ++++++++++++++++++ .../apis/config/zz_generated.deepcopy.go | 5 +++++ .../config/v1beta1/zz_generated.deepcopy.go | 5 +++++ 3 files changed, 28 insertions(+) diff --git a/pkg/scheduler/apis/config/v1beta1/zz_generated.conversion.go b/pkg/scheduler/apis/config/v1beta1/zz_generated.conversion.go index fcd89395252..4a14abdd5d3 100644 --- a/pkg/scheduler/apis/config/v1beta1/zz_generated.conversion.go +++ b/pkg/scheduler/apis/config/v1beta1/zz_generated.conversion.go @@ -622,6 +622,15 @@ func autoConvert_v1beta1_Plugins_To_config_Plugins(in *v1beta1.Plugins, out *con } else { out.Filter = nil } + if in.PostFilter != nil { + in, out := &in.PostFilter, &out.PostFilter + *out = new(config.PluginSet) + if err := Convert_v1beta1_PluginSet_To_config_PluginSet(*in, *out, s); err != nil { + return err + } + } else { + out.PostFilter = nil + } if in.PreScore != nil { in, out := &in.PreScore, &out.PreScore *out = new(config.PluginSet) @@ -730,6 +739,15 @@ func autoConvert_config_Plugins_To_v1beta1_Plugins(in *config.Plugins, out *v1be } else { out.Filter = nil } + if in.PostFilter != nil { + in, out := &in.PostFilter, &out.PostFilter + *out = new(v1beta1.PluginSet) + if err := Convert_config_PluginSet_To_v1beta1_PluginSet(*in, *out, s); err != nil { + return err + } + } else { + out.PostFilter = nil + } if in.PreScore != nil { in, out := &in.PreScore, &out.PreScore *out = new(v1beta1.PluginSet) diff --git a/pkg/scheduler/apis/config/zz_generated.deepcopy.go b/pkg/scheduler/apis/config/zz_generated.deepcopy.go index ae2a0618553..093f2db86a1 100644 --- a/pkg/scheduler/apis/config/zz_generated.deepcopy.go +++ b/pkg/scheduler/apis/config/zz_generated.deepcopy.go @@ -445,6 +445,11 @@ func (in *Plugins) DeepCopyInto(out *Plugins) { *out = new(PluginSet) (*in).DeepCopyInto(*out) } + if in.PostFilter != nil { + in, out := &in.PostFilter, &out.PostFilter + *out = new(PluginSet) + (*in).DeepCopyInto(*out) + } if in.PreScore != nil { in, out := &in.PreScore, &out.PreScore *out = new(PluginSet) diff --git a/staging/src/k8s.io/kube-scheduler/config/v1beta1/zz_generated.deepcopy.go b/staging/src/k8s.io/kube-scheduler/config/v1beta1/zz_generated.deepcopy.go index 5200e0bc97a..e7700c1818a 100644 --- a/staging/src/k8s.io/kube-scheduler/config/v1beta1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/kube-scheduler/config/v1beta1/zz_generated.deepcopy.go @@ -387,6 +387,11 @@ func (in *Plugins) DeepCopyInto(out *Plugins) { *out = new(PluginSet) (*in).DeepCopyInto(*out) } + if in.PostFilter != nil { + in, out := &in.PostFilter, &out.PostFilter + *out = new(PluginSet) + (*in).DeepCopyInto(*out) + } if in.PreScore != nil { in, out := &in.PreScore, &out.PreScore *out = new(PluginSet)