Add an index on aggregate_metadata.value

We need this for the subsequent request_filter, which will do queries
based only on metadata value.

Related to blueprint placement-req-filter

Change-Id: I1325a226823329384edd7197e5d5f2725dc16e8f
This commit is contained in:
Dan Smith 2018-03-23 09:31:33 -07:00
parent a9e7581f00
commit f6ea6e67e5
3 changed files with 50 additions and 0 deletions

View File

@ -0,0 +1,44 @@
# 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 = ['value']
INDEX_NAME = 'aggregate_metadata_value_idx'
TABLE_NAME = 'aggregate_metadata'
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

@ -1132,6 +1132,7 @@ class AggregateMetadata(BASE, NovaBase, models.SoftDeleteMixin):
name="uniq_aggregate_metadata0aggregate_id0key0deleted"
),
Index('aggregate_metadata_key_idx', 'key'),
Index('aggregate_metadata_value_idx', 'value'),
)
id = Column(Integer, primary_key=True)
key = Column(String(255), nullable=False)

View File

@ -999,6 +999,11 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync,
'instance_actions_instance_uuid_updated_at_idx',
['instance_uuid', 'updated_at'])
def _check_389(self, engine, data):
self.assertIndexMembers(engine, 'aggregate_metadata',
'aggregate_metadata_value_idx',
['value'])
class TestNovaMigrationsSQLite(NovaMigrationsCheckers,
test_base.DbTestCase,