Skip to content

Commit 58385f1

Browse files
improve scheduler getFullResult (#324)
* improve cpu scheduler: use remainder to getFullRes * transform recursive into for loop
1 parent 6aab298 commit 58385f1

File tree

2 files changed

+41
-14
lines changed

2 files changed

+41
-14
lines changed

scheduler/complex/cpu_test.go

+25
Original file line numberDiff line numberDiff line change
@@ -235,3 +235,28 @@ func TestCPUReallocWithPriorPlan(t *testing.T) {
235235
_, _, _, err = po.ReselectCPUNodes(scheduleInfo, CPU, 2, 0)
236236
assert.EqualError(t, err, "not enough resource")
237237
}
238+
239+
func TestGetFullResult(t *testing.T) {
240+
h := host{share: 100}
241+
res := h.getFullResult(2, []resourceInfo{
242+
{
243+
id: "0",
244+
pieces: 400,
245+
},
246+
{
247+
id: "1",
248+
pieces: 200,
249+
},
250+
{
251+
id: "2",
252+
pieces: 400,
253+
},
254+
})
255+
assert.EqualValues(t, 4, len(res))
256+
assert.ElementsMatch(t, res, []types.ResourceMap{
257+
{"0": 100, "1": 100},
258+
{"0": 100, "1": 100},
259+
{"0": 100, "2": 100},
260+
{"0": 100, "2": 100},
261+
})
262+
}

scheduler/complex/resource.go

+16-14
Original file line numberDiff line numberDiff line change
@@ -183,24 +183,26 @@ func (h *host) getFragmentsResult(resources []resourceInfo, fragments ...int64)
183183

184184
func (h *host) getFullResult(full int, resources []resourceInfo) []types.ResourceMap {
185185
result := []types.ResourceMap{}
186-
count := len(resources) / full
187-
newResources := []resourceInfo{}
188-
for i := 0; i < count; i++ {
189-
plan := types.ResourceMap{}
190-
for j := i * full; j < i*full+full; j++ {
191-
// 洗掉没配额的
192-
last := resources[j].pieces - int64(h.share)
193-
if last > 0 {
194-
newResources = append(newResources, resourceInfo{resources[j].id, last})
186+
187+
for len(resources)/full > 0 {
188+
count, rem := len(resources)/full, len(resources)%full
189+
newResources := []resourceInfo{}
190+
for i := 0; i < count; i++ {
191+
plan := types.ResourceMap{}
192+
for j := i * full; j < i*full+full; j++ {
193+
// 洗掉没配额的
194+
last := resources[j].pieces - int64(h.share)
195+
if last > 0 {
196+
newResources = append(newResources, resourceInfo{resources[j].id, last})
197+
}
198+
plan[resources[j].id] = int64(h.share)
195199
}
196-
plan[resources[j].id] = int64(h.share)
200+
result = append(result, plan)
197201
}
198-
result = append(result, plan)
199-
}
200202

201-
if len(newResources)/full > 0 {
202-
return append(result, h.getFullResult(full, newResources)...)
203+
resources = append(newResources, resources[len(resources)-rem:]...)
203204
}
205+
204206
return result
205207
}
206208

0 commit comments

Comments
 (0)