diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2022-08-26 15:38:59 +0000 |
|---|---|---|
| committer | Aleksandr Nogikh <wp32pw@gmail.com> | 2022-08-26 17:57:04 +0200 |
| commit | 071779164d7640bc97cdb04864e59dbb91db6469 (patch) | |
| tree | 00809cfbf3c01b3494d818b79027957b9d315d48 | |
| parent | e5a303f118722e4c3ae80408a56a11372071c578 (diff) | |
dashboard: rewrite job sorting
We need to also swap the array of keys, otherwise it gets messy.
| -rw-r--r-- | dashboard/app/jobs.go | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/dashboard/app/jobs.go b/dashboard/app/jobs.go index 2a2a241f0..08f7ff4b4 100644 --- a/dashboard/app/jobs.go +++ b/dashboard/app/jobs.go @@ -978,6 +978,21 @@ func jobReported(c context.Context, jobID string) error { return db.RunInTransaction(c, tx, nil) } +type jobSorter struct { + jobs []*Job + keys []*db.Key +} + +func (sorter *jobSorter) Len() int { return len(sorter.jobs) } +func (sorter *jobSorter) Less(i, j int) bool { + // Give priority to user-initiated jobs to reduce the perceived processing time. + return sorter.jobs[i].User != "" && sorter.jobs[j].User == "" +} +func (sorter *jobSorter) Swap(i, j int) { + sorter.jobs[i], sorter.jobs[j] = sorter.jobs[j], sorter.jobs[i] + sorter.keys[i], sorter.keys[j] = sorter.keys[j], sorter.keys[i] +} + func loadPendingJob(c context.Context, managers map[string]dashapi.ManagerJobs) (*Job, *db.Key, error) { var jobs []*Job keys, err := db.NewQuery("Job"). @@ -988,10 +1003,7 @@ func loadPendingJob(c context.Context, managers map[string]dashapi.ManagerJobs) if err != nil { return nil, nil, fmt.Errorf("failed to query jobs: %v", err) } - // Give priority to user-initiated jobs to reduce the perceived processing time. - sort.SliceStable(jobs, func(i, j int) bool { - return jobs[i].User != "" && jobs[j].User == "" - }) + sort.Stable(&jobSorter{jobs: jobs, keys: keys}) for i, job := range jobs { switch job.Type { case JobTestPatch: |
