diff options
author | Jenkins <jenkins@review.openstack.org> | 2016-04-07 18:16:55 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2016-04-07 18:16:55 +0000 |
commit | f4094332feb81758f9f99558fdf9e2caf1d4a45b (patch) | |
tree | 6f5822a3c6e55fbd3d5138fbc99350a1a3f45f50 | |
parent | cc24dca29c256288a9b5b8f2557f776f88fa6655 (diff) | |
parent | 1a349bb96be5dece65a672648ecc6f7cae9641b2 (diff) | |
download | trove-f4094332feb81758f9f99558fdf9e2caf1d4a45b.tar.gz |
Merge "Fixes migrations for MySQL 5.6.* and MariaDB 10.1.*" into stable/liberty
-rw-r--r-- | trove/db/sqlalchemy/migrate_repo/versions/019_datastore_fix.py | 23 | ||||
-rw-r--r-- | trove/db/sqlalchemy/utils.py | 15 |
2 files changed, 35 insertions, 3 deletions
diff --git a/trove/db/sqlalchemy/migrate_repo/versions/019_datastore_fix.py b/trove/db/sqlalchemy/migrate_repo/versions/019_datastore_fix.py index 1b51ee91..dab329aa 100644 --- a/trove/db/sqlalchemy/migrate_repo/versions/019_datastore_fix.py +++ b/trove/db/sqlalchemy/migrate_repo/versions/019_datastore_fix.py @@ -20,6 +20,7 @@ from sqlalchemy.sql.expression import update from trove.common import cfg from trove.db.sqlalchemy.migrate_repo.schema import Table +from trove.db.sqlalchemy import utils as db_utils CONF = cfg.CONF LEGACY_IMAGE_ID = "00000000-0000-0000-0000-000000000000" @@ -89,6 +90,9 @@ def upgrade(migrate_engine): meta.bind = migrate_engine instance_table = Table('instances', meta, autoload=True) + datastore_versions_table = Table('datastore_versions', + meta, + autoload=True) if has_instances_wo_datastore_version(instance_table): instances = find_all_instances_wo_datastore_version(instance_table) @@ -97,9 +101,6 @@ def upgrade(migrate_engine): datastores_table = Table('datastores', meta, autoload=True) - datastore_versions_table = Table('datastore_versions', - meta, - autoload=True) version_id = create_legacy_version(datastores_table, datastore_versions_table, @@ -111,8 +112,24 @@ def upgrade(migrate_engine): values=dict(datastore_version_id=version_id) ).execute() + constraint_names = db_utils.get_foreign_key_constraint_names( + engine=migrate_engine, + table='instances', + columns=['datastore_version_id'], + ref_table='datastore_versions', + ref_columns=['id']) + db_utils.drop_foreign_key_constraints( + constraint_names=constraint_names, + columns=[instance_table.c.datastore_version_id], + ref_columns=[datastore_versions_table.c.id]) + instance_table.c.datastore_version_id.alter(nullable=False) + db_utils.create_foreign_key_constraints( + constraint_names=constraint_names, + columns=[instance_table.c.datastore_version_id], + ref_columns=[datastore_versions_table.c.id]) + def downgrade(migrate_engine): meta.bind = migrate_engine diff --git a/trove/db/sqlalchemy/utils.py b/trove/db/sqlalchemy/utils.py index ba5ed2e7..b7079d1d 100644 --- a/trove/db/sqlalchemy/utils.py +++ b/trove/db/sqlalchemy/utils.py @@ -52,3 +52,18 @@ def drop_foreign_key_constraints(constraint_names, columns, refcolumns=ref_columns, name=constraint_name) fkey_constraint.drop() + + +def create_foreign_key_constraints(constraint_names, columns, + ref_columns): + """Create the foreign key constraints that match the given + criteria. + :param constraint_names: List of foreign key constraint names + :param columns: List of the foreign key columns. + :param ref_columns: List of the referenced columns. + """ + for constraint_name in constraint_names: + fkey_constraint = ForeignKeyConstraint(columns=columns, + refcolumns=ref_columns, + name=constraint_name) + fkey_constraint.create() |