mirror of
https://github.com/newnius/YAO-scheduler.git
synced 2025-12-13 07:46:43 +00:00
update fair
This commit is contained in:
@@ -70,7 +70,8 @@ func (scheduler *SchedulerPriority) Start() {
|
|||||||
} else {
|
} else {
|
||||||
/* start preempt */
|
/* start preempt */
|
||||||
var jobs []Job
|
var jobs []Job
|
||||||
lowest := scheduler.queue[0].Priority
|
preemptee := scheduler.queue[0]
|
||||||
|
lowest := preemptee.Priority - 1
|
||||||
scheduler.historyMu.Lock()
|
scheduler.historyMu.Lock()
|
||||||
for _, job := range scheduler.history {
|
for _, job := range scheduler.history {
|
||||||
if job.Priority < lowest {
|
if job.Priority < lowest {
|
||||||
@@ -80,16 +81,41 @@ func (scheduler *SchedulerPriority) Start() {
|
|||||||
jobs = append(jobs, *job)
|
jobs = append(jobs, *job)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
scheduler.historyMu.Unlock()
|
|
||||||
sort.Sort(JobSorter(jobs))
|
sort.Sort(JobSorter(jobs))
|
||||||
if len(jobs) > 0 {
|
if len(jobs) > 0 {
|
||||||
job := jobs[0]
|
preempted := jobs[0]
|
||||||
log.Info("Start preempt ", job.Name)
|
log.Info("Start preempt ", preempted.Name)
|
||||||
scheduler.Stop(job.Name)
|
scheduler.Stop(preempted.Name)
|
||||||
scheduler.Schedule(job)
|
|
||||||
|
|
||||||
/* Remove from history */
|
/* Remove from history */
|
||||||
|
idx := -1
|
||||||
|
for i, job := range scheduler.history {
|
||||||
|
if job.Name == preempted.Name {
|
||||||
|
idx = i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if idx != -1 {
|
||||||
|
copy(scheduler.history[idx:], scheduler.history[idx+1:])
|
||||||
|
scheduler.history = scheduler.history[:len(scheduler.history)-1]
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add back */
|
||||||
|
idx = len(scheduler.queue)
|
||||||
|
for i, job := range scheduler.queue {
|
||||||
|
if job.Priority > preempted.Priority {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
idx = i
|
||||||
|
break
|
||||||
|
}
|
||||||
|
scheduler.queue = append(scheduler.queue, Job{})
|
||||||
|
|
||||||
|
copy(scheduler.queue[idx+1:], scheduler.queue[idx:])
|
||||||
|
scheduler.queue[idx] = preempted
|
||||||
|
|
||||||
|
preempted.Status = Created
|
||||||
}
|
}
|
||||||
|
scheduler.historyMu.Unlock()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
scheduler.queueMu.Unlock()
|
scheduler.queueMu.Unlock()
|
||||||
|
|||||||
Reference in New Issue
Block a user