Merge pull request #7606 from towca/jtuznik/node-info-fix

CA: fix a nil map write in NodeInfo.AddPod()
This commit is contained in:
Kubernetes Prow Robot 2024-12-16 12:48:51 +01:00 committed by GitHub
commit c2972a8000
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 25 additions and 1 deletions

View File

@ -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,

View File

@ -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{