From e2e846f74b057f5f3ed72312b0b0ccf6ef97add2 Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Fri, 17 Apr 2015 15:07:13 -0400 Subject: [PATCH] remove downgrade support from our database migrations The TC approved a cross project spec to stop putting db downgrade into project migration repos: https://github.com/openstack/openstack-specs/blob/master/specs/no-downward-sql-migration.rst This was done after quite a bit of feedback from the operator community, and everyone was good with it. This implements that spec for Nova, adjust the tests to pass accordingly, and changes the test which requires downgrade functions to one that prohibits them. Implements bp nova-no-downward-sql-migration Change-Id: I9b164b748998530d62bbc6baf356a9c3f61584cc --- .../migrate_repo/versions/216_havana.py | 4 - .../migrate_repo/versions/217_placeholder.py | 4 - .../migrate_repo/versions/218_placeholder.py | 4 - .../migrate_repo/versions/219_placeholder.py | 4 - .../migrate_repo/versions/220_placeholder.py | 4 - .../migrate_repo/versions/221_placeholder.py | 4 - .../migrate_repo/versions/222_placeholder.py | 4 - .../migrate_repo/versions/223_placeholder.py | 4 - .../migrate_repo/versions/224_placeholder.py | 4 - .../migrate_repo/versions/225_placeholder.py | 4 - .../migrate_repo/versions/226_placeholder.py | 4 - ...fix_project_user_quotas_resource_length.py | 6 - .../228_add_metrics_in_compute_nodes.py | 12 - ...29_add_extra_resources_in_compute_nodes.py | 12 - ...tails_column_to_instance_actions_events.py | 10 - .../versions/231_add_ephemeral_key_uuid.py | 10 - .../versions/232_drop_dump_tables.py | 4 - .../233_add_stats_in_compute_nodes.py | 55 ----- .../234_add_expire_reservations_index.py | 14 -- .../migrate_repo/versions/235_placeholder.py | 4 - .../migrate_repo/versions/236_placeholder.py | 4 - .../migrate_repo/versions/237_placeholder.py | 4 - .../migrate_repo/versions/238_placeholder.py | 4 - .../migrate_repo/versions/239_placeholder.py | 4 - .../migrate_repo/versions/240_placeholder.py | 4 - .../migrate_repo/versions/241_placeholder.py | 4 - .../migrate_repo/versions/242_placeholder.py | 4 - .../migrate_repo/versions/243_placeholder.py | 4 - ...rease_user_id_length_volume_usage_cache.py | 7 - .../versions/245_add_mtu_and_dhcp_server.py | 37 --- .../versions/246_add_compute_node_id_fk.py | 11 - .../versions/247_nullable_mismatch.py | 13 - .../248_add_expire_reservations_index.py | 14 -- .../versions/249_remove_duplicate_index.py | 5 - .../250_remove_instance_groups_metadata.py | 42 +--- .../251_add_numa_topology_to_comput_nodes.py | 11 - .../versions/252_add_instance_extra_table.py | 11 - ...dd_pci_requests_to_instance_extra_table.py | 10 - .../254_add_request_id_in_pci_devices.py | 14 -- .../migrate_repo/versions/255_placeholder.py | 4 - .../migrate_repo/versions/256_placeholder.py | 4 - .../migrate_repo/versions/257_placeholder.py | 4 - .../migrate_repo/versions/258_placeholder.py | 4 - .../migrate_repo/versions/259_placeholder.py | 4 - .../migrate_repo/versions/260_placeholder.py | 4 - .../migrate_repo/versions/261_placeholder.py | 4 - .../migrate_repo/versions/262_placeholder.py | 4 - .../migrate_repo/versions/263_placeholder.py | 4 - .../migrate_repo/versions/264_placeholder.py | 4 - .../versions/265_remove_duplicated_index.py | 5 - .../versions/266_add_instance_tags.py | 7 - .../267_instance_uuid_non_nullable.py | 12 - .../versions/268_add_host_in_compute_node.py | 16 -- .../versions/269_add_numa_node_column.py | 13 - .../versions/270_flavor_data_in_extra.py | 10 - .../versions/271_sqlite_postgresql_indexes.py | 19 -- .../versions/272_add_keypair_type.py | 4 - .../versions/273_sqlite_foreign_keys.py | 7 - .../274_update_instances_project_id_index.py | 21 -- .../versions/275_add_keypair_type.py | 16 -- .../migrate_repo/versions/276_vcpu_model.py | 10 - .../277_add_fixed_ip_updated_index.py | 9 - .../278_remove_service_fk_in_compute_nodes.py | 37 --- ..._fix_unique_constraint_for_compute_node.py | 16 -- ...280_add_nullable_false_to_keypairs_name.py | 18 -- .../migrate_repo/versions/281_placeholder.py | 4 - .../migrate_repo/versions/282_placeholder.py | 4 - .../migrate_repo/versions/283_placeholder.py | 4 - .../migrate_repo/versions/284_placeholder.py | 4 - .../migrate_repo/versions/285_placeholder.py | 4 - .../migrate_repo/versions/286_placeholder.py | 4 - .../migrate_repo/versions/287_placeholder.py | 4 - .../migrate_repo/versions/288_placeholder.py | 4 - .../migrate_repo/versions/289_placeholder.py | 4 - .../migrate_repo/versions/290_placeholder.py | 4 - nova/tests/unit/db/test_migrations.py | 229 +----------------- 76 files changed, 10 insertions(+), 897 deletions(-) diff --git a/nova/db/sqlalchemy/migrate_repo/versions/216_havana.py b/nova/db/sqlalchemy/migrate_repo/versions/216_havana.py index d3992d88d3..1ddc7167ad 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/216_havana.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/216_havana.py @@ -1551,7 +1551,3 @@ def upgrade(migrate_engine): _populate_instance_types(instance_types) _create_dump_tables(migrate_engine) - - -def downgrade(migrate_engine): - raise NotImplementedError('Downgrade from Havana is unsupported.') diff --git a/nova/db/sqlalchemy/migrate_repo/versions/217_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/217_placeholder.py index b1a618ef0e..64e3b1c53d 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/217_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/217_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/218_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/218_placeholder.py index b1a618ef0e..64e3b1c53d 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/218_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/218_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/219_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/219_placeholder.py index b1a618ef0e..64e3b1c53d 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/219_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/219_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/220_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/220_placeholder.py index b1a618ef0e..64e3b1c53d 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/220_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/220_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/221_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/221_placeholder.py index b1a618ef0e..64e3b1c53d 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/221_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/221_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/222_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/222_placeholder.py index b1a618ef0e..64e3b1c53d 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/222_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/222_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/223_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/223_placeholder.py index b1a618ef0e..64e3b1c53d 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/223_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/223_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/224_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/224_placeholder.py index b1a618ef0e..64e3b1c53d 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/224_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/224_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/225_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/225_placeholder.py index b1a618ef0e..64e3b1c53d 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/225_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/225_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/226_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/226_placeholder.py index b1a618ef0e..64e3b1c53d 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/226_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/226_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/227_fix_project_user_quotas_resource_length.py b/nova/db/sqlalchemy/migrate_repo/versions/227_fix_project_user_quotas_resource_length.py index ceea2fa6d9..8eef3612c0 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/227_fix_project_user_quotas_resource_length.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/227_fix_project_user_quotas_resource_length.py @@ -28,9 +28,3 @@ def upgrade(migrate_engine): col_resource.alter(type=String(255)) table.update().where(table.c.resource == 'injected_file_content_byt')\ .values(resource='injected_file_content_bytes').execute() - - -def downgrade(migrate_engine): - # This migration fixes the resource of project_user_quotas table. - # No need to go back and reverse this change. - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/228_add_metrics_in_compute_nodes.py b/nova/db/sqlalchemy/migrate_repo/versions/228_add_metrics_in_compute_nodes.py index 7a46db1219..89351f6abd 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/228_add_metrics_in_compute_nodes.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/228_add_metrics_in_compute_nodes.py @@ -30,15 +30,3 @@ def upgrade(migrate_engine): shadow_metrics = Column('metrics', Text, nullable=True) compute_nodes.create_column(metrics) shadow_compute_nodes.create_column(shadow_metrics) - - -def downgrade(migrate_engine): - meta = MetaData() - meta.bind = migrate_engine - - # Remove the new column - compute_nodes = Table('compute_nodes', meta, autoload=True) - shadow_compute_nodes = Table('shadow_compute_nodes', meta, autoload=True) - - compute_nodes.drop_column('metrics') - shadow_compute_nodes.drop_column('metrics') diff --git a/nova/db/sqlalchemy/migrate_repo/versions/229_add_extra_resources_in_compute_nodes.py b/nova/db/sqlalchemy/migrate_repo/versions/229_add_extra_resources_in_compute_nodes.py index c4b9f133d8..5a968e32d6 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/229_add_extra_resources_in_compute_nodes.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/229_add_extra_resources_in_compute_nodes.py @@ -32,15 +32,3 @@ def upgrade(migrate_engine): shadow_extra_resources = Column('extra_resources', Text, nullable=True) compute_nodes.create_column(extra_resources) shadow_compute_nodes.create_column(shadow_extra_resources) - - -def downgrade(migrate_engine): - meta = MetaData() - meta.bind = migrate_engine - - # Remove the new column - compute_nodes = Table('compute_nodes', meta, autoload=True) - shadow_compute_nodes = Table('shadow_compute_nodes', meta, autoload=True) - - compute_nodes.drop_column('extra_resources') - shadow_compute_nodes.drop_column('extra_resources') diff --git a/nova/db/sqlalchemy/migrate_repo/versions/230_add_details_column_to_instance_actions_events.py b/nova/db/sqlalchemy/migrate_repo/versions/230_add_details_column_to_instance_actions_events.py index 51856c1e66..104e2f6bfe 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/230_add_details_column_to_instance_actions_events.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/230_add_details_column_to_instance_actions_events.py @@ -28,13 +28,3 @@ def upgrade(migrate_engine): api._SHADOW_TABLE_PREFIX + 'instance_actions_events') shadow_actions_events.create_column(host.copy()) shadow_actions_events.create_column(details.copy()) - - -def downgrade(migrate_engine): - actions_events = utils.get_table(migrate_engine, 'instance_actions_events') - actions_events.drop_column('host') - actions_events.drop_column('details') - shadow_actions_events = utils.get_table(migrate_engine, - api._SHADOW_TABLE_PREFIX + 'instance_actions_events') - shadow_actions_events.drop_column('host') - shadow_actions_events.drop_column('details') diff --git a/nova/db/sqlalchemy/migrate_repo/versions/231_add_ephemeral_key_uuid.py b/nova/db/sqlalchemy/migrate_repo/versions/231_add_ephemeral_key_uuid.py index b30a33262a..3c218f2fbb 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/231_add_ephemeral_key_uuid.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/231_add_ephemeral_key_uuid.py @@ -32,13 +32,3 @@ def upgrade(migrate_engine): values(ephemeral_key_uuid=None)) migrate_engine.execute(shadow_instances.update(). values(ephemeral_key_uuid=None)) - - -def downgrade(migrate_engine): - """Function removes ephemeral storage encryption key uuid field.""" - meta = MetaData(bind=migrate_engine) - instances = Table('instances', meta, autoload=True) - shadow_instances = Table('shadow_instances', meta, autoload=True) - - instances.c.ephemeral_key_uuid.drop() - shadow_instances.c.ephemeral_key_uuid.drop() diff --git a/nova/db/sqlalchemy/migrate_repo/versions/232_drop_dump_tables.py b/nova/db/sqlalchemy/migrate_repo/versions/232_drop_dump_tables.py index 3275a2ef4c..35466120ef 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/232_drop_dump_tables.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/232_drop_dump_tables.py @@ -26,7 +26,3 @@ def upgrade(migrate_engine): for table_name in table_names: table = Table('dump_' + table_name, meta) table.drop(checkfirst=True) - - -def downgrade(migrate_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/233_add_stats_in_compute_nodes.py b/nova/db/sqlalchemy/migrate_repo/versions/233_add_stats_in_compute_nodes.py index 39c40f13bc..517fe02ed2 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/233_add_stats_in_compute_nodes.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/233_add_stats_in_compute_nodes.py @@ -13,15 +13,8 @@ # License for the specific language governing permissions and limitations # under the License. - -from oslo_utils import timeutils from sqlalchemy import Column -from sqlalchemy import DateTime -from sqlalchemy import ForeignKey -from sqlalchemy import Index -from sqlalchemy import Integer from sqlalchemy import MetaData -from sqlalchemy import String from sqlalchemy import Table from sqlalchemy import Text @@ -44,51 +37,3 @@ def upgrade(engine): table = Table(table_name, meta, autoload=True) stats = Column('stats', Text, default='{}') table.create_column(stats) - - -def downgrade(engine): - meta = MetaData() - meta.bind = engine - - table_names = ('compute_nodes', 'shadow_compute_nodes') - for table_name in table_names: - table = Table(table_name, meta, autoload=True) - table.drop_column('stats') - - if engine.name == 'mysql': - fk_name = 'fk_compute_node_stats_compute_node_id' - else: - fk_name = 'compute_node_stats_compute_node_id_fkey' - - table = Table('compute_node_stats', meta, - Column('created_at', DateTime, default=timeutils.utcnow), - Column('updated_at', DateTime, onupdate=timeutils.utcnow), - Column('deleted_at', DateTime), - Column('deleted', Integer, default=0), - Column('id', Integer, nullable=False), - Column('key', String(255), nullable=False), - Column('value', String(255), nullable=True), - Column('compute_node_id', Integer, - ForeignKey('compute_nodes.id', name=fk_name), - index=True), - Index('compute_node_stats_node_id_and_deleted_idx', - 'compute_node_id', 'deleted'), - mysql_engine='InnoDB', - mysql_charset='utf8' - ) - table.create() - - # shadow version has no fkey or index - table = Table('shadow_compute_node_stats', meta, - Column('created_at', DateTime, default=timeutils.utcnow), - Column('updated_at', DateTime, onupdate=timeutils.utcnow), - Column('deleted_at', DateTime), - Column('deleted', Integer, default=0), - Column('id', Integer, primary_key=True, nullable=False), - Column('key', String(255), nullable=False), - Column('value', String(255), nullable=True), - Column('compute_node_id', Integer), - mysql_engine='InnoDB', - mysql_charset='utf8' - ) - table.create() diff --git a/nova/db/sqlalchemy/migrate_repo/versions/234_add_expire_reservations_index.py b/nova/db/sqlalchemy/migrate_repo/versions/234_add_expire_reservations_index.py index de1d25e2cd..d9484a7bfd 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/234_add_expire_reservations_index.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/234_add_expire_reservations_index.py @@ -43,17 +43,3 @@ def upgrade(migrate_engine): reservations.c.deleted, reservations.c.expire) index.create(migrate_engine) - - -def downgrade(migrate_engine): - meta = MetaData() - meta.bind = migrate_engine - - reservations = Table('reservations', meta, autoload=True) - - index = _get_deleted_expire_index(reservations) - if index: - index.drop(migrate_engine) - else: - LOG.info(_LI('Skipped removing reservations_deleted_expire_idx ' - 'because index does not exist.')) diff --git a/nova/db/sqlalchemy/migrate_repo/versions/235_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/235_placeholder.py index f5c5483cda..0a96cbdb27 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/235_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/235_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/236_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/236_placeholder.py index f5c5483cda..0a96cbdb27 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/236_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/236_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/237_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/237_placeholder.py index f5c5483cda..0a96cbdb27 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/237_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/237_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/238_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/238_placeholder.py index f5c5483cda..0a96cbdb27 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/238_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/238_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/239_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/239_placeholder.py index f5c5483cda..0a96cbdb27 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/239_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/239_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/240_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/240_placeholder.py index f5c5483cda..0a96cbdb27 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/240_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/240_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/241_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/241_placeholder.py index f5c5483cda..0a96cbdb27 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/241_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/241_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/242_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/242_placeholder.py index f5c5483cda..0a96cbdb27 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/242_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/242_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/243_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/243_placeholder.py index f5c5483cda..0a96cbdb27 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/243_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/243_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/244_increase_user_id_length_volume_usage_cache.py b/nova/db/sqlalchemy/migrate_repo/versions/244_increase_user_id_length_volume_usage_cache.py index 079003d733..882d7339e3 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/244_increase_user_id_length_volume_usage_cache.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/244_increase_user_id_length_volume_usage_cache.py @@ -22,10 +22,3 @@ def upgrade(migrate_engine): # Match the maximum length of user_id in Keystone here instead of # assuming explicitly a single UUID length. col_resource.alter(type=String(64)) - - -def downgrade(migrate_engine): - meta = MetaData(bind=migrate_engine) - table = Table('volume_usage_cache', meta, autoload=True) - col_resource = getattr(table.c, 'user_id') - col_resource.alter(type=String(36)) diff --git a/nova/db/sqlalchemy/migrate_repo/versions/245_add_mtu_and_dhcp_server.py b/nova/db/sqlalchemy/migrate_repo/versions/245_add_mtu_and_dhcp_server.py index 5c6391bfd9..326b9af4fa 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/245_add_mtu_and_dhcp_server.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/245_add_mtu_and_dhcp_server.py @@ -51,40 +51,3 @@ def upgrade(migrate_engine): shadow_networks.create_column(enable_dhcp.copy()) if not hasattr(shadow_networks.c, 'share_address'): shadow_networks.create_column(share_address.copy()) - - -# NOTE(vish): sqlite won't drop bool columns because it leaves a -# constraint behind so work around it. -def drop_boolean(column): - for constraint in column.table.constraints: - if column.name in unicode(getattr(constraint, 'sqltext', '')): - column.table.constraints.remove(constraint) - break - column.drop() - - -def downgrade(migrate_engine): - """Function removes network mtu, dhcp_server, and share_dhcp fields.""" - meta = MetaData(bind=migrate_engine) - networks = Table('networks', meta, autoload=True) - shadow_networks = Table('shadow_networks', meta, autoload=True) - - # NOTE(vish): ignore duplicate runs of upgrade so this can - # be backported - if hasattr(networks.c, 'mtu'): - networks.c.mtu.drop() - if hasattr(networks.c, 'dhcp_server'): - networks.c.dhcp_server.drop() - if hasattr(networks.c, 'enable_dhcp'): - drop_boolean(networks.c.enable_dhcp) - if hasattr(networks.c, 'share_address'): - drop_boolean(networks.c.share_address) - - if hasattr(shadow_networks.c, 'mtu'): - shadow_networks.c.mtu.drop() - if hasattr(shadow_networks.c, 'dhcp_server'): - shadow_networks.c.dhcp_server.drop() - if hasattr(shadow_networks.c, 'enable_dhcp'): - drop_boolean(shadow_networks.c.enable_dhcp) - if hasattr(shadow_networks.c, 'share_address'): - drop_boolean(shadow_networks.c.share_address) diff --git a/nova/db/sqlalchemy/migrate_repo/versions/246_add_compute_node_id_fk.py b/nova/db/sqlalchemy/migrate_repo/versions/246_add_compute_node_id_fk.py index a7e32e2d64..5c56f9b179 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/246_add_compute_node_id_fk.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/246_add_compute_node_id_fk.py @@ -28,14 +28,3 @@ def upgrade(migrate_engine): fkey = ForeignKeyConstraint(columns=[pci_devices.c.compute_node_id], refcolumns=[compute_nodes.c.id]) fkey.create() - - -def downgrade(migrate_engine): - meta = MetaData(bind=migrate_engine) - - pci_devices = Table('pci_devices', meta, autoload=True) - compute_nodes = Table('compute_nodes', meta, autoload=True) - - fkey = ForeignKeyConstraint(columns=[pci_devices.c.compute_node_id], - refcolumns=[compute_nodes.c.id]) - fkey.drop() diff --git a/nova/db/sqlalchemy/migrate_repo/versions/247_nullable_mismatch.py b/nova/db/sqlalchemy/migrate_repo/versions/247_nullable_mismatch.py index 78f608732c..b4c226bc32 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/247_nullable_mismatch.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/247_nullable_mismatch.py @@ -28,16 +28,3 @@ def upgrade(migrate_engine): pci_devices.c.product_id.alter(nullable=False) pci_devices.c.vendor_id.alter(nullable=False) pci_devices.c.dev_type.alter(nullable=False) - - -def downgrade(migrate_engine): - meta = MetaData(bind=migrate_engine) - - quota_usages = Table('quota_usages', meta, autoload=True) - quota_usages.c.resource.alter(nullable=True) - - pci_devices = Table('pci_devices', meta, autoload=True) - pci_devices.c.deleted.alter(nullable=False) - pci_devices.c.product_id.alter(nullable=True) - pci_devices.c.vendor_id.alter(nullable=True) - pci_devices.c.dev_type.alter(nullable=True) diff --git a/nova/db/sqlalchemy/migrate_repo/versions/248_add_expire_reservations_index.py b/nova/db/sqlalchemy/migrate_repo/versions/248_add_expire_reservations_index.py index de1d25e2cd..d9484a7bfd 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/248_add_expire_reservations_index.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/248_add_expire_reservations_index.py @@ -43,17 +43,3 @@ def upgrade(migrate_engine): reservations.c.deleted, reservations.c.expire) index.create(migrate_engine) - - -def downgrade(migrate_engine): - meta = MetaData() - meta.bind = migrate_engine - - reservations = Table('reservations', meta, autoload=True) - - index = _get_deleted_expire_index(reservations) - if index: - index.drop(migrate_engine) - else: - LOG.info(_LI('Skipped removing reservations_deleted_expire_idx ' - 'because index does not exist.')) diff --git a/nova/db/sqlalchemy/migrate_repo/versions/249_remove_duplicate_index.py b/nova/db/sqlalchemy/migrate_repo/versions/249_remove_duplicate_index.py index 9d2f797c9c..cc2ea31800 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/249_remove_duplicate_index.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/249_remove_duplicate_index.py @@ -29,8 +29,3 @@ def upgrade(migrate_engine): for index in bdm.indexes: if index.name == INDEX_NAME: index.drop() - - -def downgrade(migrate_engine): - # Unnecessary to re-add duplicate index when downgrading - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/250_remove_instance_groups_metadata.py b/nova/db/sqlalchemy/migrate_repo/versions/250_remove_instance_groups_metadata.py index 667baae823..4762fdb08e 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/250_remove_instance_groups_metadata.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/250_remove_instance_groups_metadata.py @@ -14,8 +14,7 @@ # under the License. -from sqlalchemy import MetaData, Table, Column, DateTime, Integer, String, \ - ForeignKey +from sqlalchemy import MetaData, Table def upgrade(migrate_engine): @@ -30,42 +29,3 @@ def upgrade(migrate_engine): shadow_group_metadata = Table('shadow_instance_group_metadata', meta, autoload=True) shadow_group_metadata.drop() - - -def downgrade(migrate_engine): - """Revert removal of the instance_group_metadata table.""" - meta = MetaData(bind=migrate_engine) - Table('instance_groups', meta, autoload=True) - Table('shadow_instance_groups', meta, autoload=True) - - if not migrate_engine.has_table('instance_group_metadata'): - group_metadata = Table('instance_group_metadata', meta, - Column('created_at', DateTime), - Column('updated_at', DateTime), - Column('deleted_at', DateTime), - Column('deleted', Integer), - Column('id', Integer, primary_key=True, nullable=False), - Column('key', String(length=255)), - Column('value', String(length=255)), - Column('group_id', Integer, ForeignKey('instance_groups.id'), - nullable=False), - mysql_engine='InnoDB', - mysql_charset='utf8', - ) - group_metadata.create() - if not migrate_engine.has_table('shadow_instance_group_metadata'): - shadow_group_metadata = Table('shadow_instance_group_metadata', meta, - Column('created_at', DateTime), - Column('updated_at', DateTime), - Column('deleted_at', DateTime), - Column('deleted', Integer), - Column('id', Integer, primary_key=True, nullable=False), - Column('key', String(length=255)), - Column('value', String(length=255)), - Column('group_id', Integer, - ForeignKey('shadow_instance_groups.id'), - nullable=False), - mysql_engine='InnoDB', - mysql_charset='utf8', - ) - shadow_group_metadata.create() diff --git a/nova/db/sqlalchemy/migrate_repo/versions/251_add_numa_topology_to_comput_nodes.py b/nova/db/sqlalchemy/migrate_repo/versions/251_add_numa_topology_to_comput_nodes.py index c2510d9b07..bad7b8e557 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/251_add_numa_topology_to_comput_nodes.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/251_add_numa_topology_to_comput_nodes.py @@ -28,14 +28,3 @@ def upgrade(migrate_engine): shadow_numa_topology = Column('numa_topology', Text, nullable=True) compute_nodes.create_column(numa_topology) shadow_compute_nodes.create_column(shadow_numa_topology) - - -def downgrade(migrate_engine): - meta = MetaData() - meta.bind = migrate_engine - - compute_nodes = Table('compute_nodes', meta, autoload=True) - shadow_compute_nodes = Table('shadow_compute_nodes', meta, autoload=True) - - compute_nodes.drop_column('numa_topology') - shadow_compute_nodes.drop_column('numa_topology') diff --git a/nova/db/sqlalchemy/migrate_repo/versions/252_add_instance_extra_table.py b/nova/db/sqlalchemy/migrate_repo/versions/252_add_instance_extra_table.py index ef8fa542f8..3ddabd990b 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/252_add_instance_extra_table.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/252_add_instance_extra_table.py @@ -58,14 +58,3 @@ def upgrade(migrate_engine): instance_fkey = ForeignKeyConstraint( columns=fkey_columns, refcolumns=fkey_refcolumns) instance_fkey.create() - - -def downgrade(migrate_engine): - meta = MetaData() - meta.bind = migrate_engine - - for prefix in ('', 'shadow_'): - table_name = prefix + 'instance_extra' - if migrate_engine.has_table(table_name): - instance_extra = Table(table_name, meta, autoload=True) - instance_extra.drop() diff --git a/nova/db/sqlalchemy/migrate_repo/versions/253_add_pci_requests_to_instance_extra_table.py b/nova/db/sqlalchemy/migrate_repo/versions/253_add_pci_requests_to_instance_extra_table.py index e0ae99b1c4..96cc34402e 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/253_add_pci_requests_to_instance_extra_table.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/253_add_pci_requests_to_instance_extra_table.py @@ -30,13 +30,3 @@ def upgrade(migrate_engine): new_column = Column(NEW_COLUMN_NAME, Text, nullable=True) if not hasattr(table.c, NEW_COLUMN_NAME): table.create_column(new_column) - - -def downgrade(migrate_engine): - meta = MetaData() - meta.bind = migrate_engine - - for prefix in ('', 'shadow_'): - table = Table(prefix + BASE_TABLE_NAME, meta, autoload=True) - if hasattr(table.c, NEW_COLUMN_NAME): - getattr(table.c, NEW_COLUMN_NAME).drop() diff --git a/nova/db/sqlalchemy/migrate_repo/versions/254_add_request_id_in_pci_devices.py b/nova/db/sqlalchemy/migrate_repo/versions/254_add_request_id_in_pci_devices.py index f409bcc793..fae470312c 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/254_add_request_id_in_pci_devices.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/254_add_request_id_in_pci_devices.py @@ -33,17 +33,3 @@ def upgrade(engine): if not hasattr(shadow_pci_devices.c, 'request_id'): shadow_pci_devices.create_column(request_id.copy()) - - -def downgrade(engine): - """Function drops request_id field.""" - meta = MetaData(bind=engine) - - pci_devices = Table('pci_devices', meta, autoload=True) - shadow_pci_devices = Table('shadow_pci_devices', meta, autoload=True) - - if hasattr(pci_devices.c, 'request_id'): - pci_devices.c.request_id.drop() - - if hasattr(shadow_pci_devices.c, 'request_id'): - shadow_pci_devices.c.request_id.drop() diff --git a/nova/db/sqlalchemy/migrate_repo/versions/255_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/255_placeholder.py index 939c97a41e..c3e43ef46e 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/255_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/255_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/256_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/256_placeholder.py index 939c97a41e..c3e43ef46e 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/256_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/256_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/257_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/257_placeholder.py index 939c97a41e..c3e43ef46e 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/257_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/257_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/258_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/258_placeholder.py index 939c97a41e..c3e43ef46e 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/258_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/258_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/259_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/259_placeholder.py index 939c97a41e..c3e43ef46e 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/259_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/259_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/260_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/260_placeholder.py index 939c97a41e..c3e43ef46e 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/260_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/260_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/261_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/261_placeholder.py index 939c97a41e..c3e43ef46e 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/261_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/261_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/262_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/262_placeholder.py index 939c97a41e..c3e43ef46e 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/262_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/262_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/263_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/263_placeholder.py index 939c97a41e..c3e43ef46e 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/263_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/263_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/264_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/264_placeholder.py index 939c97a41e..c3e43ef46e 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/264_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/264_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/265_remove_duplicated_index.py b/nova/db/sqlalchemy/migrate_repo/versions/265_remove_duplicated_index.py index b8983ea0b0..b6f7d17f97 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/265_remove_duplicated_index.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/265_remove_duplicated_index.py @@ -35,8 +35,3 @@ def upgrade(migrate_engine): for index in table.indexes: if index.name == index_name: index.drop() - - -def downgrade(migrate_engine): - # Unnecessary to re-add duplicated index when downgrading - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/266_add_instance_tags.py b/nova/db/sqlalchemy/migrate_repo/versions/266_add_instance_tags.py index 051ef7ec28..b1b11a2f56 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/266_add_instance_tags.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/266_add_instance_tags.py @@ -25,10 +25,3 @@ def upgrade(migrate_engine): mysql_engine='InnoDB', mysql_charset='utf8') tags.create() - - -def downgrade(migrate_engine): - meta = sa.MetaData() - meta.bind = migrate_engine - table = sa.Table('tags', meta, autoload=True) - table.drop() diff --git a/nova/db/sqlalchemy/migrate_repo/versions/267_instance_uuid_non_nullable.py b/nova/db/sqlalchemy/migrate_repo/versions/267_instance_uuid_non_nullable.py index 492f20071e..889c7ff21e 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/267_instance_uuid_non_nullable.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/267_instance_uuid_non_nullable.py @@ -13,7 +13,6 @@ # under the License. from migrate import UniqueConstraint -from oslo_db.sqlalchemy import utils from oslo_log import log as logging from sqlalchemy import MetaData from sqlalchemy.sql import null @@ -112,14 +111,3 @@ def upgrade(migrate_engine): # any ForeignKeys on the instances.uuid column due to some index rename # issues in older versions of MySQL. That is beyond the scope of this # migration. - - -def downgrade(migrate_engine): - # drop the unique constraint on instances.uuid - UniqueConstraint('uuid', - table=utils.get_table(migrate_engine, 'instances'), - name=UC_NAME).drop() - # We can't bring the deleted records back but we can make uuid nullable. - for table_name in ('instances', 'shadow_instances'): - table = utils.get_table(migrate_engine, table_name) - table.columns.uuid.alter(nullable=True) diff --git a/nova/db/sqlalchemy/migrate_repo/versions/268_add_host_in_compute_node.py b/nova/db/sqlalchemy/migrate_repo/versions/268_add_host_in_compute_node.py index c55f6e6198..48ecc0774e 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/268_add_host_in_compute_node.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/268_add_host_in_compute_node.py @@ -40,19 +40,3 @@ def upgrade(migrate_engine): ukey = UniqueConstraint('host', 'hypervisor_hostname', table=compute_nodes, name="uniq_compute_nodes0host0hypervisor_hostname") ukey.create() - - -def downgrade(migrate_engine): - meta = MetaData() - meta.bind = migrate_engine - - # Remove the new column - compute_nodes = Table('compute_nodes', meta, autoload=True) - shadow_compute_nodes = Table('shadow_compute_nodes', meta, autoload=True) - - ukey = UniqueConstraint('host', 'hypervisor_hostname', table=compute_nodes, - name="uniq_compute_nodes0host0hypervisor_hostname") - ukey.drop() - - compute_nodes.drop_column('host') - shadow_compute_nodes.drop_column('host') diff --git a/nova/db/sqlalchemy/migrate_repo/versions/269_add_numa_node_column.py b/nova/db/sqlalchemy/migrate_repo/versions/269_add_numa_node_column.py index 50115ab719..8bffd13564 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/269_add_numa_node_column.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/269_add_numa_node_column.py @@ -30,16 +30,3 @@ def upgrade(migrate_engine): pci_devices.create_column(numa_node) if not hasattr(shadow_pci_devices.c, 'numa_node'): shadow_pci_devices.create_column(numa_node.copy()) - - -def downgrade(migrate_engine): - meta = MetaData(bind=migrate_engine) - - # Remove the numa_node column - pci_devices = Table('pci_devices', meta, autoload=True) - shadow_pci_devices = Table('shadow_pci_devices', meta, autoload=True) - - if hasattr(pci_devices.c, 'numa_node'): - pci_devices.drop_column('numa_node') - if hasattr(shadow_pci_devices.c, 'numa_node'): - shadow_pci_devices.drop_column('numa_node') diff --git a/nova/db/sqlalchemy/migrate_repo/versions/270_flavor_data_in_extra.py b/nova/db/sqlalchemy/migrate_repo/versions/270_flavor_data_in_extra.py index 51fbf6d610..202e53b895 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/270_flavor_data_in_extra.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/270_flavor_data_in_extra.py @@ -30,13 +30,3 @@ def upgrade(migrate_engine): new_column = Column(NEW_COLUMN_NAME, Text, nullable=True) if not hasattr(table.c, NEW_COLUMN_NAME): table.create_column(new_column) - - -def downgrade(migrate_engine): - meta = MetaData() - meta.bind = migrate_engine - - for prefix in ('', 'shadow_'): - table = Table(prefix + BASE_TABLE_NAME, meta, autoload=True) - if hasattr(table.c, NEW_COLUMN_NAME): - getattr(table.c, NEW_COLUMN_NAME).drop() diff --git a/nova/db/sqlalchemy/migrate_repo/versions/271_sqlite_postgresql_indexes.py b/nova/db/sqlalchemy/migrate_repo/versions/271_sqlite_postgresql_indexes.py index fe017d3979..84d57028ca 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/271_sqlite_postgresql_indexes.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/271_sqlite_postgresql_indexes.py @@ -67,22 +67,3 @@ def upgrade(migrate_engine): ensure_index_exists(migrate_engine, 'virtual_interfaces', 'virtual_interfaces_network_id_idx', ['network_id']) - - -def downgrade(migrate_engine): - """Remove indexes previously missing on SQLite and PostgreSQL.""" - - if migrate_engine.name in ('sqlite', 'postgresql'): - for table_name, index_name, column_names in INDEXES: - ensure_index_removed(migrate_engine, table_name, index_name) - elif migrate_engine.name == 'mysql': - # Rename some indexes with conflicting names back - ensure_index_removed(migrate_engine, 'dns_domains', - 'dns_domains_project_id_idx') - ensure_index_exists(migrate_engine, 'dns_domains', 'project_id', - ['project_id']) - - ensure_index_removed(migrate_engine, 'virtual_interfaces', - 'virtual_interfaces_network_id_idx') - ensure_index_exists(migrate_engine, 'virtual_interfaces', 'network_id', - ['network_id']) diff --git a/nova/db/sqlalchemy/migrate_repo/versions/272_add_keypair_type.py b/nova/db/sqlalchemy/migrate_repo/versions/272_add_keypair_type.py index 426fad902c..5137b16675 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/272_add_keypair_type.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/272_add_keypair_type.py @@ -26,7 +26,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migrate_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/273_sqlite_foreign_keys.py b/nova/db/sqlalchemy/migrate_repo/versions/273_sqlite_foreign_keys.py index 4f5aabdaa4..01eafbd21d 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/273_sqlite_foreign_keys.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/273_sqlite_foreign_keys.py @@ -106,10 +106,3 @@ def upgrade(migrate_engine): uc = UniqueConstraint(*column_names, table=table, name=name) uc.create() - - -def downgrade(migrate_engine): - # sqlalchemy-migrate doesn't handle dropping foreign keys. Since this - # migration only applies to SQLite, which isn't a supported production - # deploy, the amount of work outweighs the need for a downgrade. - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/274_update_instances_project_id_index.py b/nova/db/sqlalchemy/migrate_repo/versions/274_update_instances_project_id_index.py index ae65b378e6..3b8ba9f154 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/274_update_instances_project_id_index.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/274_update_instances_project_id_index.py @@ -44,24 +44,3 @@ def upgrade(migrate_engine): for index in instances.indexes: if [c.name for c in index.columns] == ['project_id']: index.drop() - - -def downgrade(migrate_engine): - """Change instances (project_id, deleted) index to cover (project_id).""" - - meta = MetaData(bind=migrate_engine) - - instances = Table('instances', meta, autoload=True) - - for index in instances.indexes: - if [c.name for c in index.columns] == ['project_id']: - LOG.info(_LI('Skipped adding instances_project_id_idx ' - 'because an equivalent index already exists.')) - break - else: - index = Index('project_id', instances.c.project_id) - index.create() - - for index in instances.indexes: - if [c.name for c in index.columns] == ['project_id', 'deleted']: - index.drop() diff --git a/nova/db/sqlalchemy/migrate_repo/versions/275_add_keypair_type.py b/nova/db/sqlalchemy/migrate_repo/versions/275_add_keypair_type.py index 39889066ee..95b4607a06 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/275_add_keypair_type.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/275_add_keypair_type.py @@ -39,19 +39,3 @@ def upgrade(migrate_engine): key_pairs.create_column(keypair_type) shadow_key_pairs.create_column(keypair_type.copy()) - - -def downgrade(migrate_engine): - """Function removes key_pairs type field.""" - meta = MetaData(bind=migrate_engine) - key_pairs = Table('key_pairs', meta, autoload=True) - shadow_key_pairs = Table('shadow_key_pairs', meta, autoload=True) - enum = Enum(metadata=meta, name='keypair_types') - - if hasattr(key_pairs.c, 'type'): - key_pairs.c.type.drop() - - if hasattr(shadow_key_pairs.c, 'type'): - shadow_key_pairs.c.type.drop() - - enum.drop() diff --git a/nova/db/sqlalchemy/migrate_repo/versions/276_vcpu_model.py b/nova/db/sqlalchemy/migrate_repo/versions/276_vcpu_model.py index 223e459334..254ddcf03f 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/276_vcpu_model.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/276_vcpu_model.py @@ -30,13 +30,3 @@ def upgrade(migrate_engine): new_column = Column(NEW_COLUMN_NAME, Text, nullable=True) if not hasattr(table.c, NEW_COLUMN_NAME): table.create_column(new_column) - - -def downgrade(migrate_engine): - meta = MetaData() - meta.bind = migrate_engine - - for prefix in ('', 'shadow_'): - table = Table(prefix + BASE_TABLE_NAME, meta, autoload=True) - if hasattr(table.c, NEW_COLUMN_NAME): - getattr(table.c, NEW_COLUMN_NAME).drop() diff --git a/nova/db/sqlalchemy/migrate_repo/versions/277_add_fixed_ip_updated_index.py b/nova/db/sqlalchemy/migrate_repo/versions/277_add_fixed_ip_updated_index.py index 31f85484d9..afba49cd58 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/277_add_fixed_ip_updated_index.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/277_add_fixed_ip_updated_index.py @@ -43,12 +43,3 @@ def upgrade(migrate_engine): 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/migrate_repo/versions/278_remove_service_fk_in_compute_nodes.py b/nova/db/sqlalchemy/migrate_repo/versions/278_remove_service_fk_in_compute_nodes.py index 9e86cd431a..9fd5c222b4 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/278_remove_service_fk_in_compute_nodes.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/278_remove_service_fk_in_compute_nodes.py @@ -66,40 +66,3 @@ def upgrade(migrate_engine): # Delete the nested index which was created by the FK index.drop() break - - -def downgrade(migrate_engine): - meta = MetaData() - meta.bind = migrate_engine - - compute_nodes = Table('compute_nodes', meta, autoload=True) - shadow_compute_nodes = Table('shadow_compute_nodes', meta, autoload=True) - services = Table('services', meta, autoload=True) - - _correct_sqlite_unique_constraints(migrate_engine, compute_nodes) - - # Make the service_id field not nullable - # NOTE(sbauza): Beyond the point of this commit, service_id will not be - # updated, but previous commits still do. We can tho safely go back to - # a state where all the compute nodes are providing this field. - compute_nodes.c.service_id.alter(nullable=False) - shadow_compute_nodes.c.service_id.alter(nullable=False) - - # Adding only FK if not existing yet - fkeys = {fk.parent.name: fk.column - for fk in compute_nodes.foreign_keys} - if 'service_id' in fkeys and fkeys['service_id'] == services.c.id: - return - - # NOTE(sbauza): See 216_havana.py for the whole logic - if migrate_engine.name == 'postgresql': - # PostgreSQL names things like it wants (correct and compatible!) - fkey = ForeignKeyConstraint(columns=[compute_nodes.c.service_id], - refcolumns=[services.c.id]) - fkey.create() - else: - # For MySQL we name our fkeys explicitly so they match Havana - fkey = ForeignKeyConstraint(columns=[compute_nodes.c.service_id], - refcolumns=[services.c.id], - name='fk_compute_nodes_service_id') - fkey.create() diff --git a/nova/db/sqlalchemy/migrate_repo/versions/279_fix_unique_constraint_for_compute_node.py b/nova/db/sqlalchemy/migrate_repo/versions/279_fix_unique_constraint_for_compute_node.py index 412c4f5d3b..820fa3f696 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/279_fix_unique_constraint_for_compute_node.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/279_fix_unique_constraint_for_compute_node.py @@ -33,19 +33,3 @@ def upgrade(migrate_engine): table=compute_nodes, name="uniq_compute_nodes0host0hypervisor_hostname0deleted") ukey.create() - - -def downgrade(migrate_engine): - meta = MetaData() - meta.bind = migrate_engine - compute_nodes = Table('compute_nodes', meta, autoload=True) - - ukey = UniqueConstraint( - 'host', 'hypervisor_hostname', 'deleted', - table=compute_nodes, - name="uniq_compute_nodes0host0hypervisor_hostname0deleted") - ukey.drop() - - ukey = UniqueConstraint('host', 'hypervisor_hostname', table=compute_nodes, - name="uniq_compute_nodes0host0hypervisor_hostname") - ukey.create() diff --git a/nova/db/sqlalchemy/migrate_repo/versions/280_add_nullable_false_to_keypairs_name.py b/nova/db/sqlalchemy/migrate_repo/versions/280_add_nullable_false_to_keypairs_name.py index 624495171b..f3339cad1a 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/280_add_nullable_false_to_keypairs_name.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/280_add_nullable_false_to_keypairs_name.py @@ -33,21 +33,3 @@ def upgrade(migrate_engine): UniqueConstraint('user_id', 'name', 'deleted', table=key_pairs, name='uniq_key_pairs0user_id0name0deleted').create() - - -def downgrade(migrate_engine): - """Function allows null value for keypairs name field.""" - meta = MetaData(bind=migrate_engine) - key_pairs = Table('key_pairs', meta, autoload=True) - - # Note: Since we are altering name field, this constraint on name needs to - # first be dropped before we can alter name. We then re-create the same - # constraint. It was first added in 216_havana.py so no need to remove - # constraint on downgrade. - UniqueConstraint('user_id', 'name', 'deleted', table=key_pairs, - name='uniq_key_pairs0user_id0name0deleted').drop() - - key_pairs.c.name.alter(nullable=True) - - UniqueConstraint('user_id', 'name', 'deleted', table=key_pairs, - name='uniq_key_pairs0user_id0name0deleted').create() diff --git a/nova/db/sqlalchemy/migrate_repo/versions/281_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/281_placeholder.py index 9dfc9cb471..b088f203c5 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/281_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/281_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/282_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/282_placeholder.py index 9dfc9cb471..b088f203c5 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/282_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/282_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/283_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/283_placeholder.py index 9dfc9cb471..b088f203c5 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/283_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/283_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/284_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/284_placeholder.py index 9dfc9cb471..b088f203c5 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/284_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/284_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/285_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/285_placeholder.py index 9dfc9cb471..b088f203c5 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/285_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/285_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/286_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/286_placeholder.py index 9dfc9cb471..b088f203c5 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/286_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/286_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/287_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/287_placeholder.py index 9dfc9cb471..b088f203c5 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/287_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/287_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/288_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/288_placeholder.py index 9dfc9cb471..b088f203c5 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/288_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/288_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/289_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/289_placeholder.py index 9dfc9cb471..b088f203c5 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/289_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/289_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/db/sqlalchemy/migrate_repo/versions/290_placeholder.py b/nova/db/sqlalchemy/migrate_repo/versions/290_placeholder.py index 9dfc9cb471..b088f203c5 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/290_placeholder.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/290_placeholder.py @@ -20,7 +20,3 @@ def upgrade(migrate_engine): pass - - -def downgrade(migration_engine): - pass diff --git a/nova/tests/unit/db/test_migrations.py b/nova/tests/unit/db/test_migrations.py index d75d19599b..b978e8f13c 100644 --- a/nova/tests/unit/db/test_migrations.py +++ b/nova/tests/unit/db/test_migrations.py @@ -69,9 +69,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, TIMEOUT_SCALING_FACTOR = 2 - snake_walk = True - downgrade = True - @property def INIT_VERSION(self): return migration.db_initial_version() @@ -194,7 +191,7 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, super(NovaMigrationsCheckers, self).migrate_up(version, with_data) def test_walk_versions(self): - self.walk_versions(self.snake_walk, self.downgrade) + self.walk_versions(snake_walk=False, downgrade=False) def _check_227(self, engine, data): table = oslodbutils.get_table(engine, 'project_user_quotas') @@ -218,9 +215,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, self.assertIsInstance(compute_nodes.c.metrics.type, sqlalchemy.types.Text) - def _post_downgrade_228(self, engine): - self.assertColumnNotExists(engine, 'compute_nodes', 'metrics') - def _check_229(self, engine, data): self.assertColumnExists(engine, 'compute_nodes', 'extra_resources') @@ -228,9 +222,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, self.assertIsInstance(compute_nodes.c.extra_resources.type, sqlalchemy.types.Text) - def _post_downgrade_229(self, engine): - self.assertColumnNotExists(engine, 'compute_nodes', 'extra_resources') - def _check_230(self, engine, data): for table_name in ['instance_actions_events', 'shadow_instance_actions_events']: @@ -244,12 +235,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, self.assertIsInstance(action_events.c.details.type, sqlalchemy.types.Text) - def _post_downgrade_230(self, engine): - for table_name in ['instance_actions_events', - 'shadow_instance_actions_events']: - self.assertColumnNotExists(engine, table_name, 'host') - self.assertColumnNotExists(engine, table_name, 'details') - def _check_231(self, engine, data): self.assertColumnExists(engine, 'instances', 'ephemeral_key_uuid') @@ -258,10 +243,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, sqlalchemy.types.String) self.assertTrue(db_utils.check_shadow_table(engine, 'instances')) - def _post_downgrade_231(self, engine): - self.assertColumnNotExists(engine, 'instances', 'ephemeral_key_uuid') - self.assertTrue(db_utils.check_shadow_table(engine, 'instances')) - def _check_232(self, engine, data): table_names = ['compute_node_stats', 'compute_nodes', 'instance_actions', 'instance_actions_events', @@ -279,12 +260,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, self.assertRaises(sqlalchemy.exc.NoSuchTableError, oslodbutils.get_table, engine, 'compute_node_stats') - def _post_downgrade_233(self, engine): - self.assertColumnNotExists(engine, 'compute_nodes', 'stats') - - # confirm compute_node_stats exists - oslodbutils.get_table(engine, 'compute_node_stats') - def _check_234(self, engine, data): self.assertIndexMembers(engine, 'reservations', 'reservations_deleted_expire_idx', @@ -295,11 +270,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, engine, 'volume_usage_cache') self.assertEqual(64, volume_usage_cache.c.user_id.type.length) - def _post_downgrade_244(self, engine): - volume_usage_cache = oslodbutils.get_table( - engine, 'volume_usage_cache') - self.assertEqual(36, volume_usage_cache.c.user_id.type.length) - def _pre_upgrade_245(self, engine): # create a fake network networks = oslodbutils.get_table(engine, 'networks') @@ -318,22 +288,11 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, # share address should default to false self.assertFalse(network.share_address) - def _post_downgrade_245(self, engine): - self.assertColumnNotExists(engine, 'networks', 'mtu') - self.assertColumnNotExists(engine, 'networks', 'dhcp_server') - self.assertColumnNotExists(engine, 'networks', 'enable_dhcp') - self.assertColumnNotExists(engine, 'networks', 'share_address') - def _check_246(self, engine, data): pci_devices = oslodbutils.get_table(engine, 'pci_devices') self.assertEqual(1, len([fk for fk in pci_devices.foreign_keys if fk.parent.name == 'compute_node_id'])) - def _post_downgrade_246(self, engine): - pci_devices = oslodbutils.get_table(engine, 'pci_devices') - self.assertEqual(0, len([fk for fk in pci_devices.foreign_keys - if fk.parent.name == 'compute_node_id'])) - def _check_247(self, engine, data): quota_usages = oslodbutils.get_table(engine, 'quota_usages') self.assertFalse(quota_usages.c.resource.nullable) @@ -344,26 +303,11 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, self.assertFalse(pci_devices.c.vendor_id.nullable) self.assertFalse(pci_devices.c.dev_type.nullable) - def _post_downgrade_247(self, engine): - quota_usages = oslodbutils.get_table(engine, 'quota_usages') - self.assertTrue(quota_usages.c.resource.nullable) - - pci_devices = oslodbutils.get_table(engine, 'pci_devices') - self.assertFalse(pci_devices.c.deleted.nullable) - self.assertTrue(pci_devices.c.product_id.nullable) - self.assertTrue(pci_devices.c.vendor_id.nullable) - self.assertTrue(pci_devices.c.dev_type.nullable) - def _check_248(self, engine, data): self.assertIndexMembers(engine, 'reservations', 'reservations_deleted_expire_idx', ['deleted', 'expire']) - def _post_downgrade_248(self, engine): - reservations = oslodbutils.get_table(engine, 'reservations') - index_names = [idx.name for idx in reservations.indexes] - self.assertNotIn('reservations_deleted_expire_idx', index_names) - def _check_249(self, engine, data): # Assert that only one index exists that covers columns # instance_uuid and device_name @@ -372,23 +316,10 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, if [c.name for c in i.columns] == ['instance_uuid', 'device_name']])) - def _post_downgrade_249(self, engine): - # The duplicate index is not created on downgrade, so this - # asserts that only one index exists that covers columns - # instance_uuid and device_name - bdm = oslodbutils.get_table(engine, 'block_device_mapping') - self.assertEqual(1, len([i for i in bdm.indexes - if [c.name for c in i.columns] == - ['instance_uuid', 'device_name']])) - def _check_250(self, engine, data): self.assertTableNotExists(engine, 'instance_group_metadata') self.assertTableNotExists(engine, 'shadow_instance_group_metadata') - def _post_downgrade_250(self, engine): - oslodbutils.get_table(engine, 'instance_group_metadata') - oslodbutils.get_table(engine, 'shadow_instance_group_metadata') - def _check_251(self, engine, data): self.assertColumnExists(engine, 'compute_nodes', 'numa_topology') self.assertColumnExists(engine, 'shadow_compute_nodes', @@ -402,11 +333,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, self.assertIsInstance(shadow_compute_nodes.c.numa_topology.type, sqlalchemy.types.Text) - def _post_downgrade_251(self, engine): - self.assertColumnNotExists(engine, 'compute_nodes', 'numa_topology') - self.assertColumnNotExists(engine, 'shadow_compute_nodes', - 'numa_topology') - def _check_252(self, engine, data): oslodbutils.get_table(engine, 'instance_extra') oslodbutils.get_table(engine, 'shadow_instance_extra') @@ -414,10 +340,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, 'instance_extra_idx', ['instance_uuid']) - def _post_downgrade_252(self, engine): - self.assertTableNotExists(engine, 'instance_extra') - self.assertTableNotExists(engine, 'shadow_instance_extra') - def _check_253(self, engine, data): self.assertColumnExists(engine, 'instance_extra', 'pci_requests') self.assertColumnExists( @@ -430,11 +352,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, self.assertIsInstance(shadow_instance_extra.c.pci_requests.type, sqlalchemy.types.Text) - def _post_downgrade_253(self, engine): - self.assertColumnNotExists(engine, 'instance_extra', 'pci_requests') - self.assertColumnNotExists(engine, 'shadow_instance_extra', - 'pci_requests') - def _check_254(self, engine, data): self.assertColumnExists(engine, 'pci_devices', 'request_id') self.assertColumnExists( @@ -448,11 +365,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, self.assertIsInstance(shadow_pci_devices.c.request_id.type, sqlalchemy.types.String) - def _post_downgrade_254(self, engine): - self.assertColumnNotExists(engine, 'pci_devices', 'request_id') - self.assertColumnNotExists( - engine, 'shadow_pci_devices', 'request_id') - def _check_265(self, engine, data): # Assert that only one index exists that covers columns # host and deleted @@ -466,20 +378,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, if [c.name for c in i.columns][:1] == ['host']])) - def _post_downgrade_265(self, engine): - # The duplicated index is not created on downgrade, so this - # asserts that only one index exists that covers columns - # host and deleted - instances = oslodbutils.get_table(engine, 'instances') - self.assertEqual(1, len([i for i in instances.indexes - if [c.name for c in i.columns][:2] == - ['host', 'deleted']])) - # and only one index covers host column - iscsi_targets = oslodbutils.get_table(engine, 'iscsi_targets') - self.assertEqual(1, len([i for i in iscsi_targets.indexes - if [c.name for c in i.columns][:1] == - ['host']])) - def _check_266(self, engine, data): self.assertColumnExists(engine, 'tags', 'resource_id') self.assertColumnExists(engine, 'tags', 'tag') @@ -491,9 +389,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, self.assertIsInstance(table.c.tag.type, sqlalchemy.types.String) - def _post_downgrade_266(self, engine): - self.assertTableNotExists(engine, 'tags') - def _pre_upgrade_267(self, engine): # Create a fixed_ips row with a null instance_uuid (if not already # there) to make sure that's not deleted. @@ -539,16 +434,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, ).execute().first() self.assertIsNone(volume.instance_uuid) - def _post_downgrade_267(self, engine): - # Make sure the UC is gone and the column is nullable again. - instances = oslodbutils.get_table(engine, 'instances') - self.assertTrue(instances.c.uuid.nullable) - - inspector = reflection.Inspector.from_engine(engine) - constraints = inspector.get_unique_constraints('instances') - constraint_names = [constraint['name'] for constraint in constraints] - self.assertNotIn('uniq_instances0uuid', constraint_names) - def test_migration_267(self): # This is separate from test_walk_versions so we can test the case # where there are non-null instance_uuid entries in the database which @@ -603,10 +488,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, self.assertIsInstance(shadow_compute_nodes.c.host.type, sqlalchemy.types.String) - def _post_downgrade_268(self, engine): - self.assertColumnNotExists(engine, 'compute_nodes', 'host') - self.assertColumnNotExists(engine, 'shadow_compute_nodes', 'host') - def _check_269(self, engine, data): self.assertColumnExists(engine, 'pci_devices', 'numa_node') @@ -621,10 +502,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, sqlalchemy.types.Integer) self.assertTrue(shadow_pci_devices.c.numa_node.nullable) - def _post_downgrade_269(self, engine): - self.assertColumnNotExists(engine, 'pci_devices', 'numa_node') - self.assertColumnNotExists(engine, 'shadow_pci_devices', 'numa_node') - def _check_270(self, engine, data): self.assertColumnExists(engine, 'instance_extra', 'flavor') self.assertColumnExists(engine, 'shadow_instance_extra', 'flavor') @@ -637,10 +514,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, self.assertIsInstance(shadow_instance_extra.c.flavor.type, sqlalchemy.types.Text) - def _post_downgrade_270(self, engine): - self.assertColumnNotExists(engine, 'instance_extra', 'flavor') - self.assertColumnNotExists(engine, 'shadow_instance_extra', 'flavor') - def _check_271(self, engine, data): self.assertIndexMembers(engine, 'block_device_mapping', 'snapshot_id', ['snapshot_id']) @@ -672,39 +545,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, self.assertIndexNotExists(engine, 'dns_domains', 'project_id') self.assertIndexNotExists(engine, 'virtual_interfaces', 'network_id') - def _post_downgrade_271(self, engine): - self.assertIndexNotExists(engine, 'dns_domains', - 'dns_domains_project_id_idx') - self.assertIndexNotExists(engine, 'virtual_interfaces', - 'virtual_interfaces_network_id_idx') - if engine.name == 'mysql': - self.assertIndexMembers(engine, 'dns_domains', - 'project_id', - ['project_id']) - self.assertIndexMembers(engine, 'virtual_interfaces', - 'network_id', - ['network_id']) - # Rest of indexes will still exist on MySQL - return - - # Never existed on non-MySQL databases, so shouldn't exist now - self.assertIndexNotExists(engine, 'dns_domains', 'project_id') - self.assertIndexNotExists(engine, 'virtual_interfaces', 'network_id') - - for table_name, index_name in [ - ('block_device_mapping', 'snapshot_id'), - ('block_device_mapping', 'volume_id'), - ('dns_domains', 'dns_domains_project_id_idx'), - ('fixed_ips', 'network_id'), - ('fixed_ips', 'fixed_ips_instance_uuid_fkey'), - ('fixed_ips', 'fixed_ips_virtual_interface_id_fkey'), - ('floating_ips', 'fixed_ip_id'), - ('iscsi_targets', 'iscsi_targets_volume_id_fkey'), - ('virtual_interfaces', 'virtual_interfaces_network_id_idx'), - ('virtual_interfaces', - 'virtual_interfaces_instance_uuid_fkey')]: - self.assertIndexNotExists(engine, table_name, index_name) - def _pre_upgrade_273(self, engine): if engine.name != 'sqlite': return @@ -762,22 +602,12 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, self.assertEqual(fkeys[src_column].table.name, dst_table) self.assertEqual(fkeys[src_column].name, dst_column) - def _post_downgrade_273(self, engine): - # NOTE(johannes): No downgrade implemented, so nothing to check - pass - def _check_274(self, engine, data): self.assertIndexMembers(engine, 'instances', 'instances_project_id_deleted_idx', ['project_id', 'deleted']) self.assertIndexNotExists(engine, 'instances', 'project_id') - def _post_downgrade_274(self, engine): - self.assertIndexMembers(engine, 'instances', - 'project_id', ['project_id']) - self.assertIndexNotExists(engine, 'instances', - 'instances_project_id_deleted_idx') - def _pre_upgrade_275(self, engine): # Create a keypair record so we can test that the upgrade will set # 'ssh' as default value in the new column for the previous keypair @@ -803,10 +633,6 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, key_pairs.c.name == 'test-migr').execute().first() self.assertEqual('ssh', keypair.type) - def _post_downgrade_275(self, engine): - self.assertColumnNotExists(engine, 'key_pairs', 'type') - self.assertColumnNotExists(engine, 'shadow_key_pairs', 'type') - def _check_276(self, engine, data): self.assertColumnExists(engine, 'instance_extra', 'vcpu_model') self.assertColumnExists(engine, 'shadow_instance_extra', 'vcpu_model') @@ -819,42 +645,17 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, self.assertIsInstance(shadow_instance_extra.c.vcpu_model.type, sqlalchemy.types.Text) - def _post_downgrade_276(self, engine): - self.assertColumnNotExists(engine, 'instance_extra', 'vcpu_model') - self.assertColumnNotExists(engine, 'shadow_instance_extra', - 'vcpu_model') - def _check_277(self, engine, data): self.assertIndexMembers(engine, 'fixed_ips', 'fixed_ips_deleted_allocated_updated_at_idx', ['deleted', 'allocated', 'updated_at']) - def _post_downgrade_277(self, engine): - self.assertIndexNotExists(engine, 'fixed_ips', - 'fixed_ips_deleted_allocated_updated_at_idx') - def _check_278(self, engine, data): compute_nodes = oslodbutils.get_table(engine, 'compute_nodes') self.assertEqual(0, len([fk for fk in compute_nodes.foreign_keys if fk.parent.name == 'service_id'])) self.assertTrue(compute_nodes.c.service_id.nullable) - def _post_downgrade_278(self, engine): - compute_nodes = oslodbutils.get_table(engine, 'compute_nodes') - service_id_fks = [fk for fk in compute_nodes.foreign_keys - if fk.parent.name == 'service_id' - and fk.column.name == 'id'] - self.assertEqual(1, len(service_id_fks)) - self.assertFalse(compute_nodes.c.service_id.nullable) - if engine.name == 'postgresql': - # Only make sure that posgresql at least adds a name for the FK - self.assertIsNotNone(service_id_fks[0].name) - elif engine.name != 'sqlite': - # Erm, SQLA<1.0 doesn't return FK names for sqlite so we need to - # check only for other engines - self.assertEqual('fk_compute_nodes_service_id', - service_id_fks[0].name) - def _check_279(self, engine, data): inspector = reflection.Inspector.from_engine(engine) constraints = inspector.get_unique_constraints('compute_nodes') @@ -864,23 +665,10 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync, self.assertIn('uniq_compute_nodes0host0hypervisor_hostname0deleted', constraint_names) - def _post_downgrade_279(self, engine): - inspector = reflection.Inspector.from_engine(engine) - constraints = inspector.get_unique_constraints('compute_nodes') - constraint_names = [constraint['name'] for constraint in constraints] - self.assertNotIn('uniq_compute_nodes0host0hypervisor_hostname0deleted', - constraint_names) - self.assertIn('uniq_compute_nodes0host0hypervisor_hostname', - constraint_names) - def _check_280(self, engine, data): key_pairs = oslodbutils.get_table(engine, 'key_pairs') self.assertFalse(key_pairs.c.name.nullable) - def _post_downgrade_280(self, engine): - key_pairs = oslodbutils.get_table(engine, 'key_pairs') - self.assertTrue(key_pairs.c.name.nullable) - class TestNovaMigrationsSQLite(NovaMigrationsCheckers, test_base.DbTestCase, @@ -922,12 +710,12 @@ class TestNovaMigrationsPostgreSQL(NovaMigrationsCheckers, class ProjectTestCase(test.NoDBTestCase): - def test_all_migrations_have_downgrade(self): + def test_no_migrations_have_downgrade(self): topdir = os.path.normpath(os.path.dirname(__file__) + '/../../../') py_glob = os.path.join(topdir, "nova", "db", "sqlalchemy", "migrate_repo", "versions", "*.py") - missing_downgrade = [] + includes_downgrade = [] for path in glob.iglob(py_glob): has_upgrade = False has_downgrade = False @@ -938,10 +726,11 @@ class ProjectTestCase(test.NoDBTestCase): if 'def downgrade(' in line: has_downgrade = True - if has_upgrade and not has_downgrade: + if has_upgrade and has_downgrade: fname = os.path.basename(path) - missing_downgrade.append(fname) + includes_downgrade.append(fname) - helpful_msg = ("The following migrations are missing a downgrade:" - "\n\t%s" % '\n\t'.join(sorted(missing_downgrade))) - self.assertFalse(missing_downgrade, helpful_msg) + helpful_msg = ("The following migrations have a downgrade " + "which is not supported:" + "\n\t%s" % '\n\t'.join(sorted(includes_downgrade))) + self.assertFalse(includes_downgrade, helpful_msg)