Fix edge case in qos evaluation

pull/6/head
derekwaynecarr 2016-10-10 18:44:14 -04:00
parent cf707989b3
commit aeed9cab5e
2 changed files with 17 additions and 1 deletions

View File

@ -68,11 +68,13 @@ func GetPodQOS(pod *api.Pod) QOSClass {
}
}
// process limits
qosLimitsFound := sets.NewString()
for name, quantity := range container.Resources.Limits {
if !supportedQoSComputeResources.Has(string(name)) {
continue
}
if quantity.Cmp(zeroQuantity) == 1 {
qosLimitsFound.Insert(string(name))
delta := quantity.Copy()
if _, exists := limits[name]; !exists {
limits[name] = *delta
@ -82,7 +84,8 @@ func GetPodQOS(pod *api.Pod) QOSClass {
}
}
}
if len(limits) != len(supportedQoSComputeResources) {
if len(qosLimitsFound) != len(supportedQoSComputeResources) {
isGuaranteed = false
}
}

View File

@ -135,6 +135,12 @@ func TestGetPodQOS(t *testing.T) {
}),
expected: Burstable,
},
{
pod: newPod("burstable-no-limits", []api.Container{
newContainer("burstable", getResourceList("100m", "100Mi"), getResourceList("", "")),
}),
expected: Burstable,
},
{
pod: newPod("burstable-guaranteed", []api.Container{
newContainer("burstable", getResourceList("1", "100Mi"), getResourceList("2", "100Mi")),
@ -142,6 +148,13 @@ func TestGetPodQOS(t *testing.T) {
}),
expected: Burstable,
},
{
pod: newPod("burstable-unbounded-but-requests-match-limits", []api.Container{
newContainer("burstable", getResourceList("100m", "100Mi"), getResourceList("200m", "200Mi")),
newContainer("burstable-unbounded", getResourceList("100m", "100Mi"), getResourceList("", "")),
}),
expected: Burstable,
},
{
pod: newPod("burstable-1", []api.Container{
newContainer("burstable", getResourceList("10m", "100Mi"), getResourceList("100m", "200Mi")),