From 3c197c55ffb4ed824bf664731eff0d8ff5a0adb3 Mon Sep 17 00:00:00 2001 From: Dave Chen Date: Thu, 7 Jan 2021 16:36:30 +0800 Subject: [PATCH] Refactor: rewrite `Merge` method to address readability and efficiency Signed-off-by: Dave Chen --- pkg/scheduler/framework/interface.go | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pkg/scheduler/framework/interface.go b/pkg/scheduler/framework/interface.go index c1a392135b65..64bfcae1119f 100644 --- a/pkg/scheduler/framework/interface.go +++ b/pkg/scheduler/framework/interface.go @@ -77,6 +77,15 @@ const ( // This list should be exactly the same as the codes iota defined above in the same order. var codes = []string{"Success", "Error", "Unschedulable", "UnschedulableAndUnresolvable", "Wait", "Skip"} +// statusPrecedence defines a map from status to its precedence, larger value means higher precedent. +var statusPrecedence = map[Code]int{ + Error: 3, + UnschedulableAndUnresolvable: 2, + Unschedulable: 1, + // Any other statuses we know today, `Skip` or `Wait`, will take precedence over `Success`. + Success: -1, +} + func (c Code) String() string { return codes[c] } @@ -184,28 +193,19 @@ func (p PluginToStatus) Merge() *Status { } finalStatus := NewStatus(Success) - var hasUnschedulableAndUnresolvable, hasUnschedulable bool for _, s := range p { if s.Code() == Error { finalStatus.err = s.AsError() - } else if s.Code() == UnschedulableAndUnresolvable { - hasUnschedulableAndUnresolvable = true - } else if s.Code() == Unschedulable { - hasUnschedulable = true } - finalStatus.code = s.Code() + if statusPrecedence[s.Code()] > statusPrecedence[finalStatus.code] { + finalStatus.code = s.Code() + } + for _, r := range s.reasons { finalStatus.AppendReason(r) } } - if finalStatus.err != nil { - finalStatus.code = Error - } else if hasUnschedulableAndUnresolvable { - finalStatus.code = UnschedulableAndUnresolvable - } else if hasUnschedulable { - finalStatus.code = Unschedulable - } return finalStatus }