From 3f3d2b2773377c707be110aeb3edf9c8fd689d07 Mon Sep 17 00:00:00 2001 From: Adrian Torres Date: Thu, 28 Mar 2019 14:01:54 +0000 Subject: [PATCH] [FIX] base: prevent module operations while cron is running closes odoo/odoo#32234 Signed-off-by: Raphael Collet (rco) --- odoo/addons/base/module/module.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/odoo/addons/base/module/module.py b/odoo/addons/base/module/module.py index 4145389ff7f..5ff5930499c 100644 --- a/odoo/addons/base/module/module.py +++ b/odoo/addons/base/module/module.py @@ -16,6 +16,7 @@ from docutils.core import publish_string from docutils.transforms import Transform, writer_aux from docutils.writers.html4css1 import Writer import lxml.html +import psycopg2 try: from cStringIO import StringIO @@ -479,6 +480,14 @@ class Module(models.Model): @api.multi def _button_immediate_function(self, function): + try: + # This is done because the installation/uninstallation/upgrade can modify a currently + # running cron job and prevent it from finishing, and since the ir_cron table is locked + # during execution, the lock won't be released until timeout. + self._cr.execute("SELECT * FROM ir_cron FOR UPDATE NOWAIT") + except psycopg2.OperationalError: + raise UserError(_("The server is busy right now, module operations are not possible at" + " this time, please try again later.")) function(self) self._cr.commit()