From 6b292822f5c6513bcb162b1b573eceae4ff91428 Mon Sep 17 00:00:00 2001 From: "Bobby (Babak) Salamat" Date: Fri, 16 Feb 2018 14:35:50 -0800 Subject: [PATCH] Pick the PriorityClass with the lowest value of priority in case more than one global default exists --- plugin/pkg/admission/priority/admission.go | 9 +++++++-- plugin/pkg/admission/priority/admission_test.go | 8 ++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/plugin/pkg/admission/priority/admission.go b/plugin/pkg/admission/priority/admission.go index 5a0c98d278c..3750ec86aff 100644 --- a/plugin/pkg/admission/priority/admission.go +++ b/plugin/pkg/admission/priority/admission.go @@ -231,12 +231,17 @@ func (p *PriorityPlugin) getDefaultPriorityClass() (*scheduling.PriorityClass, e if err != nil { return nil, err } + // In case more than one global default priority class is added as a result of a race condition, + // we pick the one with the lowest priority value. + var defaultPC *scheduling.PriorityClass for _, pci := range list { if pci.GlobalDefault { - return pci, nil + if defaultPC == nil || defaultPC.Value > pci.Value { + defaultPC = pci + } } } - return nil, nil + return defaultPC, nil } func (p *PriorityPlugin) getDefaultPriority() (int32, error) { diff --git a/plugin/pkg/admission/priority/admission_test.go b/plugin/pkg/admission/priority/admission_test.go index c9122ac63f0..06963588c61 100644 --- a/plugin/pkg/admission/priority/admission_test.go +++ b/plugin/pkg/admission/priority/admission_test.go @@ -189,6 +189,14 @@ func TestDefaultPriority(t *testing.T) { expectedDefaultBefore: scheduling.DefaultPriorityWhenNoDefaultClassExists, expectedDefaultAfter: defaultClass1.Value, }, + { + name: "multiple default classes resolves to the minimum value among them", + classesBefore: []*scheduling.PriorityClass{defaultClass1, defaultClass2}, + classesAfter: []*scheduling.PriorityClass{defaultClass2}, + attributes: admission.NewAttributesRecord(nil, nil, pcKind, "", defaultClass1.Name, pcResource, "", admission.Delete, nil), + expectedDefaultBefore: defaultClass1.Value, + expectedDefaultAfter: defaultClass2.Value, + }, { name: "delete default priority class", classesBefore: []*scheduling.PriorityClass{defaultClass1},