From 3e1e7cb2dfd0c9f000cd93af81e4401aefbf257e Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 23 May 2023 16:10:42 +0000 Subject: [PATCH] repos: (Re-)write a repository only once at a time Signed-off-by: Michael Tremer --- src/buildservice/repository.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) 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) -- 2.47.2