From b9d578d51fdac293f4de6494343224ea87280502 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 12 Feb 2025 17:16:41 +0000 Subject: [PATCH] users: Fix the totally broken disk usage query Signed-off-by: Michael Tremer --- src/buildservice/users.py | 53 +++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/src/buildservice/users.py b/src/buildservice/users.py index 45effed5..53fe4004 100644 --- a/src/buildservice/users.py +++ b/src/buildservice/users.py @@ -718,6 +718,9 @@ class User(database.Base, database.BackendMixin, database.SoftDeleteMixin): """ Returns the total disk usage of this user """ + source_packages = sqlalchemy.orm.aliased(packages.Package) + binary_packages = sqlalchemy.orm.aliased(packages.Package) + # Uploads upload_disk_usage = ( sqlalchemy @@ -734,18 +737,25 @@ class User(database.Base, database.BackendMixin, database.SoftDeleteMixin): source_package_disk_usage = ( sqlalchemy .select( - packages.Package.filesize + source_packages.filesize + ) + .select_from( + builds.Build, + ) + .join( + source_packages, + source_packages.id == builds.Build.pkg_id, ) - .select_from(builds.Build) - .join(builds.Build.pkg) .where( # All objects must exist - packages.Package.deleted_at == None, + source_packages.deleted_at == None, builds.Build.deleted_at == None, - jobs.Job.deleted_at == None, # Don't consider test builds builds.Build.test == False, + + # The build must be owned by the user + builds.Build.owner == self, ) ) @@ -753,14 +763,26 @@ class User(database.Base, database.BackendMixin, database.SoftDeleteMixin): binary_package_disk_usage = ( sqlalchemy .select( - packages.Package.filesize, + binary_packages.filesize, + ) + .select_from( + builds.Build, + ) + .join( + jobs.Job, + jobs.Job.build_id == builds.Build.id, + ) + .join( + jobs.JobPackage, + jobs.JobPackage.job_id == jobs.Job.id, + ) + .join( + binary_packages, + binary_packages.id == jobs.JobPackage.pkg_id, ) - .select_from(builds.Build) - .join(jobs.Job) - #.join(jobs.JobPackages) .where( # All objects must exist - packages.Package.deleted_at == None, + binary_packages.deleted_at == None, builds.Build.deleted_at == None, jobs.Job.deleted_at == None, @@ -778,8 +800,13 @@ class User(database.Base, database.BackendMixin, database.SoftDeleteMixin): .select( jobs.Job.log_size ) - .select_from(builds.Build) - .join(jobs.Job) + .select_from( + builds.Build, + ) + .join( + jobs.Job, + jobs.Job.build_id == builds.Build.id, + ) .where( # All objects must exist builds.Build.deleted_at == None, @@ -816,7 +843,7 @@ class User(database.Base, database.BackendMixin, database.SoftDeleteMixin): ) # Run the query - return await self.db.select_one(stmt, "disk_usage") + return await self.db.select_one(stmt, "disk_usage") or 0 # Stats -- 2.47.3