From 6c7e2749688100a10ac7de1d422b8c4cee98f393 Mon Sep 17 00:00:00 2001 From: Kevin Morris <kevr@0cost.org> Date: Sat, 13 Aug 2022 19:52:50 -0700 Subject: [PATCH] feat(db): add an index for SSHPubKeys.PubKey (#2) Speeds up SSHPubKeys.PubKey searches in a larger database. Fixed form of the original commit which was reverted, 1a7f6e1fa9f500fead3650ef1e4ec9521884e1d8 Signed-off-by: Kevin Morris <kevr@0cost.org> --- aurweb/schema.py | 2 ++ ...d70103d2e82_add_sshpubkeys_pubkey_index.py | 35 +++++++++++++++++++ test/test_migration.py | 23 ++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 migrations/versions/dd70103d2e82_add_sshpubkeys_pubkey_index.py create mode 100644 test/test_migration.py diff --git a/aurweb/schema.py b/aurweb/schema.py index d2644541d..3d8369c94 100644 --- a/aurweb/schema.py +++ b/aurweb/schema.py @@ -87,6 +87,8 @@ SSHPubKeys = Table( Column('UserID', ForeignKey('Users.ID', ondelete='CASCADE'), nullable=False), Column('Fingerprint', String(44), primary_key=True), Column('PubKey', String(4096), nullable=False), + Index('SSHPubKeysUserID', 'UserID'), + Index('SSHPubKeysPubKey', 'PubKey'), mysql_engine='InnoDB', mysql_charset='utf8mb4', mysql_collate='utf8mb4_bin', ) diff --git a/migrations/versions/dd70103d2e82_add_sshpubkeys_pubkey_index.py b/migrations/versions/dd70103d2e82_add_sshpubkeys_pubkey_index.py new file mode 100644 index 000000000..7d3f4b59f --- /dev/null +++ b/migrations/versions/dd70103d2e82_add_sshpubkeys_pubkey_index.py @@ -0,0 +1,35 @@ +"""add SSHPubKeys.PubKey index + +Revision ID: dd70103d2e82 +Revises: d64e5571bc8d +Create Date: 2022-08-12 21:30:26.155465 + +""" +import traceback + +from alembic import op + +# revision identifiers, used by Alembic. +revision = 'dd70103d2e82' +down_revision = 'd64e5571bc8d' +branch_labels = None +depends_on = None + + +def upgrade(): + try: + op.create_index("SSHPubKeysUserID", "SSHPubKeys", ["UserID"]) + except Exception: + traceback.print_exc() + print("failing silently...") + + try: + op.create_index("SSHPubKeysPubKey", "SSHPubKeys", ["PubKey"]) + except Exception: + traceback.print_exc() + print("failing silently...") + + +def downgrade(): + op.drop_index("SSHPubKeysPubKey", "SSHPubKeys") + op.drop_index("SSHPubKeysUserID", "SSHPubKeys") diff --git a/test/test_migration.py b/test/test_migration.py new file mode 100644 index 000000000..cf8702fab --- /dev/null +++ b/test/test_migration.py @@ -0,0 +1,23 @@ +import pytest + +from sqlalchemy import inspect + +from aurweb.db import get_engine +from aurweb.models.ssh_pub_key import SSHPubKey + + +@pytest.fixture(autouse=True) +def setup(db_test): + return + + +def test_sshpubkeys_pubkey_index(): + insp = inspect(get_engine()) + indexes = insp.get_indexes(SSHPubKey.__tablename__) + + found_pk = False + for idx in indexes: + if idx.get("name") == "SSHPubKeysPubKey": + assert idx.get("column_names") == ["PubKey"] + found_pk = True + assert found_pk -- GitLab