[FIX] decimal_precision: avoid refreshing float precisions at each cache invalidation
authorOlivier Dony <odo@openerp.com>
Wed, 19 Nov 2014 11:14:21 +0000 (12:14 +0100)
committerOlivier Dony <odo@openerp.com>
Wed, 19 Nov 2014 11:53:58 +0000 (12:53 +0100)
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
openerp/modules/registry.py

index 945825e..f169b69 100644 (file)
@@ -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)
index 7cf734d..afdb48f 100644 (file)
@@ -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: