From 8154dc95b5f0149cd968c5e405b25afd75ec5ce7 Mon Sep 17 00:00:00 2001 From: Arghya Sadhu Date: Sun, 27 Sep 2020 08:33:02 +0530 Subject: [PATCH] wrap errors in selectorspread and podtoplogyspread plugin --- .../plugins/podtopologyspread/filtering.go | 12 ++++++------ .../plugins/podtopologyspread/filtering_test.go | 3 ++- .../framework/plugins/podtopologyspread/scoring.go | 14 +++++++------- .../plugins/selectorspread/selector_spread.go | 6 +++--- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/filtering.go b/pkg/scheduler/framework/plugins/podtopologyspread/filtering.go index c6aa6414970..55aef0ee5f4 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/filtering.go +++ b/pkg/scheduler/framework/plugins/podtopologyspread/filtering.go @@ -146,7 +146,7 @@ func (s *preFilterState) updateWithPod(updatedPod, preemptorPod *v1.Pod, node *v func (pl *PodTopologySpread) PreFilter(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod) *framework.Status { s, err := pl.calPreFilterState(pod) if err != nil { - return framework.NewStatus(framework.Error, err.Error()) + return framework.AsStatus(err) } cycleState.Write(preFilterStateKey, s) return nil @@ -161,7 +161,7 @@ func (pl *PodTopologySpread) PreFilterExtensions() framework.PreFilterExtensions func (pl *PodTopologySpread) AddPod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { s, err := getPreFilterState(cycleState) if err != nil { - return framework.NewStatus(framework.Error, err.Error()) + return framework.AsStatus(err) } s.updateWithPod(podToAdd, podToSchedule, nodeInfo.Node(), 1) @@ -172,7 +172,7 @@ func (pl *PodTopologySpread) AddPod(ctx context.Context, cycleState *framework.C func (pl *PodTopologySpread) RemovePod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podToRemove *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { s, err := getPreFilterState(cycleState) if err != nil { - return framework.NewStatus(framework.Error, err.Error()) + return framework.AsStatus(err) } s.updateWithPod(podToRemove, podToSchedule, nodeInfo.Node(), -1) @@ -184,7 +184,7 @@ func getPreFilterState(cycleState *framework.CycleState) (*preFilterState, error c, err := cycleState.Read(preFilterStateKey) if err != nil { // preFilterState doesn't exist, likely PreFilter wasn't invoked. - return nil, fmt.Errorf("error reading %q from cycleState: %v", preFilterStateKey, err) + return nil, fmt.Errorf("reading %q from cycleState: %v", preFilterStateKey, err) } s, ok := c.(*preFilterState) @@ -276,12 +276,12 @@ func (pl *PodTopologySpread) calPreFilterState(pod *v1.Pod) (*preFilterState, er func (pl *PodTopologySpread) Filter(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { node := nodeInfo.Node() if node == nil { - return framework.NewStatus(framework.Error, "node not found") + return framework.AsStatus(fmt.Errorf("node not found")) } s, err := getPreFilterState(cycleState) if err != nil { - return framework.NewStatus(framework.Error, err.Error()) + return framework.AsStatus(err) } // However, "empty" preFilterState is legit which tolerates every toSchedule Pod. diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/filtering_test.go b/pkg/scheduler/framework/plugins/podtopologyspread/filtering_test.go index 8301d377b59..293a1520afc 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/filtering_test.go +++ b/pkg/scheduler/framework/plugins/podtopologyspread/filtering_test.go @@ -18,6 +18,7 @@ package podtopologyspread import ( "context" + "fmt" "reflect" "testing" @@ -1651,7 +1652,7 @@ func TestPreFilterDisabled(t *testing.T) { p := &PodTopologySpread{} cycleState := framework.NewCycleState() gotStatus := p.Filter(context.Background(), cycleState, pod, nodeInfo) - wantStatus := framework.NewStatus(framework.Error, `error reading "PreFilterPodTopologySpread" from cycleState: not found`) + wantStatus := framework.AsStatus(fmt.Errorf(`reading "PreFilterPodTopologySpread" from cycleState: not found`)) if !reflect.DeepEqual(gotStatus, wantStatus) { t.Errorf("status does not match: %v, want: %v", gotStatus, wantStatus) } diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/scoring.go b/pkg/scheduler/framework/plugins/podtopologyspread/scoring.go index 760b8580c62..8b0c402b03d 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/scoring.go +++ b/pkg/scheduler/framework/plugins/podtopologyspread/scoring.go @@ -113,7 +113,7 @@ func (pl *PodTopologySpread) PreScore( ) *framework.Status { allNodes, err := pl.sharedLister.NodeInfos().List() if err != nil { - return framework.NewStatus(framework.Error, fmt.Sprintf("error when getting all nodes: %v", err)) + return framework.AsStatus(fmt.Errorf("getting all nodes: %w", err)) } if len(filteredNodes) == 0 || len(allNodes) == 0 { @@ -127,7 +127,7 @@ func (pl *PodTopologySpread) PreScore( } err = pl.initPreScoreState(state, pod, filteredNodes) if err != nil { - return framework.NewStatus(framework.Error, fmt.Sprintf("error when calculating preScoreState: %v", err)) + return framework.AsStatus(fmt.Errorf("calculating preScoreState: %w", err)) } // return if incoming pod doesn't have soft topology spread Constraints. @@ -173,14 +173,14 @@ func (pl *PodTopologySpread) PreScore( // it is normalized later. func (pl *PodTopologySpread) Score(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, nodeName string) (int64, *framework.Status) { nodeInfo, err := pl.sharedLister.NodeInfos().Get(nodeName) - if err != nil || nodeInfo.Node() == nil { - return 0, framework.NewStatus(framework.Error, fmt.Sprintf("getting node %q from Snapshot: %v, node is nil: %v", nodeName, err, nodeInfo.Node() == nil)) + if err != nil { + return 0, framework.AsStatus(fmt.Errorf("getting node %q from Snapshot: %w", nodeName, err)) } node := nodeInfo.Node() s, err := getPreScoreState(cycleState) if err != nil { - return 0, framework.NewStatus(framework.Error, err.Error()) + return 0, framework.AsStatus(err) } // Return if the node is not qualified. @@ -210,7 +210,7 @@ func (pl *PodTopologySpread) Score(ctx context.Context, cycleState *framework.Cy func (pl *PodTopologySpread) NormalizeScore(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, scores framework.NodeScoreList) *framework.Status { s, err := getPreScoreState(cycleState) if err != nil { - return framework.NewStatus(framework.Error, err.Error()) + return framework.AsStatus(err) } if s == nil { return nil @@ -235,7 +235,7 @@ func (pl *PodTopologySpread) NormalizeScore(ctx context.Context, cycleState *fra for i := range scores { nodeInfo, err := pl.sharedLister.NodeInfos().Get(scores[i].Name) if err != nil { - return framework.NewStatus(framework.Error, err.Error()) + return framework.AsStatus(err) } node := nodeInfo.Node() diff --git a/pkg/scheduler/framework/plugins/selectorspread/selector_spread.go b/pkg/scheduler/framework/plugins/selectorspread/selector_spread.go index 4700ca24903..b332d9e9124 100644 --- a/pkg/scheduler/framework/plugins/selectorspread/selector_spread.go +++ b/pkg/scheduler/framework/plugins/selectorspread/selector_spread.go @@ -86,17 +86,17 @@ func (pl *SelectorSpread) Score(ctx context.Context, state *framework.CycleState c, err := state.Read(preScoreStateKey) if err != nil { - return 0, framework.NewStatus(framework.Error, fmt.Sprintf("Error reading %q from cycleState: %v", preScoreStateKey, err)) + return 0, framework.AsStatus(fmt.Errorf("reading %q from cycleState: %w", preScoreStateKey, err)) } s, ok := c.(*preScoreState) if !ok { - return 0, framework.NewStatus(framework.Error, fmt.Sprintf("%+v convert to tainttoleration.preScoreState error", c)) + return 0, framework.AsStatus(fmt.Errorf("cannot convert saved state to tainttoleration.preScoreState")) } nodeInfo, err := pl.sharedLister.NodeInfos().Get(nodeName) if err != nil { - return 0, framework.NewStatus(framework.Error, fmt.Sprintf("getting node %q from Snapshot: %v", nodeName, err)) + return 0, framework.AsStatus(fmt.Errorf("getting node %q from Snapshot: %w", nodeName, err)) } count := countMatchingPods(pod.Namespace, s.selector, nodeInfo)