From 1b820545547cfff89f693fb342bac78d8a094d20 Mon Sep 17 00:00:00 2001 From: Stanislas Sobieski Date: Wed, 1 Sep 2021 12:07:04 +0000 Subject: [PATCH] [ADD] ir_cron: allow env variable to force cron_trigger db notification closes odoo/odoo#75846 Signed-off-by: Fabien Meghazi --- odoo/addons/base/models/ir_cron.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/odoo/addons/base/models/ir_cron.py b/odoo/addons/base/models/ir_cron.py index 08e569277c3..136706916a6 100644 --- a/odoo/addons/base/models/ir_cron.py +++ b/odoo/addons/base/models/ir_cron.py @@ -2,6 +2,7 @@ import logging import threading import time +import os import psycopg2 import pytz from datetime import datetime, timedelta @@ -67,6 +68,8 @@ class ir_cron(models.Model): @api.model def create(self, values): values['usage'] = 'ir_cron' + if os.getenv('ODOO_NOTIFY_CRON_CHANGES'): + self._cr.postcommit.add(self._notifydb) return super(ir_cron, self).create(values) @api.model @@ -371,6 +374,8 @@ class ir_cron(models.Model): def write(self, vals): self._try_lock() + if ('nextcall' in vals or vals.get('active')) and os.getenv('ODOO_NOTIFY_CRON_CHANGES'): + self._cr.postcommit.add(self._notifydb) return super(ir_cron, self).write(vals) def unlink(self): @@ -447,13 +452,16 @@ class ir_cron(models.Model): ats = ', '.join(map(str, at_list)) _logger.debug("will execute '%s' at %s", self.sudo().name, ats) - if min(at_list) <= now: + if min(at_list) <= now or os.getenv('ODOO_NOTIFY_CRON_CHANGES'): self._cr.postcommit.add(self._notifydb) def _notifydb(self): - """ Wake up the cron workers """ + """ Wake up the cron workers + The ODOO_NOTIFY_CRON_CHANGES environment variable allows to force the notifydb on both + ir_cron modification and on trigger creation (regardless of call_at) + """ with odoo.sql_db.db_connect('postgres').cursor() as cr: - cr.execute('NOTIFY cron_trigger') + cr.execute('NOTIFY cron_trigger, %s', [self.env.cr.dbname]) _logger.debug("cron workers notified")