Contributors mailing list archives

contributors@odoo-community.org

Browse archives

Avatar

Re: Module loading priority and inheritance

by "Richard deMeester" <richard.demeester@willdooit.com> - 17/06/2022 14:41:33

Yann,

Yes, we too have occasionally encountered such issues.  Bridging modules are sometimes required to ensure correct execution, but then, that is still for modules all within our control.

We often find the issue worst when using a third-party app, where there is a complete method overwrite (and maybe justifiably so).


Under your proposal, though, one would need to know about the modules causing the issue - which generally, I guess, is feasable.

I do wonder, though, if implementing a "soft_depends" as opposed to a loading priority, is better.

If randomly, in a manifest, there is a loading priority, then you sort of need to know and set all the other loading priorities, even in the third party modules, which may have their own issues.

A soft depends, at least, it is clear that "this module has a conflict with that module which is now resolved by this dependency", as a priority number just gets lost (like sequences on views when you have many modules extending views)

I would love to see something in this area...

Richard


 

 

Kind Regards 

 

 

A close up of a sign

Description automatically generated 

 

Richard deMeester 

Senior Development Analyst 

richard.demeester@willdooit.com 

 

 

 

 

T: (03) 9135 1900 | M: 0403 76 76 76 | A: Bld 10/435 Williamstown Road, Port Melbourne, 3207 

 

A picture containing monitor, screen, holding, person

Description automatically generated 

 

 
MAKING GROWTH THROUGH TECHNOLOGY EASY 

 
Notice: This email and any files transmitted with it are confidential and are intended solely for the use of the individual or entity to which they are addressed. If you are not the intended recipient, you may not disclose or use the information in this email in any way. If you have received this email in error please notify the sender. Although reasonable precautions have been taken to ensure no viruses are present in this email, no responsibility is accepted by WilldooIT Pty Ltd or its related entities for any loss or damage arising from the use of this email or attachments. Any views expressed in this email or file attachments are those of the individual sender only, unless expressly stated to be those of WilldooIT Pty Ltd  ABN 85 006 073 052 or any of its related entities. 

 

 



From: Yann Papouin <ypa@decgroupe.com>
Sent: Friday, 17 June 2022 7:02 PM
To: Contributors <contributors@odoo-community.org>
Subject: Re: Module loading priority and inheritance
 
After investigation, the sequence field is only used for the kanban view to display applications in a specific order.

Module list is fetched from database in odoo/odoo/modules/loading.py::load_marked_modules with this query

cr.execute("SELECT name from ir_module_module WHERE state IN %s" ,(tuple(states),))

So, the module loading order actually depends on 4 params:
  1. PostgreSQL database collation
  2. Module name
  3. Datetime of the creation of the ir_module_module row (since no ORDER BY is defined in the query)
  4. The dependencies
That's a terrible loading implementation as the parameter 3 is based on an internal postgreSQL data, it also depends on the list order of your addons_path and also depends on when odoo/addons/base/models/ir_module.py::update_list is called.

Example for this last assertion:
  • On the development database:
    • You add the module account_extra, that depends on account and override method update_something, in your main addons path
    • update_list()
    • Two weeks later, you add the module account_best , that also depends on account and also override the method update_something, in your main addons path
    • update_list()
    • Module account_extra will be loaded before account_best
  • Three weeks later, on the production database:
    • You add modules account_extra and account_best in your main addons path
    • update_list()
    • Module account_best will be loaded before account_extra
And there I'm not talking about other cases like:
  • Multiple addons_path
  • Manual module deletion from odoo module list followed by a module list update
  • Manual module installation from UI whereas the server is already started with loaded modules

So, I agree that most cases would be solved by the depends attribute but a fix could still be:
  • Add a loading_priority manifest key:
    • default value is 0 if not set, could be positive (load before) or negative (load after)
    • add an ORDER BY loading_priority, name in all SQL query of the loading.py
  • Add a soft_depends manifest key:
    • a list of modules that we depends on, only if they exists and are installed

_______________________________________________
Mailing-List: https://odoo-community.org/groups/contributors-15
Post to: mailto:contributors@odoo-community.org
Unsubscribe: https://odoo-community.org/groups?unsubscribe

Reference