use original requests in NodeResourcesBalancedAllocation instead of NonZero (#105845)

This commit is contained in:
Ahmad Diaa
2021-10-30 03:04:14 +01:00
committed by GitHub
parent 324eff5b75
commit a2c37bfd09
5 changed files with 70 additions and 36 deletions

View File

@@ -40,26 +40,27 @@ const (
// GetNonzeroRequests returns the default cpu and memory resource request if none is found or
// what is provided on the request.
func GetNonzeroRequests(requests *v1.ResourceList) (int64, int64) {
return GetNonzeroRequestForResource(v1.ResourceCPU, requests),
GetNonzeroRequestForResource(v1.ResourceMemory, requests)
return GetRequestForResource(v1.ResourceCPU, requests, true),
GetRequestForResource(v1.ResourceMemory, requests, true)
}
// GetNonzeroRequestForResource returns the default resource request if none is found or
// what is provided on the request.
func GetNonzeroRequestForResource(resource v1.ResourceName, requests *v1.ResourceList) int64 {
// GetRequestForResource returns the requested values unless nonZero is true and there is no defined request
// for CPU and memory.
// If nonZero is true and the resource has no defined request for CPU or memory, it returns a default value.
func GetRequestForResource(resource v1.ResourceName, requests *v1.ResourceList, nonZero bool) int64 {
if requests == nil {
return 0
}
switch resource {
case v1.ResourceCPU:
// Override if un-set, but not if explicitly set to zero
if _, found := (*requests)[v1.ResourceCPU]; !found {
if _, found := (*requests)[v1.ResourceCPU]; !found && nonZero {
return DefaultMilliCPURequest
}
return requests.Cpu().MilliValue()
case v1.ResourceMemory:
// Override if un-set, but not if explicitly set to zero
if _, found := (*requests)[v1.ResourceMemory]; !found {
if _, found := (*requests)[v1.ResourceMemory]; !found && nonZero {
return DefaultMemoryRequest
}
return requests.Memory().Value()

View File

@@ -21,7 +21,7 @@ import (
"github.com/stretchr/testify/assert"
"k8s.io/api/core/v1"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
)
@@ -74,18 +74,20 @@ func TestGetNonZeroRequest(t *testing.T) {
}
}
func TestGetLeastRequestResource(t *testing.T) {
func TestGetRequestForResource(t *testing.T) {
tests := []struct {
name string
requests v1.ResourceList
resource v1.ResourceName
expectedQuantity int64
nonZero bool
}{
{
"extended_resource_not_found",
v1.ResourceList{},
v1.ResourceName("intel.com/foo"),
0,
true,
},
{
"extended_resource_found",
@@ -94,18 +96,21 @@ func TestGetLeastRequestResource(t *testing.T) {
},
v1.ResourceName("intel.com/foo"),
4,
true,
},
{
"cpu_not_found",
v1.ResourceList{},
v1.ResourceCPU,
DefaultMilliCPURequest,
true,
},
{
"memory_not_found",
v1.ResourceList{},
v1.ResourceMemory,
DefaultMemoryRequest,
true,
},
{
"cpu_exist",
@@ -114,6 +119,7 @@ func TestGetLeastRequestResource(t *testing.T) {
},
v1.ResourceCPU,
200,
true,
},
{
"memory_exist",
@@ -122,6 +128,7 @@ func TestGetLeastRequestResource(t *testing.T) {
},
v1.ResourceMemory,
400 * 1024 * 1024,
true,
},
{
"ephemeralStorage_exist",
@@ -130,18 +137,34 @@ func TestGetLeastRequestResource(t *testing.T) {
},
v1.ResourceEphemeralStorage,
400 * 1024 * 1024,
true,
},
{
"ephemeralStorage_not_found",
v1.ResourceList{},
v1.ResourceEphemeralStorage,
0,
true,
},
{
"cpu_not_found, useRequested is true",
v1.ResourceList{},
v1.ResourceCPU,
0,
false,
},
{
"memory_not_found, useRequested is true",
v1.ResourceList{},
v1.ResourceMemory,
0,
false,
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
realQuantity := GetNonzeroRequestForResource(test.resource, &test.requests)
realQuantity := GetRequestForResource(test.resource, &test.requests, test.nonZero)
assert.EqualValuesf(t, test.expectedQuantity, realQuantity, "Failed to test: %s", test.name)
})
}