Skip to content

Commit 544ee21

Browse files
committed
Allow negative priorities
This allows both promoting and demoting of jobs
1 parent 017ae94 commit 544ee21

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

django_dbq/migrations/0003_auto_20180426_1024.py renamed to django_dbq/migrations/0003_auto_20180713_1000.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# -*- coding: utf-8 -*-
2-
# Generated by Django 1.11 on 2018-04-26 10:24
2+
# Generated by Django 1.11 on 2018-07-13 10:00
33
from __future__ import unicode_literals
44

55
from django.db import migrations, models
@@ -19,6 +19,6 @@ class Migration(migrations.Migration):
1919
migrations.AddField(
2020
model_name='job',
2121
name='priority',
22-
field=models.PositiveSmallIntegerField(db_index=True, default=0),
22+
field=models.SmallIntegerField(db_index=True, default=0),
2323
),
2424
]

django_dbq/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class Job(models.Model):
7171
next_task = models.CharField(max_length=100, blank=True)
7272
workspace = JSONField(null=True)
7373
queue_name = models.CharField(max_length=20, default='default', db_index=True)
74-
priority = models.PositiveSmallIntegerField(default=0, db_index=True)
74+
priority = models.SmallIntegerField(default=0, db_index=True)
7575

7676
class Meta:
7777
ordering = ['-priority', 'created']

django_dbq/tests.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,19 @@ def test_gets_jobs_in_priority_order(self):
113113
self.assertEqual(Job.objects.get_ready_or_none('default'), job_3)
114114
self.assertFalse(Job.objects.to_process('default').filter(id=job_2.id).exists())
115115

116+
def test_gets_jobs_in_negative_priority_order(self):
117+
job_1 = Job.objects.create(name='testjob')
118+
job_2 = Job.objects.create(name='testjob', state=Job.STATES.PROCESSING)
119+
job_3 = Job.objects.create(name='testjob', priority=-2)
120+
job_4 = Job.objects.create(name='testjob', priority=1)
121+
self.assertEqual({
122+
job for job in Job.objects.to_process('default')
123+
}, {
124+
job_4, job_3, job_1
125+
})
126+
self.assertEqual(Job.objects.get_ready_or_none('default'), job_4)
127+
self.assertFalse(Job.objects.to_process('default').filter(id=job_2.id).exists())
128+
116129
def test_gets_jobs_in_priority_and_date_order(self):
117130
job_1 = Job.objects.create(name='testjob', priority=3)
118131
job_2 = Job.objects.create(name='testjob', state=Job.STATES.PROCESSING, priority=3)

0 commit comments

Comments
 (0)