Skip to content

Commit dca26b2

Browse files
committed
fixup
Signed-off-by: Anatolii Bazko <[email protected]>
1 parent 5155e99 commit dca26b2

File tree

2 files changed

+47
-62
lines changed

2 files changed

+47
-62
lines changed

pkg/library/resources/helper.go

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -273,19 +273,26 @@ func ApplyCaps(resources, caps *corev1.ResourceRequirements) *corev1.ResourceReq
273273
capMemRequest := caps.Requests[corev1.ResourceMemory]
274274
switch {
275275
case !capMemLimit.IsZero() && capMemRequest.IsZero():
276-
// Cap limit caused the issue, adjust request down to match limit
277-
result.Requests[corev1.ResourceMemory] = capMemLimit
278-
case capMemLimit.IsZero() && !capMemRequest.IsZero():
279-
// Cap request as maximum shouldn't cause limit < request, but adjust request down to match limit
280-
result.Requests[corev1.ResourceMemory] = memLimit
281-
default:
282-
// Both caps or neither caps - use caps limit for both to ensure validity
283-
if !capMemLimit.IsZero() {
284-
result.Limits[corev1.ResourceMemory] = capMemLimit
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) {
285279
result.Requests[corev1.ResourceMemory] = capMemLimit
286280
} else {
287-
result.Requests[corev1.ResourceMemory] = memLimit
281+
// The invalid state (limit < request) existed in the original resources before caps were applied.
288282
}
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
289296
}
290297
}
291298

@@ -296,19 +303,27 @@ func ApplyCaps(resources, caps *corev1.ResourceRequirements) *corev1.ResourceReq
296303
capCPURequest := caps.Requests[corev1.ResourceCPU]
297304
switch {
298305
case !capCPULimit.IsZero() && capCPURequest.IsZero():
299-
// Cap limit caused the issue, adjust request down to match limit
300-
result.Requests[corev1.ResourceCPU] = capCPULimit
301-
case capCPULimit.IsZero() && !capCPURequest.IsZero():
302-
// Cap request as maximum shouldn't cause limit < request, but adjust request down to match limit
303-
result.Requests[corev1.ResourceCPU] = cpuLimit
304-
default:
305-
// Both caps or neither caps - use caps limit for both to ensure validity
306-
if !capCPULimit.IsZero() {
307-
result.Limits[corev1.ResourceCPU] = capCPULimit
306+
// Only a CPU limit cap was set, and it caused the limit to be lower than the request.
307+
// Adjust the request down to match the capped limit.
308+
if cpuLimit.Equal(capCPULimit) {
308309
result.Requests[corev1.ResourceCPU] = capCPULimit
309310
} else {
310-
result.Requests[corev1.ResourceCPU] = cpuLimit
311+
// The invalid state (limit < request) existed in the original resources before caps were applied.
312+
break
311313
}
314+
case capCPULimit.IsZero() && !capCPURequest.IsZero():
315+
// Only a CPU request cap was set, and it's higher than the existing limit.
316+
// Adjust the limit up to match the capped request.
317+
if cpuRequest.Equal(capCPURequest) {
318+
result.Limits[corev1.ResourceCPU] = capCPURequest
319+
} else {
320+
// The invalid state (limit < request) existed in the original resources before caps were applied.
321+
break
322+
}
323+
default:
324+
// Both limit and request caps were set (or neither was set), so the invalid state was present
325+
// in the original resources.
326+
break
312327
}
313328
}
314329

pkg/library/resources/helper_test.go

Lines changed: 12 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -318,10 +318,10 @@ func TestApplyCaps(t *testing.T) {
318318
expected: getResourceRequirements("2000Mi", "200Mi", "2000m", "200m"),
319319
},
320320
{
321-
name: "Caps maximum limits and maximum requests",
322-
base: getResourceRequirements("3000Mi", "50Mi", "3000m", "50m"),
321+
name: "Applies all caps values",
322+
base: getResourceRequirements("3000Mi", "500Mi", "3000m", "500m"),
323323
caps: getResourceRequirements("2000Mi", "200Mi", "2000m", "200m"),
324-
expected: getResourceRequirements("2000Mi", "50Mi", "2000m", "50m"),
324+
expected: getResourceRequirements("2000Mi", "200Mi", "2000m", "200m"),
325325
},
326326
{
327327
name: "Keeps existing values when within caps bounds",
@@ -332,7 +332,7 @@ func TestApplyCaps(t *testing.T) {
332332
{
333333
name: "Does not apply empty caps fields",
334334
base: getResourceRequirements("1000Mi", "100Mi", "1000m", "100m"),
335-
caps: getResourceRequirements("2000Mi", "", "2000m", ""),
335+
caps: getResourceRequirements("", "", "", ""),
336336
expected: getResourceRequirements("1000Mi", "100Mi", "1000m", "100m"),
337337
},
338338
{
@@ -348,46 +348,16 @@ func TestApplyCaps(t *testing.T) {
348348
expected: getResourceRequirements("1000Mi", "100Mi", "1000m", "100m"),
349349
},
350350
{
351-
name: "Caps maximum limit (existing higher than caps)",
352-
base: getResourceRequirements("5000Mi", "100Mi", "5000m", "100m"),
353-
caps: getResourceRequirements("2000Mi", "", "2000m", ""),
354-
expected: getResourceRequirements("2000Mi", "100Mi", "2000m", "100m"),
355-
},
356-
{
357-
name: "Caps maximum request (existing higher than caps)",
358-
base: getResourceRequirements("5000Mi", "500Mi", "5000m", "500m"),
359-
caps: getResourceRequirements("", "200Mi", "", "200m"),
360-
expected: getResourceRequirements("5000Mi", "200Mi", "5000m", "200m"),
361-
},
362-
{
363-
name: "Adjusts memory request when caps limit creates conflict",
364-
base: getResourceRequirements("", "1000Mi", "", ""),
365-
caps: getResourceRequirements("500Mi", "", "", ""),
366-
expected: getResourceRequirements("500Mi", "500Mi", "", ""),
367-
},
368-
{
369-
name: "Adjusts memory request when caps request creates conflict",
370-
base: getResourceRequirements("100Mi", "200Mi", "", ""),
371-
caps: getResourceRequirements("", "500Mi", "", ""),
372-
expected: getResourceRequirements("100Mi", "100Mi", "", ""),
373-
},
374-
{
375-
name: "Adjusts CPU request when caps limit creates conflict",
376-
base: getResourceRequirements("", "", "", "1000m"),
377-
caps: getResourceRequirements("", "", "500m", ""),
378-
expected: getResourceRequirements("", "", "500m", "500m"),
379-
},
380-
{
381-
name: "Adjusts CPU request when caps request creates conflict",
382-
base: getResourceRequirements("", "", "100m", "200m"),
383-
caps: getResourceRequirements("", "", "", "500m"),
384-
expected: getResourceRequirements("", "", "100m", "100m"),
351+
name: "Adjusts request when caps limit creates conflict",
352+
base: getResourceRequirements("2000Mi", "1000Mi", "", "1000m"),
353+
caps: getResourceRequirements("500Mi", "", "500m", ""),
354+
expected: getResourceRequirements("500Mi", "500Mi", "500m", "500m"),
385355
},
386356
{
387-
name: "Handles conflicting caps values (both limit and request capped, request > limit)",
388-
base: getResourceRequirements("100Mi", "1000Mi", "100m", "1000m"),
389-
caps: getResourceRequirements("500Mi", "1000Mi", "500m", "1000m"),
390-
expected: getResourceRequirements("500Mi", "500Mi", "500m", "500m"),
357+
name: "Adjusts limit when caps request creates conflict",
358+
base: getResourceRequirements("500Mi", "", "500m", ""),
359+
caps: getResourceRequirements("", "1000Mi", "", "1000m"),
360+
expected: getResourceRequirements("1000Mi", "1000Mi", "1000m", "1000m"),
391361
},
392362
}
393363
for _, tt := range tests {

0 commit comments

Comments
 (0)