188 lines
5.6 KiB
ReStructuredText
188 lines
5.6 KiB
ReStructuredText
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
|
|
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
|
:alt: License: AGPL-3
|
|
|
|
=========
|
|
Job Queue
|
|
=========
|
|
|
|
This addon adds an integrated Job Queue to Odoo.
|
|
|
|
It allows to postpone method calls executed asynchronously.
|
|
|
|
Jobs are executed in the background by a ``Jobrunner``, in their own transaction.
|
|
|
|
Example:
|
|
|
|
.. code-block:: python
|
|
|
|
from odoo import models, fields, api
|
|
from odoo.addons.queue_job.job import job
|
|
|
|
class MyModel(models.Model):
|
|
_name = 'my.model'
|
|
|
|
@api.multi
|
|
@job
|
|
def my_method(self, a, k=None):
|
|
_logger.info('executed with a: %s and k: %s', a, k)
|
|
|
|
|
|
class MyOtherModel(models.Model):
|
|
_name = 'my.other.model'
|
|
|
|
@api.multi
|
|
def button_do_stuff(self):
|
|
self.env['my.model'].with_delay().my_method('a', k=2)
|
|
|
|
|
|
In the snippet of code above, when we call ``button_do_stuff``, a job capturing
|
|
the method and arguments will be postponed. It will be executed as soon as the
|
|
Jobrunner has a free bucket, which can be instantaneous if no other job is
|
|
running.
|
|
|
|
|
|
Features:
|
|
|
|
* Views for jobs, jobs are stored in PostgreSQL
|
|
* Jobrunner: execute the jobs, highly efficient thanks to PostgreSQL's NOTIFY
|
|
* Channels: give a capacity for the root channel and its sub-channels and
|
|
segregate jobs in them. Allow for instance to restrict heavy jobs to be
|
|
executed one at a time while little ones are executed 4 at a times.
|
|
* Retries: Ability to retry jobs by raising a type of exception
|
|
* Retry Pattern: the 3 first tries, retry after 10 seconds, the 5 next tries,
|
|
retry after 1 minutes, ...
|
|
* Job properties: priorities, estimated time of arrival (ETA), custom
|
|
description, number of retries
|
|
* Related Actions: link an action on the job view, such as open the record
|
|
concerned by the job
|
|
|
|
|
|
Installation
|
|
============
|
|
|
|
Be sure to have the ``requests`` library.
|
|
|
|
Configuration
|
|
=============
|
|
|
|
* Using environment variables and command line:
|
|
|
|
* Adjust environment variables (optional):
|
|
|
|
- ``ODOO_QUEUE_JOB_CHANNELS=root:4``
|
|
|
|
- or any other channels configuration. The default is ``root:1``
|
|
|
|
- if ``xmlrpc_port`` is not set: ``ODOO_QUEUE_JOB_PORT=8069``
|
|
|
|
* Start Odoo with ``--load=web,base_sparse_field,queue_job``
|
|
and ``--workers`` greater than 1. [1]_
|
|
|
|
|
|
* Using the Odoo configuration file:
|
|
|
|
.. code-block:: ini
|
|
|
|
[options]
|
|
(...)
|
|
workers = 4
|
|
server_wide_modules = web,web_kanban,queue_job
|
|
|
|
(...)
|
|
[queue_job]
|
|
channels = root:4
|
|
|
|
* Confirm the runner is starting correctly by checking the odoo log file:
|
|
|
|
.. code-block:: none
|
|
|
|
...INFO...queue_job.jobrunner.runner: starting
|
|
...INFO...queue_job.jobrunner.runner: initializing database connections
|
|
...INFO...queue_job.jobrunner.runner: queue job runner ready for db <dbname>
|
|
...INFO...queue_job.jobrunner.runner: database connections ready
|
|
|
|
* Create jobs (eg using ``base_import_async``) and observe they
|
|
start immediately and in parallel.
|
|
|
|
* Tip: to enable debug logging for the queue job, use
|
|
``--log-handler=odoo.addons.queue_job:DEBUG``
|
|
|
|
.. [1] It works with the threaded Odoo server too, although this way
|
|
of running Odoo is obviously not for production purposes.
|
|
|
|
Usage
|
|
=====
|
|
|
|
To use this module, you need to:
|
|
|
|
#. Go to ``Job Queue`` menu
|
|
|
|
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
|
|
:alt: Try me on Runbot
|
|
:target: https://runbot.odoo-community.org/runbot/230/10.0
|
|
|
|
Known issues / Roadmap
|
|
======================
|
|
|
|
* After creating a new database or installing ``queue_job`` on an
|
|
existing database, Odoo must be restarted for the runner to detect it.
|
|
|
|
* When Odoo shuts down normally, it waits for running jobs to finish.
|
|
However, when the Odoo server crashes or is otherwise force-stopped,
|
|
running jobs are interrupted while the runner has no chance to know
|
|
they have been aborted. In such situations, jobs may remain in
|
|
``started`` or ``enqueued`` state after the Odoo server is halted.
|
|
Since the runner has no way to know if they are actually running or
|
|
not, and does not know for sure if it is safe to restart the jobs,
|
|
it does not attempt to restart them automatically. Such stale jobs
|
|
therefore fill the running queue and prevent other jobs to start.
|
|
You must therefore requeue them manually, either from the Jobs view,
|
|
or by running the following SQL statement *before starting Odoo*:
|
|
|
|
.. code-block:: sql
|
|
|
|
update queue_job set state='pending' where state in ('started', 'enqueued')
|
|
|
|
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 smashing it by providing a detailed and welcomed feedback.
|
|
|
|
Credits
|
|
=======
|
|
|
|
Images
|
|
------
|
|
|
|
* Odoo Community Association: `Icon <https://github.com/OCA/maintainer-tools/blob/master/template/module/static/description/icon.svg>`_.
|
|
|
|
Contributors
|
|
------------
|
|
|
|
* Guewen Baconnier <guewen.baconnier@camptocamp.com>
|
|
* Stéphane Bidoul <stephane.bidoul@acsone.eu>
|
|
* Matthieu Dietrich <matthieu.dietrich@camptocamp.com>
|
|
* Jos De Graeve <Jos.DeGraeve@apertoso.be>
|
|
* David Lefever <dl@taktik.be>
|
|
* Laurent Mignon <laurent.mignon@acsone.eu>
|
|
* Laetitia Gangloff <laetitia.gangloff@acsone.eu>
|
|
|
|
Maintainer
|
|
----------
|
|
|
|
.. image:: https://odoo-community.org/logo.png
|
|
:alt: Odoo Community Association
|
|
:target: https://odoo-community.org
|
|
|
|
This module is maintained by the OCA.
|
|
|
|
OCA, or the Odoo Community Association, is a nonprofit organization whose
|
|
mission is to support the collaborative development of Odoo features and
|
|
promote its widespread use.
|
|
|
|
To contribute to this module, please visit https://odoo-community.org.
|