diff --git a/queue_job/controllers/main.py b/queue_job/controllers/main.py index da42b53e99..61478335df 100644 --- a/queue_job/controllers/main.py +++ b/queue_job/controllers/main.py @@ -122,6 +122,8 @@ def retry_postpone(job, message, seconds=None): job.store() env.cr.commit() + # FIXME: this exception never triggers up, so it never reaches + # `perform` method that handles retries. except RetryableJobError as err: # delay the job later, requeue retry_postpone(job, str(err), seconds=err.seconds) diff --git a/queue_job/job.py b/queue_job/job.py index 1a61881e30..a1a65f5997 100644 --- a/queue_job/job.py +++ b/queue_job/job.py @@ -512,6 +512,10 @@ def perform(self): The job is executed with the user which has initiated it. """ + if self.max_retries and self.retry >= self.max_retries: + raise FailedJobError( + "Max. retries (%d) reached: %s" % (self.max_retries, self._uuid) + ) self.retry += 1 try: self.result = self.func(*tuple(self.args), **self.kwargs)