Skip to content

Commit 9d2d37b

Browse files
author
Eric Ernst
committed
resource: modify resource helpers for better reuse
Update GetResoureqRequest function to utilize a new helper, GetResourceRequestQuantity. This logic was duplicated in a couple of areas in the K/K codebase, so consolidating for better test coverage. Signed-off-by: Eric Ernst <[email protected]>
1 parent 5d5b6d7 commit 9d2d37b

File tree

1 file changed

+35
-20
lines changed

1 file changed

+35
-20
lines changed

pkg/api/v1/resource/helpers.go

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import (
2323

2424
"k8s.io/api/core/v1"
2525
"k8s.io/apimachinery/pkg/api/resource"
26+
utilfeature "k8s.io/apiserver/pkg/util/feature"
27+
"k8s.io/kubernetes/pkg/features"
2628
)
2729

2830
// addResourceList adds the resources in newList to list
@@ -68,34 +70,47 @@ func PodRequestsAndLimits(pod *v1.Pod) (reqs, limits v1.ResourceList) {
6870
return
6971
}
7072

71-
// GetResourceRequest finds and returns the request for a specific resource.
72-
func GetResourceRequest(pod *v1.Pod, resource v1.ResourceName) int64 {
73-
if resource == v1.ResourcePods {
74-
return 1
73+
// GetResourceRequestQuantity finds and returns the request quantity for a specific resource.
74+
func GetResourceRequestQuantity(pod *v1.Pod, resourceName v1.ResourceName) resource.Quantity {
75+
76+
requestQuantity := resource.Quantity{Format: resource.BinarySI}
77+
78+
if resourceName == v1.ResourceEphemeralStorage && !utilfeature.DefaultFeatureGate.Enabled(features.LocalStorageCapacityIsolation) {
79+
// if the local storage capacity isolation feature gate is disabled, pods request 0 disk
80+
return requestQuantity
7581
}
76-
totalResources := int64(0)
82+
7783
for _, container := range pod.Spec.Containers {
78-
if rQuantity, ok := container.Resources.Requests[resource]; ok {
79-
if resource == v1.ResourceCPU {
80-
totalResources += rQuantity.MilliValue()
81-
} else {
82-
totalResources += rQuantity.Value()
83-
}
84+
if rQuantity, ok := container.Resources.Requests[resourceName]; ok {
85+
requestQuantity.Add(rQuantity)
8486
}
8587
}
86-
// take max_resource(sum_pod, any_init_container)
88+
8789
for _, container := range pod.Spec.InitContainers {
88-
if rQuantity, ok := container.Resources.Requests[resource]; ok {
89-
if resource == v1.ResourceCPU {
90-
if rQuantity.MilliValue() > totalResources {
91-
totalResources = rQuantity.MilliValue()
92-
}
93-
} else if rQuantity.Value() > totalResources {
94-
totalResources = rQuantity.Value()
90+
if rQuantity, ok := container.Resources.Requests[resourceName]; ok {
91+
if requestQuantity.Cmp(rQuantity) < 0 {
92+
requestQuantity = rQuantity
9593
}
9694
}
9795
}
98-
return totalResources
96+
97+
return requestQuantity
98+
}
99+
100+
// GetResourceRequest finds and returns the request value for a specific resource.
101+
func GetResourceRequest(pod *v1.Pod, resource v1.ResourceName) int64 {
102+
if resource == v1.ResourcePods {
103+
return 1
104+
}
105+
106+
requestQuantity := GetResourceRequestQuantity(pod, resource)
107+
108+
if resource == v1.ResourceCPU {
109+
return requestQuantity.MilliValue()
110+
} else {
111+
return requestQuantity.Value()
112+
}
113+
99114
}
100115

101116
// ExtractResourceValueByContainerName extracts the value of a resource

0 commit comments

Comments
 (0)