Skip to content

Commit 339af4e

Browse files
authored
Merge pull request #840 from googs1025/fix_calculating_pod_requests
fix(util): fix the problem of pod overhead not being calculated
2 parents 66d66f4 + 49c8bf0 commit 339af4e

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

pkg/util/resource.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ func ResourceList(r *framework.Resource) v1.ResourceList {
4747
// - the sum of all app containers(spec.Containers) request for a resource.
4848
// - the effective init containers(spec.InitContainers) request for a resource.
4949
// The effective init containers request is the highest request on all init containers.
50+
// Additionally, if the Pod specifies overhead, it will also be included in the final calculation.
5051
func GetPodEffectiveRequest(pod *v1.Pod) v1.ResourceList {
5152
initResources := make(v1.ResourceList)
5253
resources := make(v1.ResourceList)
@@ -73,5 +74,12 @@ func GetPodEffectiveRequest(pod *v1.Pod) v1.ResourceList {
7374
}
7475
resources[name] = quantity
7576
}
77+
// Add pod overhead if present
78+
for name, quantity := range pod.Spec.Overhead {
79+
if q, ok := resources[name]; ok {
80+
quantity.Add(q)
81+
}
82+
resources[name] = quantity
83+
}
7684
return resources
7785
}

pkg/util/resource_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ func TestGetPodEffectiveRequest(t *testing.T) {
3636
name string
3737
containerRequest []v1.ResourceList
3838
initContainerRequest []v1.ResourceList
39+
podOverheadRequest v1.ResourceList
3940
want v1.ResourceList
4041
}{
4142
{
@@ -101,6 +102,27 @@ func TestGetPodEffectiveRequest(t *testing.T) {
101102
},
102103
want: makeResourceList(10, 4),
103104
},
105+
{
106+
name: "1 container with pod overhead",
107+
containerRequest: []v1.ResourceList{
108+
makeResourceList(1, 1),
109+
},
110+
initContainerRequest: nil,
111+
podOverheadRequest: makeResourceList(1, 1),
112+
want: makeResourceList(2, 2),
113+
},
114+
{
115+
name: "2 containers and 1 init container with pod overhead",
116+
containerRequest: []v1.ResourceList{
117+
makeResourceList(1, 1),
118+
makeResourceList(2, 3),
119+
},
120+
initContainerRequest: []v1.ResourceList{
121+
makeResourceList(1, 1),
122+
},
123+
podOverheadRequest: makeResourceList(1, 1),
124+
want: makeResourceList(4, 5),
125+
},
104126
}
105127
for _, tt := range tests {
106128
t.Run(tt.name, func(t *testing.T) {
@@ -119,6 +141,7 @@ func TestGetPodEffectiveRequest(t *testing.T) {
119141
},
120142
})
121143
}
144+
pod.Spec.Overhead = tt.podOverheadRequest
122145
if got := GetPodEffectiveRequest(pod); !reflect.DeepEqual(got, tt.want) {
123146
t.Errorf("GetPodEffectiveRequest() = %v, want %v", got, tt.want)
124147
}

0 commit comments

Comments
 (0)