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"`