Skip to content

Commit

Permalink
[FIX] queue_job: Add requeue default config parameter for started_delta
Browse files Browse the repository at this point in the history
  • Loading branch information
Shide committed Apr 15, 2024
1 parent a59f73d commit cd78484
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 12 deletions.
13 changes: 13 additions & 0 deletions queue_job/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,19 @@ Configuration
.. [1] It works with the threaded Odoo server too, although this way
of running Odoo is obviously not for production purposes.
* Be sure to check out *Jobs Garbage Collector* CRON and change *enqueued_delta* and *started_delta* parameters to your needs.

* ``enqueued_delta``: Spent time in minutes after which an enqueued job is considered stuck.
Set it to 0 to disable this check.
* ``started_delta``: Spent time in minutes after which a started job is considered stuck.
This parameter should not be less than ``--limit-time-real // 60`` parameter in your configuration.
Set it to 0 to disable this check. Set it to -1 to automate it, based in the server's ``--limit-time-real`` config parameter.

.. code-block:: python
# `model` corresponds to 'queue.job' model
model.requeue_stuck_jobs(enqueued_delta=1, started_delta=-1)
Usage
=====

Expand Down
4 changes: 3 additions & 1 deletion queue_job/data/queue_data.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
<field name="numbercall">-1</field>
<field ref="model_queue_job" name="model_id" />
<field name="state">code</field>
<field name="code">model.requeue_stuck_jobs()</field>
<field
name="code"
>model.requeue_stuck_jobs(enqueued_delta=1, started_delta=-1)</field>
</record>
<!-- Queue-job-related subtypes for messaging / Chatter -->
<record id="mt_job_failed" model="mail.message.subtype">
Expand Down
17 changes: 10 additions & 7 deletions queue_job/models/queue_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ def button_cancelled(self):
def requeue(self):
jobs_to_requeue = self.filtered(lambda job_: job_.state != WAIT_DEPENDENCIES)
jobs_to_requeue._change_job_state(PENDING)
return True
return jobs_to_requeue

def _message_post_on_failure(self):
# subscribe the users now to avoid to subscribe them
Expand Down Expand Up @@ -417,20 +417,23 @@ def autovacuum(self):
break
return True

def requeue_stuck_jobs(self, enqueued_delta=5, started_delta=0):
def requeue_stuck_jobs(self, enqueued_delta=1, started_delta=0):
"""Fix jobs that are in a bad states
:param in_queue_delta: lookup time in minutes for jobs
that are in enqueued state
that are in enqueued state,
0 means that it is not checked
:param started_delta: lookup time in minutes for jobs
that are in enqueued state,
0 means that it is not checked
that are in started state,
0 means that it is not checked,
-1 will use `--limit-time-real` config value
"""
self._get_stuck_jobs_to_requeue(
if started_delta == -1:
started_delta = (config["limit_time_real"] // 60) + 1
return self._get_stuck_jobs_to_requeue(
enqueued_delta=enqueued_delta, started_delta=started_delta
).requeue()
return True

def _get_stuck_jobs_domain(self, queue_dl, started_dl):
domain = []
Expand Down
13 changes: 13 additions & 0 deletions queue_job/readme/CONFIGURE.rst
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,16 @@

.. [1] It works with the threaded Odoo server too, although this way
of running Odoo is obviously not for production purposes.
* Be sure to check out *Jobs Garbage Collector* CRON and change *enqueued_delta* and *started_delta* parameters to your needs.

* ``enqueued_delta``: Spent time in minutes after which an enqueued job is considered stuck.
Set it to 0 to disable this check.
* ``started_delta``: Spent time in minutes after which a started job is considered stuck.
This parameter should not be less than ``--limit-time-real // 60`` parameter in your configuration.
Set it to 0 to disable this check. Set it to -1 to automate it, based in the server's ``--limit-time-real`` config parameter.

.. code-block:: python
# `model` corresponds to 'queue.job' model
model.requeue_stuck_jobs(enqueued_delta=1, started_delta=-1)
27 changes: 23 additions & 4 deletions queue_job/static/description/index.html
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
Expand All @@ -8,10 +9,11 @@

/*
:Author: David Goodger ([email protected])
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.

Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.

See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
Expand Down Expand Up @@ -274,7 +276,7 @@
margin-left: 2em ;
margin-right: 2em }

pre.code .ln { color: grey; } /* line numbers */
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
Expand All @@ -300,7 +302,7 @@
span.pre {
white-space: pre }

span.problematic {
span.problematic, pre.problematic {
color: red }

span.section-subtitle {
Expand Down Expand Up @@ -491,6 +493,21 @@ <h1><a class="toc-backref" href="#toc-entry-2">Configuration</a></h1>
of running Odoo is obviously not for production purposes.</td></tr>
</tbody>
</table>
<ul>
<li><p class="first">Be sure to check out <em>Jobs Garbage Collector</em> CRON and change <em>enqueued_delta</em> and <em>started_delta</em> parameters to your needs.</p>
<ul class="simple">
<li><tt class="docutils literal">enqueued_delta</tt>: Spent time in minutes after which an enqueued job is considered stuck.
Set it to 0 to disable this check.</li>
<li><tt class="docutils literal">started_delta</tt>: Spent time in minutes after which a started job is considered stuck.
This parameter should not be less than <tt class="docutils literal"><span class="pre">--limit-time-real</span> // 60</tt> parameter in your configuration.
Set it to 0 to disable this check. Set it to -1 to automate it, based in the server’s <tt class="docutils literal"><span class="pre">--limit-time-real</span></tt> config parameter.</li>
</ul>
<pre class="code python literal-block">
<span class="c1"># `model` corresponds to 'queue.job' model</span><span class="w">
</span><span class="n">model</span><span class="o">.</span><span class="n">requeue_stuck_jobs</span><span class="p">(</span><span class="n">enqueued_delta</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">started_delta</span><span class="o">=-</span><span class="mi">1</span><span class="p">)</span>
</pre>
</li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-3">Usage</a></h1>
Expand Down Expand Up @@ -939,7 +956,9 @@ <h2><a class="toc-backref" href="#toc-entry-17">Contributors</a></h2>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-18">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>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.</p>
Expand Down

0 comments on commit cd78484

Please sign in to comment.