diff options
author | Jenkins <jenkins@review.openstack.org> | 2015-06-15 18:17:40 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2015-06-15 18:17:40 +0000 |
commit | 9d91466bcf1905ff2cc3c355649375ca60ee6de4 (patch) | |
tree | 4c45b8855618b9eac94c52486ecf6396595488b7 | |
parent | 24371846e5eb0c183166fff081b3d903c673c074 (diff) | |
parent | 7aa4b75da9722496c4e166b44cc04973fd441f52 (diff) | |
download | nova-9d91466bcf1905ff2cc3c355649375ca60ee6de4.tar.gz |
Merge "Add an index to virtual_interfaces.uuid"
-rw-r--r-- | nova/db/sqlalchemy/migrate_repo/versions/295_add_virtual_interfaces_uuid_index.py | 54 | ||||
-rw-r--r-- | nova/db/sqlalchemy/models.py | 1 | ||||
-rw-r--r-- | nova/tests/unit/db/test_migrations.py | 12 |
3 files changed, 67 insertions, 0 deletions
diff --git a/nova/db/sqlalchemy/migrate_repo/versions/295_add_virtual_interfaces_uuid_index.py b/nova/db/sqlalchemy/migrate_repo/versions/295_add_virtual_interfaces_uuid_index.py new file mode 100644 index 0000000000..8daf92f338 --- /dev/null +++ b/nova/db/sqlalchemy/migrate_repo/versions/295_add_virtual_interfaces_uuid_index.py @@ -0,0 +1,54 @@ +# 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 oslo_log import log as logging +from sqlalchemy import MetaData, Table, Index + +from nova.i18n import _LI + +LOG = logging.getLogger(__name__) + +INDEX_COLUMNS = ['uuid'] +INDEX_NAME = 'virtual_interfaces_uuid_idx' + + +def _get_table_index(migrate_engine): + meta = MetaData() + meta.bind = migrate_engine + table = Table('virtual_interfaces', meta, autoload=True) + for idx in table.indexes: + if idx.columns.keys() == INDEX_COLUMNS: + break + else: + idx = None + return meta, table, idx + + +def upgrade(migrate_engine): + meta, table, index = _get_table_index(migrate_engine) + if index: + LOG.info(_LI('Skipped adding %s because an equivalent index' + ' already exists.'), INDEX_NAME) + return + columns = [getattr(table.c, col_name) for col_name in INDEX_COLUMNS] + index = Index(INDEX_NAME, *columns) + index.create(migrate_engine) + + +def downgrade(migrate_engine): + meta, table, index = _get_table_index(migrate_engine) + if not index: + LOG.info(_LI('Skipped removing %s because no such index exists'), + INDEX_NAME) + return + index.drop(migrate_engine) diff --git a/nova/db/sqlalchemy/models.py b/nova/db/sqlalchemy/models.py index 2af86554cc..0b671cb628 100644 --- a/nova/db/sqlalchemy/models.py +++ b/nova/db/sqlalchemy/models.py @@ -805,6 +805,7 @@ class VirtualInterface(BASE, NovaBase): name="uniq_virtual_interfaces0address0deleted"), Index('virtual_interfaces_network_id_idx', 'network_id'), Index('virtual_interfaces_instance_uuid_fkey', 'instance_uuid'), + Index('virtual_interfaces_uuid_idx', 'uuid'), ) id = Column(Integer, primary_key=True, nullable=False) address = Column(String(255)) diff --git a/nova/tests/unit/db/test_migrations.py b/nova/tests/unit/db/test_migrations.py index 9cb15467a5..ef06fff75a 100644 --- a/nova/tests/unit/db/test_migrations.py +++ b/nova/tests/unit/db/test_migrations.py @@ -705,6 +705,18 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, self.assertIsInstance(shadow_services.c.last_seen_up.type, sqlalchemy.types.DateTime) + def _pre_upgrade_294(self, engine): + self.assertIndexNotExists(engine, 'virtual_interfaces', + 'virtual_interfaces_uuid_idx') + + def _check_295(self, engine, data): + self.assertIndexMembers(engine, 'virtual_interfaces', + 'virtual_interfaces_uuid_idx', ['uuid']) + + def _post_downgrade_295(self, engine): + self.assertIndexNotExists(engine, 'virtual_interfaces', + 'virtual_interfaces_uuid_idx') + class TestNovaMigrationsSQLite(NovaMigrationsCheckers, test_base.DbTestCase, |