fix bug: score plugin does not work

Signed-off-by: Garrybest <garrybest@foxmail.com>
This commit is contained in:
Garrybest 2021-07-30 16:16:21 +08:00
parent 237cc06920
commit 9d62d21da0
1 changed files with 14 additions and 10 deletions

View File

@ -39,13 +39,8 @@ func NewFramework(plugins []string) framework.Framework {
klog.Warningf("scheduling plugin %s not exists", p) klog.Warningf("scheduling plugin %s not exists", p)
continue continue
} }
if reflect.TypeOf(plugin).Implements(filterType) { addPluginToList(plugin, filterType, &filterPluginsList)
newPlugins := reflect.Append(filterPluginsList, reflect.ValueOf(plugin)) addPluginToList(plugin, scoreType, &scorePluginsList)
filterPluginsList.Set(newPlugins)
} else if reflect.TypeOf(plugin).Implements(scoreType) {
newPlugins := reflect.Append(scorePluginsList, reflect.ValueOf(plugin))
scorePluginsList.Set(newPlugins)
}
} }
return out return out
@ -68,17 +63,26 @@ func (frw *frameworkImpl) RunFilterPlugins(ctx context.Context, placement *polic
func (frw *frameworkImpl) RunScorePlugins(ctx context.Context, placement *policyv1alpha1.Placement, clusters []*clusterv1alpha1.Cluster) (framework.PluginToClusterScores, error) { func (frw *frameworkImpl) RunScorePlugins(ctx context.Context, placement *policyv1alpha1.Placement, clusters []*clusterv1alpha1.Cluster) (framework.PluginToClusterScores, error) {
result := make(framework.PluginToClusterScores, len(frw.filterPlugins)) result := make(framework.PluginToClusterScores, len(frw.filterPlugins))
for _, p := range frw.scorePlugins { for _, p := range frw.scorePlugins {
for i, cluster := range clusters { var scoreList framework.ClusterScoreList
for _, cluster := range clusters {
score, res := p.Score(ctx, placement, cluster) score, res := p.Score(ctx, placement, cluster)
if !res.IsSuccess() { if !res.IsSuccess() {
return nil, fmt.Errorf("plugin %q failed with: %w", p.Name(), res.AsError()) return nil, fmt.Errorf("plugin %q failed with: %w", p.Name(), res.AsError())
} }
result[p.Name()][i] = framework.ClusterScore{ scoreList = append(scoreList, framework.ClusterScore{
Name: cluster.Name, Name: cluster.Name,
Score: score, Score: score,
})
} }
} result[p.Name()] = scoreList
} }
return result, nil return result, nil
} }
func addPluginToList(plugin framework.Plugin, pluginType reflect.Type, pluginList *reflect.Value) {
if reflect.TypeOf(plugin).Implements(pluginType) {
newPlugins := reflect.Append(*pluginList, reflect.ValueOf(plugin))
pluginList.Set(newPlugins)
}
}