From c87b9c65399e0ca517f5a1bd35f0d968a9ebde3f Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 19 Nov 2014 12:14:21 +0100 Subject: [PATCH] [FIX] decimal_precision: avoid refreshing float precisions at each cache invalidation Changing the decimal precision of float fields is a rare operation, while cache clearing occurs fairly frequently. Signaling a full registry change when the decimal precision is changed (instead of a mere cache change) is therefore a better trade-off, and more semantically correct as well. This way we avoid the decimal precision refresh for each invalidation. Registry invalidation implies cache invalidation. --- addons/decimal_precision/decimal_precision.py | 2 +- openerp/modules/registry.py | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/addons/decimal_precision/decimal_precision.py b/addons/decimal_precision/decimal_precision.py index 945825ed3e6..f169b698ebd 100644 --- a/addons/decimal_precision/decimal_precision.py +++ b/addons/decimal_precision/decimal_precision.py @@ -53,7 +53,7 @@ class decimal_precision(orm.Model): for field in model._fields.values(): if field.type == 'float': field._setup_digits(env) - RegistryManager.signal_caches_change(cr.dbname) + RegistryManager.signal_registry_change(cr.dbname) def create(self, cr, uid, data, context=None): res = super(decimal_precision, self).create(cr, uid, data, context=context) diff --git a/openerp/modules/registry.py b/openerp/modules/registry.py index 7cf734d792e..afdb48fe304 100644 --- a/openerp/modules/registry.py +++ b/openerp/modules/registry.py @@ -429,14 +429,6 @@ class RegistryManager(object): _logger.info("Invalidating all model caches after database signaling.") registry.clear_caches() registry.reset_any_cache_cleared() - # One possible reason caches have been invalidated is the - # use of decimal_precision.write(), in which case we need - # to refresh fields.float columns. - env = openerp.api.Environment(cr, SUPERUSER_ID, {}) - for model in registry.values(): - for field in model._fields.values(): - if field.type == 'float': - field._setup_digits(env) registry.base_registry_signaling_sequence = r registry.base_cache_signaling_sequence = c finally: