From bf1b6c395da6b5aaa4788e74c7d1f5985a98f1df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Mon, 16 Dec 2024 09:08:43 +0000 Subject: [PATCH] fix editor/mapdaza deadlock during processupdates, halleluja! [hopefully] --- src/c3nav/mapdata/models/update.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/c3nav/mapdata/models/update.py b/src/c3nav/mapdata/models/update.py index 42533bbc..7db1fc37 100644 --- a/src/c3nav/mapdata/models/update.py +++ b/src/c3nav/mapdata/models/update.py @@ -2,7 +2,7 @@ import logging import os import pickle import time -from contextlib import contextmanager, suppress +from contextlib import contextmanager, suppress, nullcontext from functools import cached_property from sqlite3 import DatabaseError @@ -61,13 +61,13 @@ class MapUpdate(models.Model): return last_update @classmethod - def last_processed_update(cls, force=False): + def last_processed_update(cls, force=False, lock=True): if not force: last_processed_update = cache.get('mapdata:last_processed_update', None) if last_processed_update is not None: return last_processed_update try: - with cls.lock(): + with (cls.lock() if lock else nullcontext()): last_processed_update = cls.objects.filter(processed=True).latest().to_tuple cache.set('mapdata:last_processed_update', last_processed_update, None) except cls.DoesNotExist: @@ -214,7 +214,7 @@ class MapUpdate(models.Model): logger.info('%.3f m² of altitude areas affected.' % changed_geometries.area) - last_processed_update = cls.last_processed_update(force=True) + last_processed_update = cls.last_processed_update(force=True, lock=False) for new_update in new_updates: logger.info('Applying changed geometries from MapUpdate #%(id)s (%(type)s)...' %