aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2022-08-26 15:38:59 +0000
committerAleksandr Nogikh <wp32pw@gmail.com>2022-08-26 17:57:04 +0200
commit071779164d7640bc97cdb04864e59dbb91db6469 (patch)
tree00809cfbf3c01b3494d818b79027957b9d315d48
parente5a303f118722e4c3ae80408a56a11372071c578 (diff)
dashboard: rewrite job sorting
We need to also swap the array of keys, otherwise it gets messy.
-rw-r--r--dashboard/app/jobs.go20
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: