wrap errors in selectorspread and podtoplogyspread plugin

This commit is contained in:
Arghya Sadhu 2020-09-27 08:33:02 +05:30
parent c8ebc8ab75
commit 8154dc95b5
4 changed files with 18 additions and 17 deletions

View File

@ -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 { func (pl *PodTopologySpread) PreFilter(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod) *framework.Status {
s, err := pl.calPreFilterState(pod) s, err := pl.calPreFilterState(pod)
if err != nil { if err != nil {
return framework.NewStatus(framework.Error, err.Error()) return framework.AsStatus(err)
} }
cycleState.Write(preFilterStateKey, s) cycleState.Write(preFilterStateKey, s)
return nil 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 { 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) s, err := getPreFilterState(cycleState)
if err != nil { if err != nil {
return framework.NewStatus(framework.Error, err.Error()) return framework.AsStatus(err)
} }
s.updateWithPod(podToAdd, podToSchedule, nodeInfo.Node(), 1) 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 { 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) s, err := getPreFilterState(cycleState)
if err != nil { if err != nil {
return framework.NewStatus(framework.Error, err.Error()) return framework.AsStatus(err)
} }
s.updateWithPod(podToRemove, podToSchedule, nodeInfo.Node(), -1) s.updateWithPod(podToRemove, podToSchedule, nodeInfo.Node(), -1)
@ -184,7 +184,7 @@ func getPreFilterState(cycleState *framework.CycleState) (*preFilterState, error
c, err := cycleState.Read(preFilterStateKey) c, err := cycleState.Read(preFilterStateKey)
if err != nil { if err != nil {
// preFilterState doesn't exist, likely PreFilter wasn't invoked. // 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) 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 { func (pl *PodTopologySpread) Filter(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status {
node := nodeInfo.Node() node := nodeInfo.Node()
if node == nil { if node == nil {
return framework.NewStatus(framework.Error, "node not found") return framework.AsStatus(fmt.Errorf("node not found"))
} }
s, err := getPreFilterState(cycleState) s, err := getPreFilterState(cycleState)
if err != nil { if err != nil {
return framework.NewStatus(framework.Error, err.Error()) return framework.AsStatus(err)
} }
// However, "empty" preFilterState is legit which tolerates every toSchedule Pod. // However, "empty" preFilterState is legit which tolerates every toSchedule Pod.

View File

@ -18,6 +18,7 @@ package podtopologyspread
import ( import (
"context" "context"
"fmt"
"reflect" "reflect"
"testing" "testing"
@ -1651,7 +1652,7 @@ func TestPreFilterDisabled(t *testing.T) {
p := &PodTopologySpread{} p := &PodTopologySpread{}
cycleState := framework.NewCycleState() cycleState := framework.NewCycleState()
gotStatus := p.Filter(context.Background(), cycleState, pod, nodeInfo) 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) { if !reflect.DeepEqual(gotStatus, wantStatus) {
t.Errorf("status does not match: %v, want: %v", gotStatus, wantStatus) t.Errorf("status does not match: %v, want: %v", gotStatus, wantStatus)
} }

View File

@ -113,7 +113,7 @@ func (pl *PodTopologySpread) PreScore(
) *framework.Status { ) *framework.Status {
allNodes, err := pl.sharedLister.NodeInfos().List() allNodes, err := pl.sharedLister.NodeInfos().List()
if err != nil { 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 { if len(filteredNodes) == 0 || len(allNodes) == 0 {
@ -127,7 +127,7 @@ func (pl *PodTopologySpread) PreScore(
} }
err = pl.initPreScoreState(state, pod, filteredNodes) err = pl.initPreScoreState(state, pod, filteredNodes)
if err != nil { 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. // return if incoming pod doesn't have soft topology spread Constraints.
@ -173,14 +173,14 @@ func (pl *PodTopologySpread) PreScore(
// it is normalized later. // it is normalized later.
func (pl *PodTopologySpread) Score(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, nodeName string) (int64, *framework.Status) { 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) nodeInfo, err := pl.sharedLister.NodeInfos().Get(nodeName)
if err != nil || nodeInfo.Node() == nil { if err != nil {
return 0, framework.NewStatus(framework.Error, fmt.Sprintf("getting node %q from Snapshot: %v, node is nil: %v", nodeName, err, nodeInfo.Node() == nil)) return 0, framework.AsStatus(fmt.Errorf("getting node %q from Snapshot: %w", nodeName, err))
} }
node := nodeInfo.Node() node := nodeInfo.Node()
s, err := getPreScoreState(cycleState) s, err := getPreScoreState(cycleState)
if err != nil { if err != nil {
return 0, framework.NewStatus(framework.Error, err.Error()) return 0, framework.AsStatus(err)
} }
// Return if the node is not qualified. // 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 { func (pl *PodTopologySpread) NormalizeScore(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, scores framework.NodeScoreList) *framework.Status {
s, err := getPreScoreState(cycleState) s, err := getPreScoreState(cycleState)
if err != nil { if err != nil {
return framework.NewStatus(framework.Error, err.Error()) return framework.AsStatus(err)
} }
if s == nil { if s == nil {
return nil return nil
@ -235,7 +235,7 @@ func (pl *PodTopologySpread) NormalizeScore(ctx context.Context, cycleState *fra
for i := range scores { for i := range scores {
nodeInfo, err := pl.sharedLister.NodeInfos().Get(scores[i].Name) nodeInfo, err := pl.sharedLister.NodeInfos().Get(scores[i].Name)
if err != nil { if err != nil {
return framework.NewStatus(framework.Error, err.Error()) return framework.AsStatus(err)
} }
node := nodeInfo.Node() node := nodeInfo.Node()

View File

@ -86,17 +86,17 @@ func (pl *SelectorSpread) Score(ctx context.Context, state *framework.CycleState
c, err := state.Read(preScoreStateKey) c, err := state.Read(preScoreStateKey)
if err != nil { 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) s, ok := c.(*preScoreState)
if !ok { 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) nodeInfo, err := pl.sharedLister.NodeInfos().Get(nodeName)
if err != nil { 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) count := countMatchingPods(pod.Namespace, s.selector, nodeInfo)