Skip to content

Commit a3eebaa

Browse files
authored
fix:when job fails make sure its still scheduled (#46)
Fix #45
1 parent 0ab96ae commit a3eebaa

File tree

3 files changed

+19
-6
lines changed

3 files changed

+19
-6
lines changed

scheduler/models/scheduled_task.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,16 @@
2828

2929
def failure_callback(job, connection, result, *args, **kwargs):
3030
model_name = job.meta.get('task_type', None)
31-
scheduled_task_id = job.meta.get('scheduled_task_id', None)
32-
if model_name is None or scheduled_task_id:
31+
if model_name is None:
3332
return
3433
model = apps.get_model(app_label='scheduler', model_name=model_name)
35-
task = model.objects.filter(id=scheduled_task_id).first()
34+
task = model.objects.filter(job_id=job.id).first()
3635
mail_admins(f'Task {task.id}/{task.name} has failed',
3736
'See django-admin for logs', )
38-
pass
37+
if task is None:
38+
return
39+
task.job_id = None
40+
task.save(schedule_job=True)
3941

4042

4143
def success_callback(job, connection, result, *args, **kwargs):

scheduler/tests/test_models.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,17 @@ def test_check_rescheduled_after_execution(self):
627627
self.assertTrue(task.is_scheduled())
628628
self.assertNotEquals(task.job_id, first_run_id)
629629

630+
def test_check_rescheduled_after_execution_failed_job(self):
631+
task = task_factory(self.TaskModelClass, callable_name='scheduler.tests.jobs.failing_job',
632+
scheduled_time=timezone.now() + timedelta(seconds=1))
633+
queue = task.rqueue
634+
first_run_id = task.job_id
635+
entry = queue.fetch_job(first_run_id)
636+
queue.run_sync(entry)
637+
task.refresh_from_db()
638+
self.assertTrue(task.is_scheduled())
639+
self.assertNotEquals(task.job_id, first_run_id)
640+
630641

631642
class TestCronJob(BaseTestCases.TestBaseJob):
632643
TaskModelClass = CronTask

scheduler/tests/testtools.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@ def sequence_gen():
2626
seq = sequence_gen()
2727

2828

29-
def task_factory(cls, instance_only=False, **kwargs):
29+
def task_factory(cls, callable_name: str = 'scheduler.tests.jobs.test_job', instance_only=False, **kwargs):
3030
values = dict(
3131
name='Scheduled Job %d' % next(seq),
3232
job_id=None,
3333
queue=list(settings.QUEUES.keys())[0],
34-
callable='scheduler.tests.jobs.test_job',
34+
callable=callable_name,
3535
enabled=True,
3636
timeout=None)
3737
if cls == ScheduledTask:

0 commit comments

Comments
 (0)