From 655ab516c790894594bf1a607202bec004200117 Mon Sep 17 00:00:00 2001 From: googs1025 Date: Tue, 25 Feb 2025 09:33:48 +0800 Subject: [PATCH] chore: add error handle for setDefaultEvictor func --- pkg/descheduler/policyconfig.go | 20 +++++++++++--------- pkg/descheduler/policyconfig_test.go | 20 ++++++++++++++++++++ 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/pkg/descheduler/policyconfig.go b/pkg/descheduler/policyconfig.go index 393b66d24..d2f281abb 100644 --- a/pkg/descheduler/policyconfig.go +++ b/pkg/descheduler/policyconfig.go @@ -62,21 +62,22 @@ func decode(policyConfigFile string, policy []byte, client clientset.Interface, if err != nil { return nil, err } - - setDefaults(*internalPolicy, registry, client) - - return internalPolicy, nil + return setDefaults(*internalPolicy, registry, client) } -func setDefaults(in api.DeschedulerPolicy, registry pluginregistry.Registry, client clientset.Interface) *api.DeschedulerPolicy { +func setDefaults(in api.DeschedulerPolicy, registry pluginregistry.Registry, client clientset.Interface) (*api.DeschedulerPolicy, error) { + var err error for idx, profile := range in.Profiles { // If we need to set defaults coming from loadtime in each profile we do it here - in.Profiles[idx] = setDefaultEvictor(profile, client) + in.Profiles[idx], err = setDefaultEvictor(profile, client) + if err != nil { + return nil, err + } for _, pluginConfig := range profile.PluginConfigs { setDefaultsPluginConfig(&pluginConfig, registry) } } - return &in + return &in, nil } func setDefaultsPluginConfig(pluginConfig *api.PluginConfig, registry pluginregistry.Registry) { @@ -97,7 +98,7 @@ func findPluginName(names []string, key string) bool { return false } -func setDefaultEvictor(profile api.DeschedulerProfile, client clientset.Interface) api.DeschedulerProfile { +func setDefaultEvictor(profile api.DeschedulerProfile, client clientset.Interface) (api.DeschedulerProfile, error) { newPluginConfig := api.PluginConfig{ Name: defaultevictor.PluginName, Args: &defaultevictor.DefaultEvictorArgs{ @@ -128,10 +129,11 @@ func setDefaultEvictor(profile api.DeschedulerProfile, client clientset.Interfac thresholdPriority, err := utils.GetPriorityValueFromPriorityThreshold(context.TODO(), client, defaultevictorPluginConfig.Args.(*defaultevictor.DefaultEvictorArgs).PriorityThreshold) if err != nil { klog.Error(err, "Failed to get threshold priority from args") + return profile, err } profile.PluginConfigs[idx].Args.(*defaultevictor.DefaultEvictorArgs).PriorityThreshold = &api.PriorityThreshold{} profile.PluginConfigs[idx].Args.(*defaultevictor.DefaultEvictorArgs).PriorityThreshold.Value = &thresholdPriority - return profile + return profile, nil } func validateDeschedulerConfiguration(in api.DeschedulerPolicy, registry pluginregistry.Registry) error { diff --git a/pkg/descheduler/policyconfig_test.go b/pkg/descheduler/policyconfig_test.go index 8c3176235..1ae417ec2 100644 --- a/pkg/descheduler/policyconfig_test.go +++ b/pkg/descheduler/policyconfig_test.go @@ -17,6 +17,7 @@ limitations under the License. package descheduler import ( + "errors" "fmt" "testing" @@ -121,6 +122,25 @@ profiles: }, }, }, + { + description: "v1alpha2 to internal, validate error handling (priorityThreshold exceeding maximum)", + policy: []byte(`apiVersion: "descheduler/v1alpha2" +kind: "DeschedulerPolicy" +profiles: + - name: ProfileName + pluginConfig: + - name: "DefaultEvictor" + args: + priorityThreshold: + value: 2000000001 + plugins: + deschedule: + enabled: + - "RemovePodsHavingTooManyRestarts" +`), + result: nil, + err: errors.New("priority threshold can't be greater than 2000000000"), + }, } for _, tc := range testCases {