Skip to content

Commit 376c3c3

Browse files
ZiMengShengwangjianyu.wjy
andauthored
scheduler: fix calFreeWithPreemptible modify nodeDevice (#2453)
Signed-off-by: wangjianyu.wjy <[email protected]> Co-authored-by: wangjianyu.wjy <[email protected]>
1 parent 35c6524 commit 376c3c3

File tree

2 files changed

+92
-2
lines changed

2 files changed

+92
-2
lines changed

pkg/scheduler/plugins/deviceshare/device_cache.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -349,15 +349,16 @@ func (n *nodeDevice) calcFreeWithPreemptible(deviceType schedulingv1alpha1.Devic
349349

350350
// If allocating from a required resources, e.g. a reservation, the free should be no larger than the reserved free.
351351
if len(requiredDeviceResources) > 0 {
352+
requiredDeviceFree := deviceResources{}
352353
for minor, v := range deviceFree {
353354
required, ok := requiredDeviceResources[minor]
354355
if !ok {
355-
delete(deviceFree, minor)
356356
continue
357357
}
358358
v = util.MinResourceList(v, required)
359-
deviceFree[minor] = v
359+
requiredDeviceFree[minor] = v
360360
}
361+
return requiredDeviceFree
361362
}
362363

363364
return deviceFree

pkg/scheduler/plugins/deviceshare/device_cache_test.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,92 @@ func Test_gcNodeDevices(t *testing.T) {
142142
nodeNames := sets.StringKeySet(cache.nodeDeviceInfos)
143143
assert.Equal(t, expectedNodeNames, nodeNames)
144144
}
145+
146+
func Test_nodeDevice_calcFreeWithPreemptible(t *testing.T) {
147+
tests := []struct {
148+
name string
149+
deviceFree map[schedulingv1alpha1.DeviceType]deviceResources
150+
requiredDeviceResources deviceResources
151+
wantFree deviceResources
152+
wantOriginalFree map[schedulingv1alpha1.DeviceType]deviceResources
153+
}{
154+
{
155+
name: "assure free not changed",
156+
deviceFree: map[schedulingv1alpha1.DeviceType]deviceResources{
157+
schedulingv1alpha1.GPU: {
158+
0: corev1.ResourceList{
159+
apiext.ResourceGPUMemory: resource.MustParse("8Gi"),
160+
},
161+
1: corev1.ResourceList{
162+
apiext.ResourceGPUMemory: resource.MustParse("8Gi"),
163+
},
164+
2: corev1.ResourceList{
165+
apiext.ResourceGPUMemory: resource.MustParse("8Gi"),
166+
},
167+
3: corev1.ResourceList{
168+
apiext.ResourceGPUMemory: resource.MustParse("8Gi"),
169+
},
170+
4: corev1.ResourceList{
171+
apiext.ResourceGPUMemory: resource.MustParse("8Gi"),
172+
},
173+
5: corev1.ResourceList{
174+
apiext.ResourceGPUMemory: resource.MustParse("8Gi"),
175+
},
176+
6: corev1.ResourceList{
177+
apiext.ResourceGPUMemory: resource.MustParse("8Gi"),
178+
},
179+
7: corev1.ResourceList{
180+
apiext.ResourceGPUMemory: resource.MustParse("8Gi"),
181+
},
182+
},
183+
},
184+
requiredDeviceResources: deviceResources{
185+
0: corev1.ResourceList{
186+
apiext.ResourceGPUMemory: resource.MustParse("8Gi"),
187+
},
188+
},
189+
wantFree: deviceResources{
190+
0: corev1.ResourceList{
191+
apiext.ResourceGPUMemory: resource.MustParse("8Gi"),
192+
},
193+
},
194+
wantOriginalFree: map[schedulingv1alpha1.DeviceType]deviceResources{
195+
schedulingv1alpha1.GPU: {
196+
0: corev1.ResourceList{
197+
apiext.ResourceGPUMemory: resource.MustParse("8Gi"),
198+
},
199+
1: corev1.ResourceList{
200+
apiext.ResourceGPUMemory: resource.MustParse("8Gi"),
201+
},
202+
2: corev1.ResourceList{
203+
apiext.ResourceGPUMemory: resource.MustParse("8Gi"),
204+
},
205+
3: corev1.ResourceList{
206+
apiext.ResourceGPUMemory: resource.MustParse("8Gi"),
207+
},
208+
4: corev1.ResourceList{
209+
apiext.ResourceGPUMemory: resource.MustParse("8Gi"),
210+
},
211+
5: corev1.ResourceList{
212+
apiext.ResourceGPUMemory: resource.MustParse("8Gi"),
213+
},
214+
6: corev1.ResourceList{
215+
apiext.ResourceGPUMemory: resource.MustParse("8Gi"),
216+
},
217+
7: corev1.ResourceList{
218+
apiext.ResourceGPUMemory: resource.MustParse("8Gi"),
219+
},
220+
},
221+
},
222+
},
223+
}
224+
for _, tt := range tests {
225+
t.Run(tt.name, func(t *testing.T) {
226+
n := &nodeDevice{
227+
deviceFree: tt.deviceFree,
228+
}
229+
assert.Equal(t, tt.wantFree, n.calcFreeWithPreemptible(schedulingv1alpha1.GPU, nil, tt.requiredDeviceResources))
230+
assert.Equal(t, tt.wantOriginalFree, n.deviceFree)
231+
})
232+
}
233+
}

0 commit comments

Comments
 (0)