Commit aeed9cab authored by derekwaynecarr's avatar derekwaynecarr

Fix edge case in qos evaluation

parent cf707989
...@@ -68,11 +68,13 @@ func GetPodQOS(pod *api.Pod) QOSClass { ...@@ -68,11 +68,13 @@ func GetPodQOS(pod *api.Pod) QOSClass {
} }
} }
// process limits // process limits
qosLimitsFound := sets.NewString()
for name, quantity := range container.Resources.Limits { for name, quantity := range container.Resources.Limits {
if !supportedQoSComputeResources.Has(string(name)) { if !supportedQoSComputeResources.Has(string(name)) {
continue continue
} }
if quantity.Cmp(zeroQuantity) == 1 { if quantity.Cmp(zeroQuantity) == 1 {
qosLimitsFound.Insert(string(name))
delta := quantity.Copy() delta := quantity.Copy()
if _, exists := limits[name]; !exists { if _, exists := limits[name]; !exists {
limits[name] = *delta limits[name] = *delta
...@@ -82,7 +84,8 @@ func GetPodQOS(pod *api.Pod) QOSClass { ...@@ -82,7 +84,8 @@ func GetPodQOS(pod *api.Pod) QOSClass {
} }
} }
} }
if len(limits) != len(supportedQoSComputeResources) {
if len(qosLimitsFound) != len(supportedQoSComputeResources) {
isGuaranteed = false isGuaranteed = false
} }
} }
......
...@@ -136,6 +136,12 @@ func TestGetPodQOS(t *testing.T) { ...@@ -136,6 +136,12 @@ func TestGetPodQOS(t *testing.T) {
expected: Burstable, expected: Burstable,
}, },
{ {
pod: newPod("burstable-no-limits", []api.Container{
newContainer("burstable", getResourceList("100m", "100Mi"), getResourceList("", "")),
}),
expected: Burstable,
},
{
pod: newPod("burstable-guaranteed", []api.Container{ pod: newPod("burstable-guaranteed", []api.Container{
newContainer("burstable", getResourceList("1", "100Mi"), getResourceList("2", "100Mi")), newContainer("burstable", getResourceList("1", "100Mi"), getResourceList("2", "100Mi")),
newContainer("guaranteed", getResourceList("100m", "100Mi"), getResourceList("100m", "100Mi")), newContainer("guaranteed", getResourceList("100m", "100Mi"), getResourceList("100m", "100Mi")),
...@@ -143,6 +149,13 @@ func TestGetPodQOS(t *testing.T) { ...@@ -143,6 +149,13 @@ func TestGetPodQOS(t *testing.T) {
expected: Burstable, 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{ pod: newPod("burstable-1", []api.Container{
newContainer("burstable", getResourceList("10m", "100Mi"), getResourceList("100m", "200Mi")), newContainer("burstable", getResourceList("10m", "100Mi"), getResourceList("100m", "200Mi")),
}), }),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment