Refactor: rewrite Merge method to address readability and efficiency

Signed-off-by: Dave Chen <dave.chen@arm.com>
This commit is contained in:
Dave Chen 2021-01-07 16:36:30 +08:00
parent ab8dda3c88
commit 3c197c55ff

View File

@ -77,6 +77,15 @@ const (
// This list should be exactly the same as the codes iota defined above in the same order. // 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"} 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 { func (c Code) String() string {
return codes[c] return codes[c]
} }
@ -184,28 +193,19 @@ func (p PluginToStatus) Merge() *Status {
} }
finalStatus := NewStatus(Success) finalStatus := NewStatus(Success)
var hasUnschedulableAndUnresolvable, hasUnschedulable bool
for _, s := range p { for _, s := range p {
if s.Code() == Error { if s.Code() == Error {
finalStatus.err = s.AsError() finalStatus.err = s.AsError()
} else if s.Code() == UnschedulableAndUnresolvable {
hasUnschedulableAndUnresolvable = true
} else if s.Code() == Unschedulable {
hasUnschedulable = true
} }
if statusPrecedence[s.Code()] > statusPrecedence[finalStatus.code] {
finalStatus.code = s.Code() finalStatus.code = s.Code()
}
for _, r := range s.reasons { for _, r := range s.reasons {
finalStatus.AppendReason(r) finalStatus.AppendReason(r)
} }
} }
if finalStatus.err != nil {
finalStatus.code = Error
} else if hasUnschedulableAndUnresolvable {
finalStatus.code = UnschedulableAndUnresolvable
} else if hasUnschedulable {
finalStatus.code = Unschedulable
}
return finalStatus return finalStatus
} }