From 3d1e23aaba2e220c7a92fb4323746a08a5a1b7ed Mon Sep 17 00:00:00 2001 From: Adrian Torres Date: Fri, 1 Dec 2017 14:15:42 +0000 Subject: [FIX] *: Reset module states on registry init error Commit 763d714 introduced cron job locking for databases which had modules with states set to 'to x', however if an installation/uninstallation/upgrade fails, the state will stay at 'to x', and it may stay in that state for an indefinite amount of time, meaning that cron jobs could stay locked forever. This commit fixes this in part by adding a cleanup function to loading.py that will be executed whenever load_modules fails, the function will change every 'to x' module to their original state, effectively unlocking the execution of cron jobs. This however only works to prevent "zombie" transient states for brand new databases, however for existing databases which already contain some modules in a zombie state it won't do anything unless a module is installed/uninstalled/upgraded, which may never happen. This is where the second part comes in (ir_cron.py), when failing to execute crons, we check if the failure was due to bad module state and if an arbitrary amount of time (5 hours as of this commit) has passed since the last time it was supposed to be executed, if it is the case, it means that the cron execution failed around 5 * 60 times (1 failure per minute for 5h) in which case we assume that the crons are stuck because the db has zombie states and we force a call to reset_module_states. --- odoo/modules/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'odoo/modules/__init__.py') diff --git a/odoo/modules/__init__.py b/odoo/modules/__init__.py index 530f81ff5e3..b223df99280 100644 --- a/odoo/modules/__init__.py +++ b/odoo/modules/__init__.py @@ -7,7 +7,7 @@ from . import db, graph, loading, migration, module, registry -from odoo.modules.loading import load_modules +from odoo.modules.loading import load_modules, reset_modules_state from odoo.modules.module import ( adapt_version, -- cgit v1.2.3