Merge pull request #77845 from draveness/bugfix/resource-allocation-priority

fix: verify metadata is non-nil in resource allocation
This commit is contained in:
Kubernetes Prow Robot 2019-05-18 23:11:12 -07:00 committed by GitHub
commit 89031553ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 38 additions and 19 deletions

View File

@ -402,19 +402,34 @@ func TestBalancedResourceAllocation(t *testing.T) {
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
nodeNameToInfo := schedulernodeinfo.CreateNodeNameToInfoMap(test.pods, test.nodes)
if len(test.pod.Spec.Volumes) > 0 {
maxVolumes := 5
for _, info := range nodeNameToInfo {
info.TransientInfo.TransNodeInfo.AllocatableVolumesCount = getExistingVolumeCountForNode(info.Pods(), maxVolumes)
info.TransientInfo.TransNodeInfo.RequestedVolumes = len(test.pod.Spec.Volumes)
metadata := &priorityMetadata{
nonZeroRequest: getNonZeroRequests(test.pod),
}
for _, hasMeta := range []bool{true, false} {
if len(test.pod.Spec.Volumes) > 0 {
maxVolumes := 5
for _, info := range nodeNameToInfo {
info.TransientInfo.TransNodeInfo.AllocatableVolumesCount = getExistingVolumeCountForNode(info.Pods(), maxVolumes)
info.TransientInfo.TransNodeInfo.RequestedVolumes = len(test.pod.Spec.Volumes)
}
}
var function PriorityFunction
if hasMeta {
function = priorityFunction(BalancedResourceAllocationMap, nil, metadata)
} else {
function = priorityFunction(BalancedResourceAllocationMap, nil, nil)
}
list, err := function(test.pod, nodeNameToInfo, test.nodes)
if err != nil {
t.Errorf("unexpected error: %v", err)
}
if !reflect.DeepEqual(test.expectedList, list) {
t.Errorf("hasMeta %#v expected %#v, got %#v", hasMeta, test.expectedList, list)
}
}
list, err := priorityFunction(BalancedResourceAllocationMap, nil, nil)(test.pod, nodeNameToInfo, test.nodes)
if err != nil {
t.Errorf("unexpected error: %v", err)
}
if !reflect.DeepEqual(test.expectedList, list) {
t.Errorf("expected %#v, got %#v", test.expectedList, list)
}
})
}

View File

@ -43,7 +43,7 @@ func ResourceLimitsPriorityMap(pod *v1.Pod, meta interface{}, nodeInfo *schedule
// compute pod limits
var podLimits *schedulernodeinfo.Resource
if priorityMeta, ok := meta.(*priorityMetadata); ok && priorityMeta != nil {
if priorityMeta, ok := meta.(*priorityMetadata); ok {
// We were able to parse metadata, use podLimits from there.
podLimits = priorityMeta.podLimits
} else {

View File

@ -140,21 +140,25 @@ func TestResourceLimitsPriority(t *testing.T) {
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
nodeNameToInfo := schedulernodeinfo.CreateNodeNameToInfoMap(nil, test.nodes)
metadata := &priorityMetadata{
podLimits: getResourceLimits(test.pod),
}
for _, hasMeta := range []bool{true, false} {
var metadata *priorityMetadata
var function PriorityFunction
if hasMeta {
metadata = &priorityMetadata{
podLimits: getResourceLimits(test.pod),
}
function = priorityFunction(ResourceLimitsPriorityMap, nil, metadata)
} else {
function = priorityFunction(ResourceLimitsPriorityMap, nil, nil)
}
list, err := priorityFunction(ResourceLimitsPriorityMap, nil, metadata)(test.pod, nodeNameToInfo, test.nodes)
list, err := function(test.pod, nodeNameToInfo, test.nodes)
if err != nil {
t.Errorf("unexpected error: %v", err)
}
if !reflect.DeepEqual(test.expectedList, list) {
t.Errorf("expected %#v, got %#v", test.expectedList, list)
t.Errorf("hasMeta %#v expected %#v, got %#v", hasMeta, test.expectedList, list)
}
}
})