summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-04-07 18:16:55 +0000
committerGerrit Code Review <review@openstack.org>2016-04-07 18:16:55 +0000
commitf4094332feb81758f9f99558fdf9e2caf1d4a45b (patch)
tree6f5822a3c6e55fbd3d5138fbc99350a1a3f45f50
parentcc24dca29c256288a9b5b8f2557f776f88fa6655 (diff)
parent1a349bb96be5dece65a672648ecc6f7cae9641b2 (diff)
downloadtrove-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.py23
-rw-r--r--trove/db/sqlalchemy/utils.py15
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()