From 6c860af2588474dc110668d290995fa31d802d13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Kadl=C4=8D=C3=ADk?= Date: Tue, 27 Sep 2016 14:51:18 +0200 Subject: [PATCH] [frontend] speed up querying for recent builds --- ...ffd_add_index_to_build_chroot_ended_on_.py | 26 +++++++++++++++++++ .../coprs/logic/builds_logic.py | 9 ++++--- frontend/coprs_frontend/coprs/models.py | 2 +- 3 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 frontend/coprs_frontend/alembic/versions/3a9905ed8ffd_add_index_to_build_chroot_ended_on_.py diff --git a/frontend/coprs_frontend/alembic/versions/3a9905ed8ffd_add_index_to_build_chroot_ended_on_.py b/frontend/coprs_frontend/alembic/versions/3a9905ed8ffd_add_index_to_build_chroot_ended_on_.py new file mode 100644 index 000000000..9da39a932 --- /dev/null +++ b/frontend/coprs_frontend/alembic/versions/3a9905ed8ffd_add_index_to_build_chroot_ended_on_.py @@ -0,0 +1,26 @@ +"""add index to build_chroot.ended_on column + +Revision ID: 3a9905ed8ffd +Revises: 3341bf554454 +Create Date: 2016-09-27 11:57:50.075139 + +""" + +# revision identifiers, used by Alembic. +revision = '3a9905ed8ffd' +down_revision = '3341bf554454' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + ### commands auto generated by Alembic - please adjust! ### + op.create_index(op.f('ix_build_chroot_ended_on'), 'build_chroot', ['ended_on'], unique=False) + ### end Alembic commands ### + + +def downgrade(): + ### commands auto generated by Alembic - please adjust! ### + op.drop_index('ix_build_chroot_ended_on', table_name='build_chroot') + ### end Alembic commands ### diff --git a/frontend/coprs_frontend/coprs/logic/builds_logic.py b/frontend/coprs_frontend/coprs/logic/builds_logic.py index 8d1d27a71..c6338bf02 100644 --- a/frontend/coprs_frontend/coprs/logic/builds_logic.py +++ b/frontend/coprs_frontend/coprs/logic/builds_logic.py @@ -57,9 +57,12 @@ def get_recent_tasks(cls, user=None, limit=None): if not limit: limit = 100 - query = models.Build.query \ - .join(models.BuildChroot).filter(models.BuildChroot.ended_on.isnot(None)) \ - .order_by(models.BuildChroot.ended_on.desc()) + query = models.Build.query.join( + models.BuildChroot.query\ + .filter(models.BuildChroot.ended_on.isnot(None))\ + .order_by(models.BuildChroot.ended_on.desc())\ + .limit(limit).subquery() + ) if user is not None: query = query.filter(models.Build.user_id == user.id) diff --git a/frontend/coprs_frontend/coprs/models.py b/frontend/coprs_frontend/coprs/models.py index 772d347d9..af888c4fb 100644 --- a/frontend/coprs_frontend/coprs/models.py +++ b/frontend/coprs_frontend/coprs/models.py @@ -885,7 +885,7 @@ class BuildChroot(db.Model, helpers.Serializer): status = db.Column(db.Integer, default=StatusEnum("importing")) started_on = db.Column(db.Integer) - ended_on = db.Column(db.Integer) + ended_on = db.Column(db.Integer, index=True) last_deferred = db.Column(db.Integer)