From 08fe84f4438293b7000d0bcc829a8c66762c7cbc Mon Sep 17 00:00:00 2001 From: Rodolfo Alonso Hernandez Date: Sun, 11 Jun 2023 04:22:38 +0000 Subject: [PATCH] [sqlalchemy-20] Remove redundant indexes from some tables The following tables and columns were defined as primary key and key (index). A column defined as primary key creates an index in the table. The is no need to create a second one. Tables and columns affected: * portdataplanestatuses, port_id * portdnses, port_id * portuplinkstatuspropagation, port_id * qos_policies_default, project_id * quotausages, resource * quotausages, project_id * subnet_dns_publish_fixed_ips, subnet_id * segmenthostmappings, segment_id * segmenthostmappings, host * networkdnsdomains, network_id * floatingipdnses, floatingip_id Closes-Bug: #2024044 Change-Id: I271c109a597eb0aa088a7a9c785e8631bfaa01d7 --- .../0aefee21cd87_remove_dedundant_indexes.py | 65 +++++++++++++++++++ .../alembic_migrations/versions/EXPAND_HEAD | 2 +- .../expand/45f955889773_quota_usage.py | 2 +- ...tes_to_support_external_dns_integration.py | 15 ++--- .../8fd3918ef6f4_add_segment_host_mapping.py | 5 +- ...a84ccf28f06a_migrate_dns_name_from_port.py | 2 +- ...81cb6192_add_qos_policies_default_table.py | 1 - ...a3c76314c_add_data_plane_status_to_port.py | 2 +- ...f41_add_propagate_uplink_status_to_port.py | 2 +- ...655_add_dns_publish_fixed_ip_to_subnets.py | 3 +- neutron/db/models/data_plane_status.py | 2 +- neutron/db/models/dns.py | 12 ++-- neutron/db/models/segment.py | 2 - .../db/models/uplink_status_propagation.py | 2 +- neutron/db/qos/models.py | 2 +- neutron/db/quota/models.py | 4 +- 16 files changed, 88 insertions(+), 35 deletions(-) create mode 100644 neutron/db/migration/alembic_migrations/versions/2023.2/expand/0aefee21cd87_remove_dedundant_indexes.py diff --git a/neutron/db/migration/alembic_migrations/versions/2023.2/expand/0aefee21cd87_remove_dedundant_indexes.py b/neutron/db/migration/alembic_migrations/versions/2023.2/expand/0aefee21cd87_remove_dedundant_indexes.py new file mode 100644 index 00000000000..95f6060e69b --- /dev/null +++ b/neutron/db/migration/alembic_migrations/versions/2023.2/expand/0aefee21cd87_remove_dedundant_indexes.py @@ -0,0 +1,65 @@ +# Copyright 2023 OpenStack Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# + +from alembic import op +import sqlalchemy as sa + + +"""Remove dedundant indexes + +Revision ID: 0aefee21cd87 +Revises: 682c319773d7 +Create Date: 2023-06-11 04:04:28.536800 + +""" + +# revision identifiers, used by Alembic. +revision = '0aefee21cd87' +down_revision = '682c319773d7' + + +TABLES_AND_COLUMNS = ( + ('portdataplanestatuses', 'port_id'), + ('portdnses', 'port_id'), + ('portuplinkstatuspropagation', 'port_id'), + ('qos_policies_default', 'project_id'), + ('quotausages', 'resource'), + ('quotausages', 'project_id'), + ('subnet_dns_publish_fixed_ips', 'subnet_id'), + ('segmenthostmappings', 'segment_id'), + ('segmenthostmappings', 'host'), + ('networkdnsdomains', 'network_id'), + ('floatingipdnses', 'floatingip_id') +) + + +def upgrade(): + inspector = sa.inspect(op.get_bind()) + for table, column in TABLES_AND_COLUMNS: + for index in inspector.get_indexes(table): + if index['column_names'] == [column]: + op.drop_index(index_name=op.f(index['name']), table_name=table) + + +def expand_drop_exceptions(): + """Drop the redundant indexes + + This migration will remove the indexes from those columns that are primary + keys. A primary key creates an index in the table; this second index is + redundant. + """ + return { + sa.Index: list({val[0] for val in TABLES_AND_COLUMNS}), + } diff --git a/neutron/db/migration/alembic_migrations/versions/EXPAND_HEAD b/neutron/db/migration/alembic_migrations/versions/EXPAND_HEAD index bebfb9acc33..c35e1cafb9e 100644 --- a/neutron/db/migration/alembic_migrations/versions/EXPAND_HEAD +++ b/neutron/db/migration/alembic_migrations/versions/EXPAND_HEAD @@ -1 +1 @@ -682c319773d7 +0aefee21cd87 diff --git a/neutron/db/migration/alembic_migrations/versions/liberty/expand/45f955889773_quota_usage.py b/neutron/db/migration/alembic_migrations/versions/liberty/expand/45f955889773_quota_usage.py index 349353bb52c..98a9048a8d8 100644 --- a/neutron/db/migration/alembic_migrations/versions/liberty/expand/45f955889773_quota_usage.py +++ b/neutron/db/migration/alembic_migrations/versions/liberty/expand/45f955889773_quota_usage.py @@ -36,7 +36,7 @@ def upgrade(): sa.Column('tenant_id', sa.String(length=255), nullable=False, primary_key=True, index=True), sa.Column('resource', sa.String(length=255), - nullable=False, primary_key=True, index=True), + nullable=False, primary_key=True), sa.Column('dirty', sa.Boolean(), nullable=False, server_default=sql.false()), sa.Column('in_use', sa.Integer(), nullable=False, diff --git a/neutron/db/migration/alembic_migrations/versions/mitaka/expand/659bf3d90664_add_attributes_to_support_external_dns_integration.py b/neutron/db/migration/alembic_migrations/versions/mitaka/expand/659bf3d90664_add_attributes_to_support_external_dns_integration.py index 8565fbc4947..efcbcc54b1c 100644 --- a/neutron/db/migration/alembic_migrations/versions/mitaka/expand/659bf3d90664_add_attributes_to_support_external_dns_integration.py +++ b/neutron/db/migration/alembic_migrations/versions/mitaka/expand/659bf3d90664_add_attributes_to_support_external_dns_integration.py @@ -35,20 +35,19 @@ def upgrade(): sa.Column('network_id', sa.String(length=36), nullable=False, - index=True), + primary_key=True), sa.Column('dns_domain', sa.String( length=constants.FQDN_FIELD_SIZE), nullable=False), sa.ForeignKeyConstraint(['network_id'], ['networks.id'], - ondelete='CASCADE'), - sa.PrimaryKeyConstraint('network_id')) + ondelete='CASCADE')) op.create_table('floatingipdnses', sa.Column('floatingip_id', sa.String(length=36), nullable=False, - index=True), + primary_key=True), sa.Column('dns_name', sa.String( length=constants.FQDN_FIELD_SIZE), nullable=False), @@ -63,14 +62,13 @@ def upgrade(): nullable=False), sa.ForeignKeyConstraint(['floatingip_id'], ['floatingips.id'], - ondelete='CASCADE'), - sa.PrimaryKeyConstraint('floatingip_id')) + ondelete='CASCADE')) op.create_table('portdnses', sa.Column('port_id', sa.String(length=36), nullable=False, - index=True), + primary_key=True), sa.Column('current_dns_name', sa.String(length=constants.FQDN_FIELD_SIZE), nullable=False), @@ -85,5 +83,4 @@ def upgrade(): nullable=False), sa.ForeignKeyConstraint(['port_id'], ['ports.id'], - ondelete='CASCADE'), - sa.PrimaryKeyConstraint('port_id')) + ondelete='CASCADE')) diff --git a/neutron/db/migration/alembic_migrations/versions/newton/contract/8fd3918ef6f4_add_segment_host_mapping.py b/neutron/db/migration/alembic_migrations/versions/newton/contract/8fd3918ef6f4_add_segment_host_mapping.py index 33d862b9216..51f812b22cd 100644 --- a/neutron/db/migration/alembic_migrations/versions/newton/contract/8fd3918ef6f4_add_segment_host_mapping.py +++ b/neutron/db/migration/alembic_migrations/versions/newton/contract/8fd3918ef6f4_add_segment_host_mapping.py @@ -33,13 +33,12 @@ def upgrade(): op.create_table('segmenthostmappings', sa.Column('segment_id', sa.String(length=36), - index=True, + primary_key=True, nullable=False), sa.Column('host', sa.String(255), - index=True, + primary_key=True, nullable=False), - sa.PrimaryKeyConstraint('segment_id', 'host'), sa.ForeignKeyConstraint(['segment_id'], ['networksegments.id'], ondelete='CASCADE')) diff --git a/neutron/db/migration/alembic_migrations/versions/newton/contract/a84ccf28f06a_migrate_dns_name_from_port.py b/neutron/db/migration/alembic_migrations/versions/newton/contract/a84ccf28f06a_migrate_dns_name_from_port.py index 311f27cc72e..39b16697bba 100644 --- a/neutron/db/migration/alembic_migrations/versions/newton/contract/a84ccf28f06a_migrate_dns_name_from_port.py +++ b/neutron/db/migration/alembic_migrations/versions/newton/contract/a84ccf28f06a_migrate_dns_name_from_port.py @@ -36,7 +36,7 @@ portdnses = sa.Table('portdnses', sa.MetaData(), sa.Column('port_id', sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), - primary_key=True, index=True), + primary_key=True), sa.Column('dns_name', sa.String(length=255), nullable=False), diff --git a/neutron/db/migration/alembic_migrations/versions/pike/expand/62c781cb6192_add_qos_policies_default_table.py b/neutron/db/migration/alembic_migrations/versions/pike/expand/62c781cb6192_add_qos_policies_default_table.py index 65d3500f797..6264fdd186b 100644 --- a/neutron/db/migration/alembic_migrations/versions/pike/expand/62c781cb6192_add_qos_policies_default_table.py +++ b/neutron/db/migration/alembic_migrations/versions/pike/expand/62c781cb6192_add_qos_policies_default_table.py @@ -39,6 +39,5 @@ def upgrade(): sa.Column('project_id', sa.String(length=255), nullable=False, - index=True, primary_key=True), ) diff --git a/neutron/db/migration/alembic_migrations/versions/pike/expand/804a3c76314c_add_data_plane_status_to_port.py b/neutron/db/migration/alembic_migrations/versions/pike/expand/804a3c76314c_add_data_plane_status_to_port.py index 0a1804ed757..487114f8198 100644 --- a/neutron/db/migration/alembic_migrations/versions/pike/expand/804a3c76314c_add_data_plane_status_to_port.py +++ b/neutron/db/migration/alembic_migrations/versions/pike/expand/804a3c76314c_add_data_plane_status_to_port.py @@ -34,6 +34,6 @@ def upgrade(): sa.Column('port_id', sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), - primary_key=True, index=True), + primary_key=True), sa.Column('data_plane_status', sa.String(length=16), nullable=True)) diff --git a/neutron/db/migration/alembic_migrations/versions/stein/expand/cada2437bf41_add_propagate_uplink_status_to_port.py b/neutron/db/migration/alembic_migrations/versions/stein/expand/cada2437bf41_add_propagate_uplink_status_to_port.py index 9aa40662726..1811756566a 100644 --- a/neutron/db/migration/alembic_migrations/versions/stein/expand/cada2437bf41_add_propagate_uplink_status_to_port.py +++ b/neutron/db/migration/alembic_migrations/versions/stein/expand/cada2437bf41_add_propagate_uplink_status_to_port.py @@ -35,7 +35,7 @@ def upgrade(): sa.Column('port_id', sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), - primary_key=True, index=True), + primary_key=True), sa.Column('propagate_uplink_status', sa.Boolean(), nullable=False, server_default=sa.sql.false())) diff --git a/neutron/db/migration/alembic_migrations/versions/ussuri/expand/263d454a9655_add_dns_publish_fixed_ip_to_subnets.py b/neutron/db/migration/alembic_migrations/versions/ussuri/expand/263d454a9655_add_dns_publish_fixed_ip_to_subnets.py index ea3f783d8b1..5d0aecdb3e0 100644 --- a/neutron/db/migration/alembic_migrations/versions/ussuri/expand/263d454a9655_add_dns_publish_fixed_ip_to_subnets.py +++ b/neutron/db/migration/alembic_migrations/versions/ussuri/expand/263d454a9655_add_dns_publish_fixed_ip_to_subnets.py @@ -34,8 +34,7 @@ def upgrade(): op.create_table('subnet_dns_publish_fixed_ips', sa.Column('subnet_id', sa.String(length=db_const.UUID_FIELD_SIZE), - nullable=False, - index=True), + nullable=False), sa.Column('dns_publish_fixed_ip', sa.Boolean(), nullable=False, diff --git a/neutron/db/models/data_plane_status.py b/neutron/db/models/data_plane_status.py index ada10af557a..cdff4c636b4 100644 --- a/neutron/db/models/data_plane_status.py +++ b/neutron/db/models/data_plane_status.py @@ -24,7 +24,7 @@ class PortDataPlaneStatus(model_base.BASEV2): port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), - primary_key=True, index=True) + primary_key=True) data_plane_status = sa.Column(sa.String(16), nullable=True) port = orm.relationship( models_v2.Port, load_on_pending=True, diff --git a/neutron/db/models/dns.py b/neutron/db/models/dns.py index 6c7109ec41e..1bc95835deb 100644 --- a/neutron/db/models/dns.py +++ b/neutron/db/models/dns.py @@ -24,8 +24,7 @@ from neutron.db import models_v2 class NetworkDNSDomain(model_base.BASEV2): network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete="CASCADE"), - primary_key=True, - index=True) + primary_key=True) dns_domain = sa.Column(sa.String(255), nullable=False) @@ -47,8 +46,7 @@ class FloatingIPDNS(model_base.BASEV2): floatingip_id = sa.Column(sa.String(36), sa.ForeignKey('floatingips.id', ondelete="CASCADE"), - primary_key=True, - index=True) + primary_key=True) dns_name = sa.Column(sa.String(255), nullable=False) dns_domain = sa.Column(sa.String(255), @@ -76,8 +74,7 @@ class PortDNS(model_base.BASEV2): port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), - primary_key=True, - index=True) + primary_key=True) current_dns_name = sa.Column(sa.String(255), nullable=False) current_dns_domain = sa.Column(sa.String(255), @@ -106,8 +103,7 @@ class SubnetDNSPublishFixedIP(model_base.BASEV2): subnet_id = sa.Column(sa.String(constants.UUID_FIELD_SIZE), sa.ForeignKey('subnets.id', ondelete="CASCADE"), - primary_key=True, - index=True) + primary_key=True) dns_publish_fixed_ip = sa.Column(sa.Boolean(), nullable=False, server_default=sql.false()) diff --git a/neutron/db/models/segment.py b/neutron/db/models/segment.py index bb4139a879c..8855d341391 100644 --- a/neutron/db/models/segment.py +++ b/neutron/db/models/segment.py @@ -71,11 +71,9 @@ class SegmentHostMapping(model_base.BASEV2): sa.ForeignKey('networksegments.id', ondelete="CASCADE"), primary_key=True, - index=True, nullable=False) host = sa.Column(sa.String(255), primary_key=True, - index=True, nullable=False) # Add a relationship to the NetworkSegment model in order to instruct diff --git a/neutron/db/models/uplink_status_propagation.py b/neutron/db/models/uplink_status_propagation.py index 5ffe9b4b91b..a0dd267b033 100644 --- a/neutron/db/models/uplink_status_propagation.py +++ b/neutron/db/models/uplink_status_propagation.py @@ -22,7 +22,7 @@ class PortUplinkStatusPropagation(model_base.BASEV2): port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), - primary_key=True, index=True) + primary_key=True) propagate_uplink_status = sa.Column(sa.Boolean(), nullable=False, server_default=sa.sql.true()) port = orm.relationship( diff --git a/neutron/db/qos/models.py b/neutron/db/qos/models.py index 73233e15f3f..8668463a207 100644 --- a/neutron/db/qos/models.py +++ b/neutron/db/qos/models.py @@ -132,7 +132,7 @@ class QosPortPolicyBinding(model_base.BASEV2): class QosPolicyDefault(model_base.BASEV2, - model_base.HasProjectPrimaryKeyIndex): + model_base.HasProjectPrimaryKey): __tablename__ = 'qos_policies_default' qos_policy_id = sa.Column(sa.String(36), sa.ForeignKey('qos_policies.id', diff --git a/neutron/db/quota/models.py b/neutron/db/quota/models.py index c1343b56d0c..ad5459b977b 100644 --- a/neutron/db/quota/models.py +++ b/neutron/db/quota/models.py @@ -54,11 +54,11 @@ class Quota(model_base.BASEV2, model_base.HasId, model_base.HasProject): model_base.BASEV2.__table_args__) -class QuotaUsage(model_base.BASEV2, model_base.HasProjectPrimaryKeyIndex): +class QuotaUsage(model_base.BASEV2, model_base.HasProjectPrimaryKey): """Represents the current usage for a given resource.""" resource = sa.Column(sa.String(255), nullable=False, - primary_key=True, index=True) + primary_key=True) dirty = sa.Column(sa.Boolean, nullable=False, server_default=sql.false()) in_use = sa.Column(sa.Integer, nullable=False,