]> git.ipfire.org Git - pbs.git/commitdiff
uploads: Make deleting uploads async
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 15 Jul 2022 10:26:13 +0000 (10:26 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 15 Jul 2022 10:26:13 +0000 (10:26 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/__init__.py
src/buildservice/uploads.py
src/hub/builds.py

index 4362fd9a1f53630d433a7ff1da29c8e6580abc3e..496f1b0b1e4ff1907b24a332fb2e4e91da2404ed 100644 (file)
@@ -235,6 +235,17 @@ class Backend(object):
                # Copy data without any metadata
                await asyncio.to_thread(shutil.copyfile, src, dst)
 
+       async def unlink(self, path):
+               """
+                       Unlinks path
+               """
+               log.debug("Unlinking %s" % path)
+
+               try:
+                       await asycio.to_thread(os.unlink, path)
+               except OSError as e:
+                       pass
+
        def _write_tempfile(self, content):
                """
                        Writes the content to a temporary file and returns its path
index 3d6cbd4907fe8345a177929ae1bb38735bd8c389..64c1eef77c5a0f1483155b2fdd931b1bf0e50fb5 100644 (file)
@@ -78,7 +78,7 @@ class Uploads(base.Object):
                # Return the newly created upload object
                return upload
 
-       def cleanup(self):
+       async def cleanup(self):
                # Find all expired uploads
                uploads = self._get_uploads("""
                        SELECT
@@ -93,7 +93,8 @@ class Uploads(base.Object):
 
                # Delete them all
                for upload in uploads:
-                       upload.delete()
+                       with self.db.transaction():
+                               await upload.delete()
 
 
 class Upload(base.DataObject):
@@ -140,14 +141,11 @@ class Upload(base.DataObject):
 
        user = lazy_property(get_user, set_user)
 
-       def delete(self):
+       async def delete(self):
                log.info("Deleting upload %s (%s)" % (self, self.path))
 
                # Remove the uploaded data
-               try:
-                       os.unlink(self.path)
-               except OSError:
-                       pass
+               await self.backend.unlink(self.path)
 
                # Delete the upload from the database
                self.db.execute("DELETE FROM uploads WHERE id = %s", self.id)
index 4d87ba8f75564f32760077a7f765eaaaec8a98ad..8340c83798d34a4d8234bf4e8ce72100c7f184b2 100644 (file)
@@ -59,7 +59,7 @@ class CreateHandler(BaseHandler):
                        build = self.backend.builds.create(repo, package)
 
                        # Delete the upload
-                       upload.delete()
+                       await upload.delete()
 
                # Send some data about the build
                self.finish({