From 2e61af81bbd08311ff0e9397eefd6e355fcc192d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Wed, 27 Nov 2024 10:32:26 +0100 Subject: [PATCH] Fill ModelStorage caches only for records no further away then the read size The read size is the size limit of the cache so filling it for record further away will discard existing value closest. --- trytond/trytond/model/modelstorage.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/trytond/trytond/model/modelstorage.py b/trytond/trytond/model/modelstorage.py index ce2ccd2912..113715c6d6 100644 --- a/trytond/trytond/model/modelstorage.py +++ b/trytond/trytond/model/modelstorage.py @@ -1773,9 +1773,8 @@ class ModelStorage(Model): self._cache.size_limit, self._local_cache.size_limit, self._transaction.database.IN_MAX)) index = self._ids.index(self.id) - ids = chain(islice(self._ids, index, None), - islice(self._ids, 0, max(index - 1, 0))) - ids = islice(unique(filter(filter_, ids)), read_size) + ids = islice(self._ids, index, index + read_size) + ids = unique(filter(filter_, ids)) kwargs_cache = {} pysoned_ctx = {} @@ -1849,9 +1848,7 @@ class ModelStorage(Model): and ffields.keys() <= set(self._cache[self.id]._keys())): # Use values from cache read_data = [] - for id_ in islice(chain(islice(self._ids, index, None), - islice(self._ids, 0, max(index - 1, 0))), - read_size): + for id_ in islice(self._ids, index, index + read_size): if id_ in self._cache: data = {'id': id_} for fname in ffields: