[FIX] mrp: installation on very large inventories

Before this commit, installation of MRP in a database with 4.8M
stock.move + 4.8M stock.move.line was not possible at all.
The process lasted for a very long time (>90 min in our tests) then
eventually failed after using the whole RAM of your server.

This commit allows installing MRP in databases with large stock.move /
stock.move.line tables by bootstrapping the slow parts in SQL.

A more general fix regarding the time complexity of some parts of the
prefetching algorithm is coming later in 13.0-init-computed-fields-rco

opw-2281585

X-original-commit: 549de5601efdad3ebdb03feb8beb1e898f80113a
This commit is contained in:
Richard Mathot
2020-09-23 11:50:09 +00:00
parent b17d943d98
commit 84da465c60
2 changed files with 13 additions and 0 deletions
+12
View File
@@ -8,6 +8,18 @@ from . import controller
from odoo import api, SUPERUSER_ID
def _pre_init_mrp(cr):
""" Allow installing MRP in databases with large stock.move table (>1M records)
- Creating the computed+stored field stock_move.is_done is terribly slow with the ORM and
leads to "Out of Memory" crashes
"""
cr.execute("""ALTER TABLE "stock_move" ADD COLUMN "is_done" bool;""")
cr.execute("""UPDATE stock_move
SET is_done=TRUE
WHERE STATE='done'
OR STATE='cancel';""")
def _create_warehouse_data(cr, registry):
""" This hook is used to add a default manufacture_pull_id, manufacture
picking_type on every warehouse. It is necessary if the mrp module is
+1
View File
@@ -52,6 +52,7 @@
],
'test': [],
'application': True,
'pre_init_hook': '_pre_init_mrp',
'post_init_hook': '_create_warehouse_data',
'uninstall_hook': 'uninstall_hook',
}