Add index(updated_at) on migrations table.

A database index will be added on migrations.updated_at to
improve the performance of filtering migrations by
‘changes-since’ parameter.

Change-Id: I6bf9e498597669c8641f78267d7da589d01ad786
Implement: blueprint add-pagination-and-change-since-for-migration-list
This commit is contained in:
Yikun Jiang 2018-01-04 19:10:09 +08:00 committed by Matt Riedemann
parent 92a0fc0b9f
commit c012c86fee
3 changed files with 51 additions and 0 deletions

View File

@ -0,0 +1,46 @@
# Copyright 2017 Huawei Technologies Co.,LTD.
#
# 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
LOG = logging.getLogger(__name__)
INDEX_COLUMNS = ['updated_at']
INDEX_NAME = 'migrations_updated_at_idx'
TABLE_NAME = 'migrations'
def _get_table_index(migrate_engine):
meta = MetaData()
meta.bind = migrate_engine
table = Table(TABLE_NAME, meta, autoload=True)
for idx in table.indexes:
if idx.columns.keys() == INDEX_COLUMNS:
break
else:
idx = None
return table, idx
def upgrade(migrate_engine):
table, index = _get_table_index(migrate_engine)
if index:
LOG.info('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)

View File

@ -761,6 +761,7 @@ class Migration(BASE, NovaBase, models.SoftDeleteMixin):
'source_compute', 'dest_compute', 'source_node', 'dest_node',
'status'),
Index('migrations_uuid', 'uuid', unique=True),
Index('migrations_updated_at_idx', 'updated_at'),
)
id = Column(Integer, primary_key=True, nullable=False)
# NOTE(tr3buchet): the ____compute variables are instance['host']

View File

@ -987,6 +987,10 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync,
'console_auth_tokens_token_hash_instance_uuid_idx',
['token_hash', 'instance_uuid'])
def _check_377(self, engine, data):
self.assertIndexMembers(engine, 'migrations',
'migrations_updated_at_idx', ['updated_at'])
class TestNovaMigrationsSQLite(NovaMigrationsCheckers,
test_base.DbTestCase,