]> git.ipfire.org Git - pbs.git/commitdiff
builds: Delete builds one step at a time
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 13 Sep 2023 17:43:55 +0000 (17:43 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 13 Sep 2023 17:43:55 +0000 (17:43 +0000)
Creating a lot of sub-tasks caused some SQL statements to be executed
outside its transaction and the connection pool to starve.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/builds.py
src/buildservice/jobs.py

index 3f1b38867f1e8776e103918706a914750ac700a3..ef26c989ba462894d7c47302f41860c9d4522f5b 100644 (file)
@@ -424,9 +424,7 @@ class Build(base.DataObject):
                # Delete all jobs
                async with asyncio.TaskGroup() as tasks:
                        for job in self._jobs:
-                               tasks.create_task(
-                                       job.delete(user=user),
-                               )
+                               await job.delete(user=user)
 
                # Mark as deleted
                self._set_attribute_now("deleted_at")
@@ -1397,11 +1395,8 @@ class Group(base.DataObject):
 
        async def delete(self, user=None):
                # Delete all builds in this group
-               async with asyncio.TaskGroup() as tasks:
-                       for build in self.builds:
-                               tasks.create_task(
-                                       build.delete(user=user),
-                               )
+               for build in self.builds:
+                       await build.delete(user=user)
 
                # Mark as deleted
                self._set_attribute_now("deleted_at")
index 08a6720c1cb28b39a79ca8785778d1b01001aa37..84b240eb412f35725cf309b0dc232b9b0d72e33c 100644 (file)
@@ -745,11 +745,8 @@ class Job(base.DataObject):
                        Deletes a job
                """
                # Delete all binary packages
-               async with asyncio.TaskGroup() as tasks:
-                       for pkg in self.packages:
-                               tasks.create_task(
-                                       pkg.delete(user=user),
-                               )
+               for pkg in self.packages:
+                       await pkg.delete(user=user)
 
                # Mark as deleted
                self._set_attribute_now("deleted_at")