From cbab786eb2e153eb7eefbd994cb261fa96e56800 Mon Sep 17 00:00:00 2001 From: Xavier-Do Date: Tue, 21 Jan 2020 17:25:55 +0000 Subject: [PATCH] [IMP] core: do not log error for unmet dependencies on add_modules MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When migrating a database, load_marked_modules will be called multiple times, alternating to upgrade and to install modules. The main reason for this is still a litle confusing but it as the side effect to log "Unmet dependencies" error multiple time in add_modules, even if the dependency will be resolved later. This commit removes the error level for this log, and replace it by another check, performed at the end, logging any module in "to install"/"to upgrade" state. Also log removed module as info (25), not warning. This may be changed latter closes odoo/odoo#43797 X-original-commit: c5d6a3977de85fb974a4940fb11d54ef847e08e4 Signed-off-by: Xavier Dollé (xdo) --- odoo/modules/graph.py | 2 +- odoo/modules/loading.py | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/odoo/modules/graph.py b/odoo/modules/graph.py index 33846fbd1ec..cb9a761cc51 100644 --- a/odoo/modules/graph.py +++ b/odoo/modules/graph.py @@ -94,7 +94,7 @@ class Graph(dict): for package in later: unmet_deps = [p for p in dependencies[package] if p not in self] - _logger.error('module %s: Unmet dependencies: %s', package, ', '.join(unmet_deps)) + _logger.info('module %s: Unmet dependencies: %s', package, ', '.join(unmet_deps)) return len(self) - len_graph diff --git a/odoo/modules/loading.py b/odoo/modules/loading.py index b844fddaf49..846d9828cba 100644 --- a/odoo/modules/loading.py +++ b/odoo/modules/loading.py @@ -419,6 +419,18 @@ def load_modules(db, force_demo=False, status=None, update_module=False): ['to install'], force, status, report, loaded_modules, update_module, models_to_check) + # check modules states + cr.execute("SELECT name from ir_module_module WHERE state IN ('to install', 'to upgrade', 'to remove')") + module_list = [name for (name,) in cr.fetchall()] + if module_list: + _logger.error("Some module have inconsistent state, some dependency may be missing: %s", module_list) + + cr.execute("SELECT name from ir_module_module WHERE state = 'installed'") + module_list = [name for (name,) in cr.fetchall() if name not in graph] + if module_list: + _logger.error("Some module are not loaded, some dependency may be missing: %s", module_list) + + registry.loaded = True registry.setup_models(cr) @@ -448,7 +460,7 @@ def load_modules(db, force_demo=False, status=None, update_module=False): if model in registry: env[model]._check_removed_columns(log=True) elif _logger.isEnabledFor(logging.INFO): # more an info that a warning... - _logger.warning("Model %s is declared but cannot be loaded! (Perhaps a module was partially removed or renamed)", model) + _logger.log(25, "Model %s is declared but cannot be loaded! (Perhaps a module was partially removed or renamed)", model) # Cleanup orphan records env['ir.model.data']._process_end(processed_modules)