From: Michael Tremer Date: Tue, 23 May 2023 16:10:42 +0000 (+0000) Subject: repos: (Re-)write a repository only once at a time X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3e1e7cb2dfd0c9f000cd93af81e4401aefbf257e;p=pbs.git repos: (Re-)write a repository only once at a time Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/repository.py b/src/buildservice/repository.py index 3ab217d7..de7b4cac 100644 --- a/src/buildservice/repository.py +++ b/src/buildservice/repository.py @@ -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)