[IMP] core: avoid extra invalidate of compute no-store field.
`tocompute` in the `Transaction` contains store field on records to be recomputed. No-store compute fields are directly invalidated from the cache when a dependency changes (see `BaseModel.modified`). In fact, `_recompute_field` was actually doing too much for nothing. Also, it may invalidate caches of compute no-store fields for no reason (e.g., if they are searchable). Remove the part for field compute no-store field. And prevent `_recompute_field` callers from calling it with no-store fields. closes odoo/odoo#122147 X-original-commit: ba9ccb07fb12558667db97b866df492fd0f5ba4d Signed-off-by: Raphael Collet <rco@odoo.com> Signed-off-by: Rémy Voet <ryv@odoo.com>
This commit is contained in:
+6
-11
@@ -6345,7 +6345,7 @@ class BaseModel(metaclass=MetaModel):
|
||||
fields = [self._fields[fname] for fname in fnames]
|
||||
|
||||
for field in fields:
|
||||
if field.compute:
|
||||
if field.compute and field.store:
|
||||
self._recompute_field(field)
|
||||
|
||||
def _recompute_recordset(self, fnames=None):
|
||||
@@ -6359,7 +6359,7 @@ class BaseModel(metaclass=MetaModel):
|
||||
fields = [self._fields[fname] for fname in fnames]
|
||||
|
||||
for field in fields:
|
||||
if field.compute:
|
||||
if field.compute and field.store:
|
||||
self._recompute_field(field, self._ids)
|
||||
|
||||
def _recompute_field(self, field, ids=None):
|
||||
@@ -6371,15 +6371,10 @@ class BaseModel(metaclass=MetaModel):
|
||||
if not ids:
|
||||
return
|
||||
|
||||
records = self.browse(ids)
|
||||
if field.store:
|
||||
# do not force recomputation on new records; those will be
|
||||
# recomputed by accessing the field on the records
|
||||
records = records.filtered('id')
|
||||
field.recompute(records)
|
||||
else:
|
||||
self.env.cache.invalidate([(field, records._ids)])
|
||||
self.env.remove_to_compute(field, records)
|
||||
# do not force recomputation on new records; those will be
|
||||
# recomputed by accessing the field on the records
|
||||
records = self.browse(tuple(id_ for id_ in ids if id_))
|
||||
field.recompute(records)
|
||||
|
||||
#
|
||||
# Generic onchange method
|
||||
|
||||
Reference in New Issue
Block a user