Daily updates from Odoo
Friday, June 27, 2025
5 changes · master
Enhancements to existing features
The IoT Box image no longer tries to switch between read-only and writable modes. This removes a complex process that was not working reliably and helps avoid issues caused by background tasks keeping storage busy.
Original PR description
IoT Box images were r/o by default: we had to remount the filesystem r/w everytime we wanted to write something. As it was getting hard to track background processes keeping mount points busy, we removed the logic. In addition, as mount points were kept busy, IoT Boxes stayed in r/w mode all the time, making the logic useless. Community PR: odoo/odoo#216329 Task: 4551009
The spreadsheet global filter experience has been refreshed to make filter setup and field matching clearer for users. This should improve day-to-day spreadsheet reporting workflows by reducing confusion when configuring filters across data sources.
Spreadsheet relative date filters have been updated to match the latest redesigned experience. This makes date-based filtering clearer and more consistent for users working with spreadsheets and documents.
Users can now flip the axes of a pivot table directly from the spreadsheet pivot details panel. This makes it faster to reorganize data views and compare information without rebuilding the pivot setup.
Financial reports using account code rules now calculate much faster by avoiding a heavy database query pattern. This reduces processing time and makes automated validation more stable, especially for large reports with many account-code conditions.
Original PR description
The `account_codes` engine generates a giant `UNION ALL` to map prefixes to accounts. This fully loads postgres for up to minutes at a time, which in the default configuration loads 3 full cores.…
The `account_codes` engine generates a giant `UNION ALL` to map prefixes to accounts. This fully loads postgres for up to minutes at a time, which in the default configuration loads 3 full cores. This also leads to significant *variance* on runbot: runbots are configured with as many builds as they have cores[^1], so the test can take 3 cores when the machine is idle but during the day when machines tend to be fully loaded it contends a ton and slows down dramatically. `l10n_ro_reports.account_financial_report_ro_bs_large` for instance has nearly 400 different clausesm, something postgres does not cope with well https://explain.dalibo.com/plan/ea5d23aefd3b861f#grid This is not helped by those searches being filtered by account codes, which have not been indexed since 18.0 (because it's now `company_dependent`). Since the accounts table is pretty small (800 records on runbot, 8000 on odoo.com) we can just load the entire thing in memory and index it. before: 164.80s user 1.71s system 12% cpu 23:03.28 total after: 124.43s user 1.80s system 23% cpu 8:46.15 total NOTE: Currently the code (prefix) search uses a binary search so complexity is O(m log(n)). This could be improved by sorting the non-tag formulas, as we could then use synchronised linear search, working in O(m + n). [^1]: while they are hyperthreaded that's only an extra 10-ish% performance opportunity at best for CPU-bound workloads, sometimes less