diff options
| author | Russell Sim <russell.sim@gmail.com> | 2012-04-30 14:48:15 +1000 |
|---|---|---|
| committer | Russell Sim <russell.sim@gmail.com> | 2012-04-30 14:48:15 +1000 |
| commit | 5f2eab36345b2e2ac5ca72843c7dc69d35c106da (patch) | |
| tree | 4651003e5c87f7f5bc2ee73dd3c368f925019c9b | |
| parent | 76bb37e049818cbde4ca890566d01e85439ce517 (diff) | |
| download | nova-5f2eab36345b2e2ac5ca72843c7dc69d35c106da.tar.gz nova-5f2eab36345b2e2ac5ca72843c7dc69d35c106da.tar.xz nova-5f2eab36345b2e2ac5ca72843c7dc69d35c106da.zip | |
Fix InnoDB migration bug in migrate script 86.
Fixes bug 991672
Only change tables that aren't already InnoDB. Attempting to migrate
an InnoDB table to InnoDB will causes an obscure "Error on rename"
error if the table has foreign key relationships.
Change-Id: I7bd5c964da851a8dd9cc0a6af3f93c07786b6781
| -rw-r--r-- | nova/db/sqlalchemy/migrate_repo/versions/086_set_engine_mysql_innodb.py | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/nova/db/sqlalchemy/migrate_repo/versions/086_set_engine_mysql_innodb.py b/nova/db/sqlalchemy/migrate_repo/versions/086_set_engine_mysql_innodb.py index f1bdf7c96..da985b956 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/086_set_engine_mysql_innodb.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/086_set_engine_mysql_innodb.py @@ -20,32 +20,24 @@ from sqlalchemy import MetaData def upgrade(migrate_engine): # Upgrade operations go here. Don't create your own engine; # bind migrate_engine to your metadata + + tables = ["agent_builds", "aggregate_hosts", "aggregate_metadata", + "aggregates", "block_device_mapping", "bw_usage_cache", + "dns_domains", "instance_faults", "instance_type_extra_specs", + "provider_fw_rules", "quota_classes", "s3_images", + "sm_backend_config", "sm_flavors", "sm_volume", + "virtual_storage_arrays", "volume_metadata", + "volume_type_extra_specs", "volume_types"] + meta = MetaData() meta.bind = migrate_engine if migrate_engine.name == "mysql": - migrate_engine.execute("ALTER TABLE agent_builds Engine=InnoDB") - migrate_engine.execute("ALTER TABLE aggregate_hosts Engine=InnoDB") - migrate_engine.execute("ALTER TABLE aggregate_metadata Engine=InnoDB") - migrate_engine.execute("ALTER TABLE aggregates Engine=InnoDB") - migrate_engine.execute( - "ALTER TABLE block_device_mapping Engine=InnoDB") - migrate_engine.execute("ALTER TABLE bw_usage_cache Engine=InnoDB") - migrate_engine.execute("ALTER TABLE dns_domains Engine=InnoDB") - migrate_engine.execute("ALTER TABLE instance_faults Engine=InnoDB") - migrate_engine.execute( - "ALTER TABLE instance_type_extra_specs Engine=InnoDB") - migrate_engine.execute("ALTER TABLE provider_fw_rules Engine=InnoDB") - migrate_engine.execute("ALTER TABLE quota_classes Engine=InnoDB") - migrate_engine.execute("ALTER TABLE s3_images Engine=InnoDB") - migrate_engine.execute("ALTER TABLE sm_backend_config Engine=InnoDB") - migrate_engine.execute("ALTER TABLE sm_flavors Engine=InnoDB") - migrate_engine.execute("ALTER TABLE sm_volume Engine=InnoDB") - migrate_engine.execute( - "ALTER TABLE virtual_storage_arrays Engine=InnoDB") - migrate_engine.execute("ALTER TABLE volume_metadata Engine=InnoDB") - migrate_engine.execute( - "ALTER TABLE volume_type_extra_specs Engine=InnoDB") - migrate_engine.execute("ALTER TABLE volume_types Engine=InnoDB") + d = migrate_engine.execute("SHOW TABLE STATUS WHERE Engine!='InnoDB';") + for row in d.fetchall(): + table_name = row[0] + if table_name in tables: + migrate_engine.execute("ALTER TABLE %s Engine=InnoDB" % + table_name) def downgrade(migrate_engine): |
