From c87b9c65399e0ca517f5a1bd35f0d968a9ebde3f Mon Sep 17 00:00:00 2001
From: Olivier Dony <odo@openerp.com>
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 945825ed3e68..f169b698ebd6 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 7cf734d792ef..afdb48fe304c 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:
-- 
GitLab