Comment 4 for bug 2058377

Revision history for this message
Jacopo Rota (r00ta) wrote :

The issue is here

            resource_sets = self.sets.order_by("-id").annotate(
                files_count=Count("files__id", distinct=True),
                files_size=Sum("files__size"),
                sync_size=Sum("files__bootresourcefilesync__size"),
            )

as the query is FULL OUTER JOINING bootresourcefilesync and the `files_size` are duplicated on multiple rows depending on the number of bootresourcefilesync records.

>>> print(b.sets.order_by("-id").annotate(files_count=Count("files__id", distinct=True),files_size=Sum("files__size"),sync_size=Sum("files__bootresourcefilesync__size"),).query)
SELECT "maasserver_bootresourceset"."id", "maasserver_bootresourceset"."created", "maasserver_bootresourceset"."updated", "maasserver_bootresourceset"."resource_id", "maasserver_bootresourceset"."version", "maasserver_bootresourceset"."label", COUNT(DISTINCT "maasserver_bootresourcefile"."id") AS "files_count", SUM("maasserver_bootresourcefile"."size") AS "files_size", SUM("maasserver_bootresourcefilesync"."size") AS "sync_size" FROM "maasserver_bootresourceset" LEFT OUTER JOIN "maasserver_bootresourcefile" ON ("maasserver_bootresourceset"."id" = "maasserver_bootresourcefile"."resource_set_id") LEFT OUTER JOIN "maasserver_bootresourcefilesync" ON ("maasserver_bootresourcefile"."id" = "maasserver_bootresourcefilesync"."file_id") WHERE "maasserver_bootresourceset"."resource_id" = 6 GROUP BY "maasserver_bootresourceset"."id" ORDER BY "maasserver_bootresourceset"."id" DESC