From b79c2ebd7e1315c18c8a3e1f6a5aee9ac9a5f73b Mon Sep 17 00:00:00 2001 From: Jie Shen Date: Tue, 26 Jan 2021 13:48:58 +0800 Subject: [PATCH] Wrap errors for framework/runtime --- pkg/scheduler/framework/runtime/framework.go | 6 ++-- .../framework/runtime/framework_test.go | 29 ++++++++++--------- pkg/scheduler/scheduler_test.go | 2 +- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/pkg/scheduler/framework/runtime/framework.go b/pkg/scheduler/framework/runtime/framework.go index 8c97c94f036..d3e8c52f9df 100644 --- a/pkg/scheduler/framework/runtime/framework.go +++ b/pkg/scheduler/framework/runtime/framework.go @@ -538,7 +538,7 @@ func (f *frameworkImpl) RunFilterPlugins( if !pluginStatus.IsUnschedulable() { // Filter plugins are not supposed to return any status other than // Success or Unschedulable. - errStatus := framework.NewStatus(framework.Error, fmt.Sprintf("running %q filter plugin for pod %q: %v", pl.Name(), pod.Name, pluginStatus.Message())) + errStatus := framework.AsStatus(fmt.Errorf("running %q filter plugin: %w", pl.Name(), pluginStatus.AsError())) return map[string]*framework.Status{pl.Name(): errStatus} } statuses[pl.Name()] = pluginStatus @@ -577,7 +577,7 @@ func (f *frameworkImpl) RunPostFilterPlugins(ctx context.Context, state *framewo return r, s } else if !s.IsUnschedulable() { // Any status other than Success or Unschedulable is Error. - return nil, framework.NewStatus(framework.Error, s.Message()) + return nil, framework.AsStatus(s.AsError()) } statuses[pl.Name()] = s } @@ -635,7 +635,7 @@ func (f *frameworkImpl) RunFilterPluginsWithNominatedPods(ctx context.Context, s var err error podsAdded, stateToUse, nodeInfoToUse, err = addNominatedPods(ctx, ph, pod, state, info) if err != nil { - return framework.NewStatus(framework.Error, err.Error()) + return framework.AsStatus(err) } } else if !podsAdded || !status.IsSuccess() { break diff --git a/pkg/scheduler/framework/runtime/framework_test.go b/pkg/scheduler/framework/runtime/framework_test.go index d62f2e75744..d83a40df56d 100644 --- a/pkg/scheduler/framework/runtime/framework_test.go +++ b/pkg/scheduler/framework/runtime/framework_test.go @@ -363,7 +363,10 @@ var nodes = []*v1.Node{ {ObjectMeta: metav1.ObjectMeta{Name: "node2"}}, } -var errInjectedStatus = errors.New("injected status") +var ( + errInjectedStatus = errors.New("injected status") + errInjectedFilterStatus = errors.New("injected filter status") +) func newFrameworkWithQueueSortAndBind(r Registry, pl *config.Plugins, plc []config.PluginConfig, opts ...Option) (framework.Framework, error) { if _, ok := r[queueSortPlugin]; !ok { @@ -891,8 +894,8 @@ func TestFilterPlugins(t *testing.T) { inj: injectedResult{FilterStatus: int(framework.Error)}, }, }, - wantStatus: framework.NewStatus(framework.Error, `running "TestPlugin" filter plugin for pod "": injected filter status`), - wantStatusMap: framework.PluginToStatus{"TestPlugin": framework.NewStatus(framework.Error, `running "TestPlugin" filter plugin for pod "": injected filter status`)}, + wantStatus: framework.AsStatus(fmt.Errorf(`running "TestPlugin" filter plugin: %w`, errInjectedFilterStatus)), + wantStatusMap: framework.PluginToStatus{"TestPlugin": framework.AsStatus(fmt.Errorf(`running "TestPlugin" filter plugin: %w`, errInjectedFilterStatus))}, }, { name: "UnschedulableFilter", @@ -931,8 +934,8 @@ func TestFilterPlugins(t *testing.T) { inj: injectedResult{FilterStatus: int(framework.Error)}, }, }, - wantStatus: framework.NewStatus(framework.Error, `running "TestPlugin1" filter plugin for pod "": injected filter status`), - wantStatusMap: framework.PluginToStatus{"TestPlugin1": framework.NewStatus(framework.Error, `running "TestPlugin1" filter plugin for pod "": injected filter status`)}, + wantStatus: framework.AsStatus(fmt.Errorf(`running "TestPlugin1" filter plugin: %w`, errInjectedFilterStatus)), + wantStatusMap: framework.PluginToStatus{"TestPlugin1": framework.AsStatus(fmt.Errorf(`running "TestPlugin1" filter plugin: %w`, errInjectedFilterStatus))}, }, { name: "SuccessAndSuccessFilters", @@ -962,8 +965,8 @@ func TestFilterPlugins(t *testing.T) { inj: injectedResult{FilterStatus: int(framework.Success)}, }, }, - wantStatus: framework.NewStatus(framework.Error, `running "TestPlugin1" filter plugin for pod "": injected filter status`), - wantStatusMap: framework.PluginToStatus{"TestPlugin1": framework.NewStatus(framework.Error, `running "TestPlugin1" filter plugin for pod "": injected filter status`)}, + wantStatus: framework.AsStatus(fmt.Errorf(`running "TestPlugin1" filter plugin: %w`, errInjectedFilterStatus)), + wantStatusMap: framework.PluginToStatus{"TestPlugin1": framework.AsStatus(fmt.Errorf(`running "TestPlugin1" filter plugin: %w`, errInjectedFilterStatus))}, }, { name: "SuccessAndErrorFilters", @@ -978,8 +981,8 @@ func TestFilterPlugins(t *testing.T) { inj: injectedResult{FilterStatus: int(framework.Error)}, }, }, - wantStatus: framework.NewStatus(framework.Error, `running "TestPlugin2" filter plugin for pod "": injected filter status`), - wantStatusMap: framework.PluginToStatus{"TestPlugin2": framework.NewStatus(framework.Error, `running "TestPlugin2" filter plugin for pod "": injected filter status`)}, + wantStatus: framework.AsStatus(fmt.Errorf(`running "TestPlugin2" filter plugin: %w`, errInjectedFilterStatus)), + wantStatusMap: framework.PluginToStatus{"TestPlugin2": framework.AsStatus(fmt.Errorf(`running "TestPlugin2" filter plugin: %w`, errInjectedFilterStatus))}, }, { name: "SuccessAndUnschedulableFilters", @@ -1023,8 +1026,8 @@ func TestFilterPlugins(t *testing.T) { }, }, runAllFilters: true, - wantStatus: framework.NewStatus(framework.Error, `running "TestPlugin1" filter plugin for pod "": injected filter status`), - wantStatusMap: framework.PluginToStatus{"TestPlugin1": framework.NewStatus(framework.Error, `running "TestPlugin1" filter plugin for pod "": injected filter status`)}, + wantStatus: framework.AsStatus(fmt.Errorf(`running "TestPlugin1" filter plugin: %w`, errInjectedFilterStatus)), + wantStatusMap: framework.PluginToStatus{"TestPlugin1": framework.AsStatus(fmt.Errorf(`running "TestPlugin1" filter plugin: %w`, errInjectedFilterStatus))}, }, { name: "ErrorAndErrorFilters", @@ -1215,7 +1218,7 @@ func TestFilterPluginsWithNominatedPods(t *testing.T) { nominatedPod: highPriorityPod, node: node, nodeInfo: framework.NewNodeInfo(pod), - wantStatus: framework.NewStatus(framework.Error, `running AddPod on PreFilter plugin "TestPlugin1": injected status`), + wantStatus: framework.AsStatus(fmt.Errorf(`running AddPod on PreFilter plugin "TestPlugin1": %w`, errInjectedStatus)), }, { name: "node has a high-priority nominated pod and filters fail", @@ -1235,7 +1238,7 @@ func TestFilterPluginsWithNominatedPods(t *testing.T) { nominatedPod: highPriorityPod, node: node, nodeInfo: framework.NewNodeInfo(pod), - wantStatus: framework.NewStatus(framework.Error, `running "TestPlugin2" filter plugin for pod "": injected filter status`), + wantStatus: framework.AsStatus(fmt.Errorf(`running "TestPlugin2" filter plugin: %w`, errInjectedFilterStatus)), }, { name: "node has a low-priority nominated pod and pre filters return unschedulable", diff --git a/pkg/scheduler/scheduler_test.go b/pkg/scheduler/scheduler_test.go index f5a80d18f59..de7ccbaedd5 100644 --- a/pkg/scheduler/scheduler_test.go +++ b/pkg/scheduler/scheduler_test.go @@ -954,7 +954,7 @@ func TestSchedulerWithVolumeBinding(t *testing.T) { FindErr: findErr, }, eventReason: "FailedScheduling", - expectError: fmt.Errorf("running %q filter plugin for pod %q: %v", volumebinding.Name, "foo", findErr), + expectError: fmt.Errorf("running %q filter plugin: %v", volumebinding.Name, findErr), }, { name: "assume error",