summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCor Cornelisse <cor@hyves.nl>2011-12-21 12:46:58 +0100
committerCor Cornelisse <cor@hyves.nl>2011-12-22 18:35:09 +0100
commitd503d6b1079f9eafe0430754214fc5b6d4e32c09 (patch)
tree7486a5a4f4ff03d3c842a50bab2eaac67f1075ee
parent5bcaecdc7d42b8a4aa2f16e96c064869438d6a12 (diff)
Use SQLAlchemy to drop foreign key in DB migrate
A foreign key constraint needs to be removed in order to succeed in the DB migration. An earlier submitted fix for this uses a mysql drop statement. I think it's cleaner to use sqlalchemy to do this, as it's done this way in other version migrations as well. Fix for bug 907254. Update: IBM from 1928 called, they want their 80 CPL limit back. - on a more serious note, fixed jenkins PEP8 failure Update2: Replaced tab by a spaces Update3: Don't do Foreign Key stuff if the engine is sqlite Update4: Add myself to the Authors file Update5: With the correct mail address Change-Id: Ib021e0ddb2c80ee63888435a9e3761c053534160
-rw-r--r--Authors1
-rw-r--r--nova/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py16
2 files changed, 12 insertions, 5 deletions
diff --git a/Authors b/Authors
index d92663df2..10ab26fc5 100644
--- a/Authors
+++ b/Authors
@@ -30,6 +30,7 @@ Chris Behrens <cbehrens@codestud.com>
Christian Berendt <berendt@b1-systems.de>
Christopher MacGown <chris@pistoncloud.com>
Chuck Short <zulcss@ubuntu.com>
+Cor Cornelisse <cor@hyves.nl>
Cory Wright <corywright@gmail.com>
Dan Prince <dan.prince@rackspace.com>
Dan Wendlandt <dan@nicira.com>
diff --git a/nova/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py b/nova/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py
index a10ae11fc..bc9519f1b 100644
--- a/nova/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py
+++ b/nova/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py
@@ -17,6 +17,7 @@
import sqlalchemy
from sqlalchemy import select, Column, ForeignKey, Integer, String
+from migrate import ForeignKeyConstraint
from nova import log as logging
@@ -31,6 +32,7 @@ def _get_table(name):
def upgrade(migrate_engine):
meta.bind = migrate_engine
+ dialect = migrate_engine.url.get_dialect().name
instance_actions = _get_table('instance_actions')
instances = _get_table('instances')
uuid_column = Column('instance_uuid', String(36),
@@ -48,12 +50,16 @@ def upgrade(migrate_engine):
uuid_column.drop()
raise
- if migrate_engine.name == "mysql":
+ if not dialect.startswith('sqlite'):
try:
- migrate_engine.execute("ALTER TABLE instance_actions " \
- "DROP FOREIGN KEY instance_actions_ibfk_1;")
- except Exception: # Don't care, just fail silently.
- pass
+ fkey_name = list(instance_actions.c.instance_id.foreign_keys)[0].\
+ constraint.name
+ ForeignKeyConstraint(columns=[instance_actions.c.instance_id],
+ refcolumns=[instances.c.id],
+ name=fkey_name).drop()
+ except Exception:
+ logging.error(_("foreign key constraint couldn't be removed"))
+ raise
instance_actions.c.instance_id.drop()