- Mailing Lists
- Contributors
- Re: Module loading priority and inheritance
Archives
- By thread 1419
-
By date
- August 2019 59
- September 2019 118
- October 2019 165
- November 2019 97
- December 2019 35
- January 2020 58
- February 2020 204
- March 2020 121
- April 2020 172
- May 2020 50
- June 2020 158
- July 2020 85
- August 2020 94
- September 2020 193
- October 2020 277
- November 2020 100
- December 2020 159
- January 2021 38
- February 2021 87
- March 2021 146
- April 2021 73
- May 2021 90
- June 2021 86
- July 2021 123
- August 2021 50
- September 2021 68
- October 2021 66
- November 2021 74
- December 2021 75
- January 2022 98
- February 2022 77
- March 2022 68
- April 2022 31
- May 2022 59
- June 2022 87
- July 2022 141
- August 2022 38
- September 2022 73
- October 2022 152
- November 2022 39
- December 2022 50
- January 2023 93
- February 2023 49
- March 2023 106
- April 2023 47
- May 2023 69
- June 2023 92
- July 2023 64
- August 2023 103
- September 2023 91
- October 2023 101
- November 2023 94
- December 2023 46
- January 2024 75
- February 2024 79
- March 2024 104
- April 2024 63
- May 2024 40
- June 2024 160
- July 2024 80
- August 2024 70
- September 2024 62
- October 2024 121
- November 2024 117
- December 2024 89
- January 2025 59
- February 2025 104
- March 2025 96
- April 2025 107
- May 2025 52
- June 2025 72
- July 2025 60
- August 2025 81
- September 2025 124
- October 2025 63
- November 2025 22
Contributors
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:
- PostgreSQL database collation
- Module name
- Datetime of the creation of the ir_module_module row (since no ORDER BY is defined in the query)
- 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.
- 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
by Yann Papouin - 11:00 - 17 Jun 2022
Reference
-
Module loading priority and inheritance
Hi,I just installed the auth_totp module to add MFA support to our odoo 12.0 instance and its behaviour is totally broken after a server restart when the auth_ldap module is also installed.Because _check_credentials logic is just made to accept at least one Valid authentication and not globally refuse any authentication, the current implementation of the auth_totp will always fail if a module validate _check_credentials after that the MfaLoginNeeded exception is raised.To me it's more a framework issue and the manifest should allow a new priority value to sort modules without inter-dependencies (because actually, it seems to use an alphabetic sorting based on module name).But without this, how do you handle such situations ?--
Yann PAPOUIN, Ingénieur R&D | DEC
by Yann Papouin - 03:31 - 15 Jun 2022