From b59318ec12a1ce4e59de6d7bcde7146545b6c044 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Wed, 3 May 2017 11:43:05 +0200 Subject: [REF] registry: always perform registry/cache signaling at the end of request Problem: the update of custom models/fields is not fully transactional, and may potentially lead to an inconsistent database. An other problem is creating two custom fields by writing on a model: if the second one fails, the first one has been committed without notice. Retrying the request will give an unexpected error (duplicate field name). Solution: never commit in the middle of a request. If the changes have an impact on the registry, then mark it as invalid (with a new flag), and signal registry invalidation after everything has been committed. If the request fails, reset the registry. Both registry and cache invalidation are handled the same way. --- odoo/tools/cache.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'odoo/tools/cache.py') diff --git a/odoo/tools/cache.py b/odoo/tools/cache.py index 3703fc83ab1..48dc42ba04c 100644 --- a/odoo/tools/cache.py +++ b/odoo/tools/cache.py @@ -92,9 +92,7 @@ class ormcache(object): def clear(self, model, *args): """ Clear the registry cache """ - d, key0, _ = self.lru(model) - d.clear() - model.pool.cache_cleared = True + model.pool._clear_cache() class ormcache_context(ormcache): -- cgit v1.2.3