]> git.ipfire.org Git - pbs.git/commitdiff
repos: (Re-)write a repository only once at a time
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 23 May 2023 16:10:42 +0000 (16:10 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 23 May 2023 16:10:42 +0000 (16:10 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/repository.py

index 3ab217d75c9e365635ec18ec6ce0056aa12aee84..de7b4cac6e8c41c2cf08383a10db8883ba371468 100644 (file)
@@ -863,11 +863,23 @@ class Repository(base.DataObject):
 
        # Write repository
 
-       async def write(self, *args, **kwargs):
+       __locks = {}
+
+       @property
+       def __lock(self):
+               try:
+                       lock = self.__locks[self.id]
+               except KeyError:
+                       lock = self.__locks[self.id] = asyncio.Lock()
+
+               return lock
+
+       async def write(self):
                """
                        Called to write/rewrite/update the repository metadata
                """
-               return await asyncio.to_thread(self._write, *args, **kwargs)
+               with self.__lock:
+                       return await asyncio.to_thread(self._write)
 
        def _write(self):
                log.info("Writing repository %s..." % self)