@@ -218,7 +218,12 @@ func fitsRequest(nodeIndexer podutil.GetPodsAssignedToNodeFunc, pod *v1.Pod, nod
218
218
resourceNames = append (resourceNames , name )
219
219
}
220
220
221
- availableResources , err := nodeAvailableResources (nodeIndexer , node , resourceNames )
221
+ availableResources , err := nodeAvailableResources (nodeIndexer , node , resourceNames ,
222
+ func (pod * v1.Pod ) (v1.ResourceList , error ) {
223
+ req , _ := utils .PodRequestsAndLimits (pod )
224
+ return req , nil
225
+ },
226
+ )
222
227
if err != nil {
223
228
return false , err
224
229
}
@@ -239,12 +244,15 @@ func fitsRequest(nodeIndexer podutil.GetPodsAssignedToNodeFunc, pod *v1.Pod, nod
239
244
}
240
245
241
246
// nodeAvailableResources returns resources mapped to the quanitity available on the node.
242
- func nodeAvailableResources (nodeIndexer podutil.GetPodsAssignedToNodeFunc , node * v1.Node , resourceNames []v1.ResourceName ) (map [v1.ResourceName ]* resource.Quantity , error ) {
247
+ func nodeAvailableResources (nodeIndexer podutil.GetPodsAssignedToNodeFunc , node * v1.Node , resourceNames []v1.ResourceName , podUtilization podutil. PodUtilizationFnc ) (map [v1.ResourceName ]* resource.Quantity , error ) {
243
248
podsOnNode , err := podutil .ListPodsOnANode (node .Name , nodeIndexer , nil )
244
249
if err != nil {
245
250
return nil , err
246
251
}
247
- nodeUtilization := NodeUtilization (podsOnNode , resourceNames )
252
+ nodeUtilization , err := NodeUtilization (podsOnNode , resourceNames , podUtilization )
253
+ if err != nil {
254
+ return nil , err
255
+ }
248
256
remainingResources := map [v1.ResourceName ]* resource.Quantity {
249
257
v1 .ResourceCPU : resource .NewMilliQuantity (node .Status .Allocatable .Cpu ().MilliValue ()- nodeUtilization [v1 .ResourceCPU ].MilliValue (), resource .DecimalSI ),
250
258
v1 .ResourceMemory : resource .NewQuantity (node .Status .Allocatable .Memory ().Value ()- nodeUtilization [v1 .ResourceMemory ].Value (), resource .BinarySI ),
@@ -265,31 +273,34 @@ func nodeAvailableResources(nodeIndexer podutil.GetPodsAssignedToNodeFunc, node
265
273
}
266
274
267
275
// NodeUtilization returns the resources requested by the given pods. Only resources supplied in the resourceNames parameter are calculated.
268
- func NodeUtilization (pods []* v1.Pod , resourceNames []v1.ResourceName ) map [v1.ResourceName ]* resource.Quantity {
269
- totalReqs := map [v1.ResourceName ]* resource.Quantity {
276
+ func NodeUtilization (pods []* v1.Pod , resourceNames []v1.ResourceName , podUtilization podutil. PodUtilizationFnc ) ( map [v1.ResourceName ]* resource.Quantity , error ) {
277
+ totalUtilization := map [v1.ResourceName ]* resource.Quantity {
270
278
v1 .ResourceCPU : resource .NewMilliQuantity (0 , resource .DecimalSI ),
271
279
v1 .ResourceMemory : resource .NewQuantity (0 , resource .BinarySI ),
272
280
v1 .ResourcePods : resource .NewQuantity (int64 (len (pods )), resource .DecimalSI ),
273
281
}
274
282
for _ , name := range resourceNames {
275
283
if ! IsBasicResource (name ) {
276
- totalReqs [name ] = resource .NewQuantity (0 , resource .DecimalSI )
284
+ totalUtilization [name ] = resource .NewQuantity (0 , resource .DecimalSI )
277
285
}
278
286
}
279
287
280
288
for _ , pod := range pods {
281
- req , _ := utils .PodRequestsAndLimits (pod )
289
+ podUtil , err := podUtilization (pod )
290
+ if err != nil {
291
+ return nil , err
292
+ }
282
293
for _ , name := range resourceNames {
283
- quantity , ok := req [name ]
294
+ quantity , ok := podUtil [name ]
284
295
if ok && name != v1 .ResourcePods {
285
296
// As Quantity.Add says: Add adds the provided y quantity to the current value. If the current value is zero,
286
297
// the format of the quantity will be updated to the format of y.
287
- totalReqs [name ].Add (quantity )
298
+ totalUtilization [name ].Add (quantity )
288
299
}
289
300
}
290
301
}
291
302
292
- return totalReqs
303
+ return totalUtilization , nil
293
304
}
294
305
295
306
// IsBasicResource checks if resource is basic native.
0 commit comments