@@ -264,58 +264,36 @@ func ApplyCaps(resources, caps *corev1.ResourceRequirements) *corev1.ResourceReq
264264 // Otherwise, keep existing request (it's already lower than or equal to caps)
265265 }
266266
267+ result = handleCapsEdgeCase (result , caps , corev1 .ResourceMemory )
268+ result = handleCapsEdgeCase (result , caps , corev1 .ResourceCPU )
269+
270+ return result
271+ }
272+
273+ func handleCapsEdgeCase (resources , caps * corev1.ResourceRequirements , resourceName corev1.ResourceName ) * corev1.ResourceRequirements {
274+ result := resources .DeepCopy ()
275+
267276 // Edge cases: after applying caps, we might create invalid resources (limit < request).
268277 // We need to adjust to ensure the result is still valid.
269- memLimit := result .Limits [corev1 .ResourceMemory ]
270- memRequest := result .Requests [corev1 .ResourceMemory ]
271- if ! memLimit .IsZero () && ! memRequest .IsZero () && memLimit .Cmp (memRequest ) < 0 {
272- capMemLimit := caps .Limits [corev1 .ResourceMemory ]
273- capMemRequest := caps .Requests [corev1 .ResourceMemory ]
274- switch {
275- case ! capMemLimit .IsZero () && capMemRequest .IsZero ():
276- // Only a memory limit cap was set, and it caused the limit to be lower than the request.
277- // Adjust the request down to match the capped limit.
278- if memLimit .Equal (capMemLimit ) {
279- result .Requests [corev1 .ResourceMemory ] = capMemLimit
280- } else {
281- // The invalid state (limit < request) existed in the original resources before caps were applied.
282- }
283- case capMemLimit .IsZero () && ! capMemRequest .IsZero ():
284- // Only a memory request cap was set, and it's higher than the existing limit.
285- // Adjust the limit up to match the capped request.
286- if memRequest .Equal (capMemRequest ) {
287- result .Limits [corev1 .ResourceMemory ] = capMemRequest
288- } else {
289- // The invalid state (limit < request) existed in the original resources before caps were applied.
290- break
291- }
292- default :
293- // Both limit and request caps were set (or neither was set), so the invalid state was present
294- // in the original resources.
295- break
296- }
297- }
298-
299- cpuLimit := result .Limits [corev1 .ResourceCPU ]
300- cpuRequest := result .Requests [corev1 .ResourceCPU ]
301- if ! cpuLimit .IsZero () && ! cpuRequest .IsZero () && cpuLimit .Cmp (cpuRequest ) < 0 {
302- capCPULimit := caps .Limits [corev1 .ResourceCPU ]
303- capCPURequest := caps .Requests [corev1 .ResourceCPU ]
278+ resLimit := resources .Limits [resourceName ]
279+ resRequest := resources .Requests [resourceName ]
280+ if ! resLimit .IsZero () && ! resRequest .IsZero () && resLimit .Cmp (resRequest ) < 0 {
281+ capResLimit := caps .Limits [resourceName ]
282+ capResRequest := caps .Requests [resourceName ]
304283 switch {
305- case ! capCPULimit .IsZero () && capCPURequest .IsZero ():
306- // Only a CPU limit cap was set, and it caused the limit to be lower than the request.
284+ case ! capResLimit .IsZero () && capResRequest .IsZero ():
285+ // Only a resource limit cap was set, and it caused the limit to be lower than the request.
307286 // Adjust the request down to match the capped limit.
308- if cpuLimit .Equal (capCPULimit ) {
309- result .Requests [corev1 . ResourceCPU ] = capCPULimit
287+ if resLimit .Equal (capResLimit ) {
288+ result .Requests [resourceName ] = capResLimit
310289 } else {
311290 // The invalid state (limit < request) existed in the original resources before caps were applied.
312- break
313291 }
314- case capCPULimit .IsZero () && ! capCPURequest .IsZero ():
315- // Only a CPU request cap was set, and it's higher than the existing limit.
292+ case capResLimit .IsZero () && ! capResRequest .IsZero ():
293+ // Only a resource request cap was set, and it's higher than the existing limit.
316294 // Adjust the limit up to match the capped request.
317- if cpuRequest .Equal (capCPURequest ) {
318- result .Limits [corev1 . ResourceCPU ] = capCPURequest
295+ if resRequest .Equal (capResRequest ) {
296+ result .Limits [resourceName ] = capResRequest
319297 } else {
320298 // The invalid state (limit < request) existed in the original resources before caps were applied.
321299 break
0 commit comments