Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions queue_job/controllers/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,10 @@ def _try_perform_job(cls, env, job):

@classmethod
def _enqueue_dependent_jobs(cls, env, job):
if not job.should_check_dependents():
return

_logger.debug("%s enqueue depends started", job)
tries = 0
while True:
try:
Expand Down Expand Up @@ -136,6 +140,7 @@ def _enqueue_dependent_jobs(cls, env, job):
time.sleep(wait_time)
else:
break
_logger.debug("%s enqueue depends done", job)

@classmethod
def _runjob(cls, env: api.Environment, job: Job) -> None:
Expand Down Expand Up @@ -167,6 +172,7 @@ def retry_postpone(job, message, seconds=None):
# traceback in the logs we should have the traceback when all
# retries are exhausted
env.cr.rollback()
return

except (FailedJobError, Exception) as orig_exception:
buff = StringIO()
Expand All @@ -182,9 +188,7 @@ def retry_postpone(job, message, seconds=None):
buff.close()
raise

_logger.debug("%s enqueue depends started", job)
cls._enqueue_dependent_jobs(env, job)
_logger.debug("%s enqueue depends done", job)

@classmethod
def _get_failure_values(cls, job, traceback_txt, orig_exception):
Expand Down
3 changes: 3 additions & 0 deletions queue_job/job.py
Original file line number Diff line number Diff line change
Expand Up @@ -537,6 +537,9 @@ def _get_common_dependent_jobs_query(self):
AND state = %s;
"""

def should_check_dependents(self):
return any(self.__reverse_depends_on_uuids)

def enqueue_waiting(self):
sql = self._get_common_dependent_jobs_query()
self.env.cr.execute(sql, (PENDING, self.uuid, DONE, WAIT_DEPENDENCIES))
Expand Down
13 changes: 13 additions & 0 deletions test_queue_job/tests/test_dependencies.py
Original file line number Diff line number Diff line change
Expand Up @@ -287,3 +287,16 @@ def test_depends_graph_uuid_group(self):
self.assertTrue(jobs[0].graph_uuid)
self.assertTrue(jobs[1].graph_uuid)
self.assertEqual(jobs[0].graph_uuid, jobs[1].graph_uuid)

def test_should_check_dependents(self):
job_root = Job(self.method)
job_a = Job(self.method)
job_a.add_depends({job_root})

DelayableGraph._ensure_same_graph_uuid([job_root, job_a])

job_root.store()
job_a.store()

self.assertTrue(job_root.should_check_dependents())
self.assertFalse(job_a.should_check_dependents())