Skip to content

Commit 398caeb

Browse files
authored
Merge pull request #183 from netzkolchose/transaction_pressure
reduce transaction pressure
2 parents 1558d30 + 2393cc9 commit 398caeb

File tree

1 file changed

+13
-10
lines changed

1 file changed

+13
-10
lines changed

computedfields/resolver.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -476,17 +476,20 @@ def update_dependent(
476476
if updates:
477477
if not _is_recursive:
478478
resolver_start.send(sender=self)
479-
with transaction.atomic(): # FIXME: place transaction only once in tree descent
480-
pks_updated: Dict[Type[Model], Set[Any]] = {}
479+
with transaction.atomic():
480+
pks_updated: Dict[Type[Model], Set[Any]] = {}
481+
for queryset, fields in updates:
482+
_pks = self.bulk_updater(queryset, fields, return_pks=True, querysize=querysize)
483+
if _pks:
484+
pks_updated[queryset.model] = _pks
485+
if old:
486+
for model2, data in old.items():
487+
pks, fields = data
488+
queryset = model2.objects.filter(pk__in=pks-pks_updated.get(model2, set()))
489+
self.bulk_updater(queryset, fields, querysize=querysize)
490+
else:
481491
for queryset, fields in updates:
482-
_pks = self.bulk_updater(queryset, fields, return_pks=True, querysize=querysize)
483-
if _pks:
484-
pks_updated[queryset.model] = _pks
485-
if old:
486-
for model2, data in old.items():
487-
pks, fields = data
488-
queryset = model2.objects.filter(pk__in=pks-pks_updated.get(model2, set()))
489-
self.bulk_updater(queryset, fields, querysize=querysize)
492+
self.bulk_updater(queryset, fields, return_pks=False, querysize=querysize)
490493
if not _is_recursive:
491494
resolver_exit.send(sender=self)
492495

0 commit comments

Comments
 (0)