From b954733a89b88aa0676e763f22e5019551433bae Mon Sep 17 00:00:00 2001 From: Newnius Date: Fri, 12 Jul 2019 15:35:05 +0800 Subject: [PATCH] update schedule list sort --- src/scheduler_FCFS.go | 21 ++++++++++++++------- src/scheduler_priority.go | 30 +++++++++++++++++------------- src/util.go | 2 +- 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/scheduler_FCFS.go b/src/scheduler_FCFS.go index 2423c50..304fd80 100644 --- a/src/scheduler_FCFS.go +++ b/src/scheduler_FCFS.go @@ -33,11 +33,8 @@ func (scheduler *SchedulerFCFS) Start() { jm.scheduler = scheduler scheduler.jobs[jm.job.Name] = &jm - for i := range scheduler.history { - if scheduler.history[i].Name == jm.job.Name { - scheduler.history[i].Status = Starting - } - } + jm.job.Status = Starting + scheduler.history = append(scheduler.history, &jm.job) go func() { jm.start() @@ -83,7 +80,6 @@ func (scheduler *SchedulerFCFS) Schedule(job Job) { defer scheduler.mu.Unlock() scheduler.queue = append(scheduler.queue, job) - scheduler.history = append(scheduler.history, &job) job.Status = Created } @@ -156,7 +152,12 @@ func (scheduler *SchedulerFCFS) QueryLogs(jobName string, taskName string) MsgLo } func (scheduler *SchedulerFCFS) ListJobs() MsgJobList { - return MsgJobList{Code: 0, Jobs: scheduler.history} + var tmp []Job + for _, job := range scheduler.history { + tmp = append(tmp, *job) + } + tmp = append(tmp, scheduler.queue...) + return MsgJobList{Code: 0, Jobs: tmp} } func (scheduler *SchedulerFCFS) Summary() MsgSummary { @@ -167,7 +168,13 @@ func (scheduler *SchedulerFCFS) Summary() MsgSummary { runningJobsCounter := 0 pendingJobsCounter := 0 + var tmp []Job for _, job := range scheduler.history { + tmp = append(tmp, *job) + } + tmp = append(tmp, scheduler.queue...) + + for _, job := range tmp { switch job.Status { case Created: pendingJobsCounter++ diff --git a/src/scheduler_priority.go b/src/scheduler_priority.go index 91405a8..8e1919c 100644 --- a/src/scheduler_priority.go +++ b/src/scheduler_priority.go @@ -4,7 +4,6 @@ import ( "sync" "time" log "github.com/sirupsen/logrus" - "fmt" ) type SchedulerPriority struct { @@ -34,11 +33,8 @@ func (scheduler *SchedulerPriority) Start() { jm.scheduler = scheduler scheduler.jobs[jm.job.Name] = &jm - for i := range scheduler.history { - if scheduler.history[i].Name == jm.job.Name { - scheduler.history[i].Status = Starting - } - } + jm.job.Status = Starting + scheduler.history = append(scheduler.history, &jm.job) go func() { jm.start() @@ -89,28 +85,25 @@ func (scheduler *SchedulerPriority) Schedule(job Job) { right := len(scheduler.queue) - 1 for ; left <= right; { mid := (left + right) / 2 - if scheduler.queue[left].Priority > job.Priority { + if scheduler.queue[left].Priority < job.Priority { index = left break } - if scheduler.queue[right].Priority <= job.Priority { + if scheduler.queue[right].Priority >= job.Priority { index = right + 1 break } - if scheduler.queue[mid].Priority <= job.Priority { + if scheduler.queue[mid].Priority >= job.Priority { left = mid + 1 } else { right = mid - 1 } } - fmt.Println(index) scheduler.queue = append(scheduler.queue, Job{}) copy(scheduler.queue[index+1:], scheduler.queue[index:]) scheduler.queue[index] = job - fmt.Println(scheduler.queue) - scheduler.history = append(scheduler.history, &job) job.Status = Created } @@ -183,7 +176,12 @@ func (scheduler *SchedulerPriority) QueryLogs(jobName string, taskName string) M } func (scheduler *SchedulerPriority) ListJobs() MsgJobList { - return MsgJobList{Code: 0, Jobs: scheduler.history} + var tmp []Job + for _, job := range scheduler.history { + tmp = append(tmp, *job) + } + tmp = append(tmp, scheduler.queue...) + return MsgJobList{Code: 0, Jobs: tmp} } func (scheduler *SchedulerPriority) Summary() MsgSummary { @@ -194,7 +192,13 @@ func (scheduler *SchedulerPriority) Summary() MsgSummary { runningJobsCounter := 0 pendingJobsCounter := 0 + var tmp []Job for _, job := range scheduler.history { + tmp = append(tmp, *job) + } + tmp = append(tmp, scheduler.queue...) + + for _, job := range tmp { switch job.Status { case Created: pendingJobsCounter++ diff --git a/src/util.go b/src/util.go index c2cf6b7..7bf82b5 100644 --- a/src/util.go +++ b/src/util.go @@ -43,7 +43,7 @@ type MsgResource struct { type MsgJobList struct { Code int `json:"code"` Error string `json:"error"` - Jobs []*Job `json:"jobs"` + Jobs []Job `json:"jobs"` } type MsgLog struct {