From 548a9a05e1f2fd1294a4b3d0e4b6691a85779fdf Mon Sep 17 00:00:00 2001 From: Pavel Raiskup Date: Aug 27 2019 11:15:23 +0000 Subject: frontend: optimize /backend/pending-jobs/ json rendering Make sure that get_build_record() doesn't generate ORM sub-queries, so the whole bunch of builds is loaded by single (joinedload'ed) query. As a part of ^^, also drop the build_config part from the result which generated whole bunch of queries providing data that wasn't used on backend. --- diff --git a/frontend/coprs_frontend/coprs/logic/builds_logic.py b/frontend/coprs_frontend/coprs/logic/builds_logic.py index da980bb..b609193 100644 --- a/frontend/coprs_frontend/coprs/logic/builds_logic.py +++ b/frontend/coprs_frontend/coprs/logic/builds_logic.py @@ -7,6 +7,7 @@ import time import requests from sqlalchemy.sql import text +from sqlalchemy.orm import joinedload from sqlalchemy import or_ from sqlalchemy import and_ from sqlalchemy import func, desc @@ -282,7 +283,12 @@ class BuildsLogic(object): @classmethod def get_pending_build_tasks(cls, background=None): - query = (models.BuildChroot.query.join(models.Build) + query = (models.BuildChroot.query + .outerjoin(models.Build) + .outerjoin(models.CoprDir) + .outerjoin(models.Package, models.Package.id == models.Build.package_id) + .options(joinedload('build').joinedload('copr_dir'), + joinedload('build').joinedload('package')) .filter(models.Build.canceled == false()) .filter(or_( models.BuildChroot.status == StatusEnum("pending"), diff --git a/frontend/coprs_frontend/coprs/views/backend_ns/backend_general.py b/frontend/coprs_frontend/coprs/views/backend_ns/backend_general.py index 0943ef8..c344965 100644 --- a/frontend/coprs_frontend/coprs/views/backend_ns/backend_general.py +++ b/frontend/coprs_frontend/coprs/views/backend_ns/backend_general.py @@ -91,7 +91,6 @@ def get_build_record(task): if not task: return None - build_config = helpers.generate_build_config(task.build.copr, task.mock_chroot.name) build_record = None try: build_record = { @@ -115,11 +114,6 @@ def get_build_record(task): "fetch_sources_only": True, "package_name": task.build.package.name, "package_version": task.build.pkg_version, - "repos": build_config.get("repos"), - "buildroot_pkgs": build_config.get("additional_packages"), - "use_bootstrap_container": build_config.get("use_bootstrap_container"), - "with_opts": build_config.get("with_opts"), - "without_opts": build_config.get("without_opts"), } except Exception as err: