summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell Sim <russell.sim@gmail.com>2012-04-30 14:48:15 +1000
committerRussell Sim <russell.sim@gmail.com>2012-04-30 14:48:15 +1000
commit5f2eab36345b2e2ac5ca72843c7dc69d35c106da (patch)
tree4651003e5c87f7f5bc2ee73dd3c368f925019c9b
parent76bb37e049818cbde4ca890566d01e85439ce517 (diff)
downloadnova-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.py38
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):