CA: fix a nil map write in NodeInfo.AddPod()
If the NodeInfo is created via WrapSchedulerNodeInfo with nil podExtraInfos, subsequent AddPod() calls panic on trying to add extra info for the pod.
This commit is contained in:
parent
756db6aa66
commit
410bd7cea5
|
@ -131,6 +131,9 @@ func NewNodeInfo(node *apiv1.Node, slices []*resourceapi.ResourceSlice, pods ...
|
|||
|
||||
// WrapSchedulerNodeInfo wraps a *schedulerframework.NodeInfo into an internal *NodeInfo.
|
||||
func WrapSchedulerNodeInfo(schedNodeInfo *schedulerframework.NodeInfo, slices []*resourceapi.ResourceSlice, podExtraInfos map[types.UID]PodExtraInfo) *NodeInfo {
|
||||
if podExtraInfos == nil {
|
||||
podExtraInfos = map[types.UID]PodExtraInfo{}
|
||||
}
|
||||
return &NodeInfo{
|
||||
schedNodeInfo: schedNodeInfo,
|
||||
podsExtraInfo: podExtraInfos,
|
||||
|
|
|
@ -43,6 +43,7 @@ func TestNodeInfo(t *testing.T) {
|
|||
test.BuildTestPod("regular-pod-1", 100, 16),
|
||||
test.BuildTestPod("regular-pod-2", 100, 16),
|
||||
}
|
||||
extraPod := test.BuildTestPod("extra-pod", 1, 1)
|
||||
schedulerNodeInfo := newSchedNodeInfo(node, pods)
|
||||
slices := []*resourceapi.ResourceSlice{
|
||||
{
|
||||
|
@ -169,9 +170,29 @@ func TestNodeInfo(t *testing.T) {
|
|||
wantLocalResourceSlices: slices,
|
||||
wantPods: testPodInfos([]*apiv1.Pod{pods[1], pods[3], pods[5]}, true),
|
||||
},
|
||||
{
|
||||
testName: "wrapping via WrapSchedulerNodeInfo and adding more pods",
|
||||
modFn: func(info *schedulerframework.NodeInfo) *NodeInfo {
|
||||
result := WrapSchedulerNodeInfo(info, nil, nil)
|
||||
result.AddPod(testPodInfos([]*apiv1.Pod{extraPod}, false)[0])
|
||||
return result
|
||||
},
|
||||
wantSchedNodeInfo: newSchedNodeInfo(node, append(pods, extraPod)),
|
||||
wantPods: testPodInfos(append(pods, extraPod), false),
|
||||
},
|
||||
{
|
||||
testName: "wrapping via WrapSchedulerNodeInfo and adding more pods using DRA",
|
||||
modFn: func(info *schedulerframework.NodeInfo) *NodeInfo {
|
||||
result := WrapSchedulerNodeInfo(info, nil, nil)
|
||||
result.AddPod(testPodInfos([]*apiv1.Pod{extraPod}, true)[0])
|
||||
return result
|
||||
},
|
||||
wantSchedNodeInfo: newSchedNodeInfo(node, append(pods, extraPod)),
|
||||
wantPods: append(testPodInfos(pods, false), testPodInfos([]*apiv1.Pod{extraPod}, true)...),
|
||||
},
|
||||
} {
|
||||
t.Run(tc.testName, func(t *testing.T) {
|
||||
wrappedNodeInfo := tc.modFn(schedulerNodeInfo)
|
||||
wrappedNodeInfo := tc.modFn(schedulerNodeInfo.Snapshot())
|
||||
|
||||
// Assert that the scheduler NodeInfo object is as expected.
|
||||
nodeInfoCmpOpts := []cmp.Option{
|
||||
|
|
Loading…
Reference in New Issue