Skip to content

Commit 1f0ac45

Browse files
committed
Jobs now have a 'new' state
1 parent 7a28aba commit 1f0ac45

File tree

3 files changed

+19
-7
lines changed

3 files changed

+19
-7
lines changed

django_dbq/migrations/0001_initial.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def forwards(self, orm):
1414
('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, db_index=True, blank=True)),
1515
('modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
1616
('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
17-
('state', self.gf('django.db.models.fields.CharField')(default='READY', max_length=20, db_index=True)),
17+
('state', self.gf('django.db.models.fields.CharField')(default='NEW', max_length=20, db_index=True)),
1818
('next_task', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)),
1919
('workspace', self.gf('jsonfield.fields.JSONField')(null=True)),
2020
))
@@ -34,9 +34,9 @@ def backwards(self, orm):
3434
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
3535
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
3636
'next_task': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
37-
'state': ('django.db.models.fields.CharField', [], {'default': "'READY'", 'max_length': '20', 'db_index': 'True'}),
37+
'state': ('django.db.models.fields.CharField', [], {'default': "'NEW'", 'max_length': '20', 'db_index': 'True'}),
3838
'workspace': ('jsonfield.fields.JSONField', [], {'null': 'True'})
3939
}
4040
}
4141

42-
complete_apps = ['core']
42+
complete_apps = ['core']

django_dbq/models.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def get_ready_or_none(self, max_retries=3):
3131
retries_left = max_retries
3232
while True:
3333
try:
34-
return self.select_for_update().filter(state=Job.STATES.READY).first()
34+
return self.select_for_update().filter(state__in=(Job.STATES.READY, Job.STATES.NEW)).first()
3535
except Exception as e:
3636
if retries_left == 0:
3737
raise
@@ -41,13 +41,13 @@ def get_ready_or_none(self, max_retries=3):
4141

4242
class Job(models.Model):
4343

44-
STATES = Choices("READY", "PROCESSING", "FAILED", "COMPLETE")
44+
STATES = Choices("NEW", "READY", "PROCESSING", "FAILED", "COMPLETE")
4545

4646
id = uuidfield.UUIDField(primary_key=True, auto=True, db_index=True)
4747
created = models.DateTimeField(auto_now_add=True, db_index=True)
4848
modified = models.DateTimeField(auto_now=True)
4949
name = models.CharField(max_length=100)
50-
state = models.CharField(max_length=20, choices=STATES, default=STATES.READY, db_index=True)
50+
state = models.CharField(max_length=20, choices=STATES, default=STATES.NEW, db_index=True)
5151
next_task = models.CharField(max_length=100, blank=True)
5252
workspace = JSONField(null=True)
5353

django_dbq/tests.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class JobTestCase(TestCase):
5656

5757
def test_create_job(self):
5858
job = Job(name='testjob')
59-
self.assertEqual(job.state, Job.STATES.READY)
59+
self.assertEqual(job.state, Job.STATES.NEW)
6060

6161
def test_get_next_ready_job(self):
6262
self.assertTrue(Job.objects.get_ready_or_none() is None)
@@ -67,6 +67,18 @@ def test_get_next_ready_job(self):
6767

6868
self.assertEqual(Job.objects.get_ready_or_none(), expected)
6969

70+
def test_get_next_ready_job_created(self):
71+
"""
72+
Created jobs should be picked too
73+
"""
74+
self.assertTrue(Job.objects.get_ready_or_none() is None)
75+
76+
Job.objects.create(name='testjob', state=Job.STATES.NEW, created=datetime.now())
77+
Job.objects.create(name='testjob', state=Job.STATES.PROCESSING, created=datetime.now())
78+
expected = Job.objects.create(name='testjob', state=Job.STATES.NEW, created=datetime.now() - timedelta(minutes=1))
79+
80+
self.assertEqual(Job.objects.get_ready_or_none(), expected)
81+
7082

7183
@override_settings(JOBS={'testjob': {'tasks': ['a', 'b', 'c']}})
7284
class JobTaskTestCase(TestCase):

0 commit comments

Comments
 (0)