summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-06-15 18:17:40 +0000
committerGerrit Code Review <review@openstack.org>2015-06-15 18:17:40 +0000
commit9d91466bcf1905ff2cc3c355649375ca60ee6de4 (patch)
tree4c45b8855618b9eac94c52486ecf6396595488b7
parent24371846e5eb0c183166fff081b3d903c673c074 (diff)
parent7aa4b75da9722496c4e166b44cc04973fd441f52 (diff)
downloadnova-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.py54
-rw-r--r--nova/db/sqlalchemy/models.py1
-rw-r--r--nova/tests/unit/db/test_migrations.py12
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,