Change:
Scheduler's default plugin returns an invalid score that is not in the range of [0, 100], resulting in no Pods being scheduled: After investigation, I found that there was a bug in the code that built the framework when the scheduler started. When using the plugins declared in the regular extension point to override the plugins declared in the MultiPoint, the traversed variable will be modified in the following loop: This may cause a same scoring plugin (e.g. ) to be loaded multiple times: Further, this results in a node being processed multiple times by a plugin's (e.g. 's) method, resulting in an invalid score that is not in the range of [0, 100]: If the scheduler's MultiPoint feature is used (either through the default plugins or through manual configuration), and the configuration (e.g. the scoring weight) of a certain plugin is overridden in a regular extension point, the plugin will only be loaded once in this extension point, and no illegal scores will be returned. An example KubeSchedulerConfiguration: No response K8s v1.24.15 or higher None <details</details<details</details<details</details<details</details
This issue is currently awaiting triage. If a SIG or subproject determines this is a relevant issue, they will accept it by applying the label and provide further guidance. The label can be by org members by writing in a comment. <detailsInstructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details
/sig scheduling
Can I work on this?
this is being worked on. see
I see, Is there any other task that you are aware of and I can work on? Thanks.

Discussion:
"k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/parallelize" "k8s.io/kubernetes/pkg/scheduler/metrics" <ins> "k8s.io/kubernetes/pkg/util/slice" </ins> ) const (

// - part 3: other plugins (excluded by part 1 & 2) in regular extension point. newPlugins := reflect.New(reflect.TypeOf(e.slicePtr).Elem()).Elem() // part 1 <del> for _, name := range enabledSet.list { </del> <ins> for _, name := range slice.CopyStrings(enabledSet.list) { </ins> if overridePlugins.has(name) { newPlugins = reflect.Append(newPlugins, reflect.ValueOf(pluginsMap[name])) enabledSet.delete(name)

scoreWithNormalizePlugin1         = "score-with-normalize-plugin-1" scoreWithNormalizePlugin2         = "score-with-normalize-plugin-2" scorePlugin1                      = "score-plugin-1" <ins> scorePlugin2                      = "score-plugin-2" </ins> pluginNotImplementingScore        = "plugin-not-implementing-score" preFilterPluginName               = "prefilter-plugin" preFilterWithExtensionsPluginName = "prefilter-with-extensions-plugin"

return &TestScorePlugin{scorePlugin1, inj}, nil } <ins> func newScorePlugin2(_ context.Context, injArgs runtime.Object, f framework.Handle) (framework.Plugin, error) { var inj injectedResult if err := DecodeInto(injArgs, &inj); err != nil { return nil, err } return &TestScorePlugin{scorePlugin2, inj}, nil } </ins> func newPluginNotImplementingScore(_ context.Context, _ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &PluginNotImplementingScore{}, nil }

return nil } <ins> // nolint:errcheck   // Ignore the error returned by Register as before </ins> var registry = func() Registry { r := make(Registry) r.Register(scoreWithNormalizePlugin1, newScoreWithNormalizePlugin1) r.Register(scoreWithNormalizePlugin2, newScoreWithNormalizePlugin2) r.Register(scorePlugin1, newScorePlugin1) <ins> r.Register(scorePlugin2, newScorePlugin2) </ins> r.Register(pluginNotImplementingScore, newPluginNotImplementingScore) r.Register(duplicatePluginName, newDuplicatePlugin) r.Register(testPlugin, newTestPlugin)

}, wantErr: "already registered", }, <ins> { name: "Override MultiPoint plugins weights and avoid a plugin being loaded multiple times", plugins: &config.Plugins{ MultiPoint: config.PluginSet{ Enabled: []config.Plugin{ {Name: testPlugin}, {Name: scorePlugin1}, }, }, Score: config.PluginSet{ Enabled: []config.Plugin{ {Name: scorePlugin1, Weight: 5}, {Name: scorePlugin2, Weight: 5}, {Name: testPlugin, Weight: 3}, }, }, }, wantPlugins: &config.Plugins{ QueueSort:  config.PluginSet{Enabled: []config.Plugin{{Name: testPlugin}}}, PreFilter:  config.PluginSet{Enabled: []config.Plugin{{Name: testPlugin}}}, Filter:     config.PluginSet{Enabled: []config.Plugin{{Name: testPlugin}}}, PostFilter: config.PluginSet{Enabled: []config.Plugin{{Name: testPlugin}}}, PreScore: config.PluginSet{Enabled: []config.Plugin{ {Name: testPlugin}, {Name: scorePlugin1}, }}, Score: config.PluginSet{Enabled: []config.Plugin{ {Name: scorePlugin1, Weight: 5}, {Name: testPlugin, Weight: 3}, {Name: scorePlugin2, Weight: 5}, }}, Reserve:  config.PluginSet{Enabled: []config.Plugin{{Name: testPlugin}}}, Permit:   config.PluginSet{Enabled: []config.Plugin{{Name: testPlugin}}}, PreBind:  config.PluginSet{Enabled: []config.Plugin{{Name: testPlugin}}}, Bind:     config.PluginSet{Enabled: []config.Plugin{{Name: testPlugin}}}, PostBind: config.PluginSet{Enabled: []config.Plugin{{Name: testPlugin}}}, }, }, </ins> } for _, tc := range tests {