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
1 change: 0 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ exclude: |
^base_import_async/|
^queue_job_batch/|
^queue_job_cron/|
^queue_job_cron_jobrunner/|
^test_queue_job_batch/|
# END NOT INSTALLABLE ADDONS
# Files and folders generated by bots, to avoid loops
Expand Down
10 changes: 5 additions & 5 deletions queue_job_cron_jobrunner/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ Queue Job Cron Jobrunner
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fqueue-lightgray.png?logo=github
:target: https://github.com/OCA/queue/tree/18.0/queue_job_cron_jobrunner
:target: https://github.com/OCA/queue/tree/19.0/queue_job_cron_jobrunner
:alt: OCA/queue
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/queue-18-0/queue-18-0-queue_job_cron_jobrunner
:target: https://translation.odoo-community.org/projects/queue-19-0/queue-19-0-queue_job_cron_jobrunner
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/queue&target_branch=18.0
:target: https://runboat.odoo-community.org/builds?repo=OCA/queue&target_branch=19.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|
Expand Down Expand Up @@ -102,7 +102,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues <https://github.com/OCA/queue/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/queue/issues/new?body=module:%20queue_job_cron_jobrunner%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
`feedback <https://github.com/OCA/queue/issues/new?body=module:%20queue_job_cron_jobrunner%0Aversion:%2019.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Expand Down Expand Up @@ -142,6 +142,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-ivantodorovich|

This module is part of the `OCA/queue <https://github.com/OCA/queue/tree/18.0/queue_job_cron_jobrunner>`_ project on GitHub.
This module is part of the `OCA/queue <https://github.com/OCA/queue/tree/19.0/queue_job_cron_jobrunner>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
4 changes: 2 additions & 2 deletions queue_job_cron_jobrunner/__manifest__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "Queue Job Cron Jobrunner",
"summary": "Run jobs without a dedicated JobRunner",
"version": "18.0.1.0.1",
"version": "19.0.1.0.0",
"development_status": "Alpha",
"author": "Camptocamp SA, Odoo Community Association (OCA)",
"maintainers": ["ivantodorovich"],
Expand All @@ -13,5 +13,5 @@
"data/ir_cron.xml",
"views/ir_cron.xml",
],
"installable": False,
"installable": True,
}
12 changes: 10 additions & 2 deletions queue_job_cron_jobrunner/models/queue_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@

_logger = logging.getLogger(__name__)

# Delay of a RetryableJobError without seconds nor retry pattern
RETRY_SECONDS = 5


class QueueJob(models.Model):
_inherit = "queue.job"
Expand Down Expand Up @@ -76,8 +79,13 @@ def _process(self, commit=False):
_logger.debug("%s OperationalError, postponed", job)

except RetryableJobError as err:
# delay the job later, requeue
job.postpone(result=str(err), seconds=5)
# delay the job later, requeue: as in queue_job's controller, honour
# the seconds of the exception, then the retry pattern of the job
# function; without both, keep the short delay of the cron runner
seconds = err.seconds
if not seconds and not job.job_config.retry_pattern:
seconds = RETRY_SECONDS
job.postpone(result=str(err), seconds=seconds)
job.set_pending(reset_retry=False)
job.store()
_logger.debug("%s postponed", job)
Expand Down
1 change: 1 addition & 0 deletions queue_job_cron_jobrunner/readme/newsfragments/1023.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
A job raising ``RetryableJobError(seconds=N)`` is now postponed by ``N`` seconds, and without ``seconds`` the retry pattern of the job function applies, as with the standard job runner. Before, the cron runner always postponed it by 5 seconds (still the delay when neither is set).
6 changes: 3 additions & 3 deletions queue_job_cron_jobrunner/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,7 @@ <h1>Queue Job Cron Jobrunner</h1>
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:3c8052bb9647ac1c2222b7bbe43133884ab314534ef09686a3aef58e6b38f712
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Alpha" src="https://img.shields.io/badge/maturity-Alpha-red.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/queue/tree/18.0/queue_job_cron_jobrunner"><img alt="OCA/queue" src="https://img.shields.io/badge/github-OCA%2Fqueue-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/queue-18-0/queue-18-0-queue_job_cron_jobrunner"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/queue&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Alpha" src="https://img.shields.io/badge/maturity-Alpha-red.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/queue/tree/19.0/queue_job_cron_jobrunner"><img alt="OCA/queue" src="https://img.shields.io/badge/github-OCA%2Fqueue-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/queue-19-0/queue-19-0-queue_job_cron_jobrunner"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/queue&amp;target_branch=19.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module implements a simple <tt class="docutils literal">queue.job</tt> runner using <tt class="docutils literal">ir.cron</tt>
triggers.</p>
<p>It’s meant to be used on environments where the regular job runner can’t
Expand Down Expand Up @@ -446,7 +446,7 @@ <h2><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h2>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/queue/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/queue/issues/new?body=module:%20queue_job_cron_jobrunner%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<a class="reference external" href="https://github.com/OCA/queue/issues/new?body=module:%20queue_job_cron_jobrunner%0Aversion:%2019.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
Expand Down Expand Up @@ -480,7 +480,7 @@ <h3><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h3>
promote its widespread use.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/ivantodorovich"><img alt="ivantodorovich" src="https://github.com/ivantodorovich.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/queue/tree/18.0/queue_job_cron_jobrunner">OCA/queue</a> project on GitHub.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/queue/tree/19.0/queue_job_cron_jobrunner">OCA/queue</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
Expand Down
46 changes: 46 additions & 0 deletions queue_job_cron_jobrunner/tests/test_queue_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,16 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from datetime import timedelta
from unittest.mock import patch

from freezegun import freeze_time

from odoo import fields
from odoo.tests.common import TransactionCase
from odoo.tools import mute_logger

from odoo.addons.queue_job.exception import RetryableJobError


class TestQueueJob(TransactionCase):
@classmethod
Expand Down Expand Up @@ -97,3 +100,46 @@ def test_acquire_one_job_consume_the_oldest_first(self):
self.env["res.partner"].with_delay(priority=30).create({"name": "test"})

self.assertEqual(self.env["queue.job"]._acquire_one_job(), job.db_record())

def _run_retryable_job(self, seconds=None, retry_pattern=None):
"""Process a job raising RetryableJobError as the cron runner does"""
if retry_pattern:
self.env["queue.job.function"].create(
{"name": "<res.partner>.create", "retry_pattern": retry_pattern}
)
job = self.env["res.partner"].with_delay().create({"name": "test"})
job_record = job.db_record()
partner_model = type(self.env["res.partner"])

def create(self, vals_list):
raise RetryableJobError("Try again later", seconds=seconds)

with (
freeze_time("2022-02-22 22:22:22"),
patch.object(partner_model, "create", create),
):
job_record._process(commit=False)
self.assertEqual(job_record.state, "pending")
self.assertEqual(job_record.retry, 1)
return job_record

def test_queue_job_retryable_error_seconds(self):
"""RetryableJobError(seconds=N) postpones the job by N seconds"""
job_record = self._run_retryable_job(seconds=120)
self.assertEqual(
job_record.eta, fields.Datetime.to_datetime("2022-02-22 22:24:22")
)

def test_queue_job_retryable_error_retry_pattern(self):
"""Without seconds, the retry pattern of the job function applies"""
job_record = self._run_retryable_job(retry_pattern={1: 300})
self.assertEqual(
job_record.eta, fields.Datetime.to_datetime("2022-02-22 22:27:22")
)

def test_queue_job_retryable_error_default(self):
"""Without seconds or retry pattern, the job is postponed by 5 seconds"""
job_record = self._run_retryable_job()
self.assertEqual(
job_record.eta, fields.Datetime.to_datetime("2022-02-22 22:22:27")
)
Loading