summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--heat/openstack/common/db/sqlalchemy/migration.py18
1 files changed, 14 insertions, 4 deletions
diff --git a/heat/openstack/common/db/sqlalchemy/migration.py b/heat/openstack/common/db/sqlalchemy/migration.py
index 42c675cd0..c0297ea6d 100644
--- a/heat/openstack/common/db/sqlalchemy/migration.py
+++ b/heat/openstack/common/db/sqlalchemy/migration.py
@@ -200,7 +200,7 @@ def patch_migrate():
sqlite.SQLiteConstraintGenerator)
-def db_sync(abs_path, version=None, init_version=0):
+def db_sync(abs_path, version=None, init_version=0, sanity_check=True):
"""Upgrade or downgrade a database.
Function runs the upgrade() or downgrade() functions in change scripts.
@@ -210,7 +210,9 @@ def db_sync(abs_path, version=None, init_version=0):
If None - database will update to the latest
available version.
:param init_version: Initial database version
+ :param sanity_check: Require schema sanity checking for all tables
"""
+
if version is not None:
try:
version = int(version)
@@ -220,7 +222,8 @@ def db_sync(abs_path, version=None, init_version=0):
current_version = db_version(abs_path, init_version)
repository = _find_migrate_repo(abs_path)
- _db_schema_sanity_check()
+ if sanity_check:
+ _db_schema_sanity_check()
if version is None or version > current_version:
return versioning_api.upgrade(get_engine(), repository, version)
else:
@@ -236,8 +239,15 @@ def _db_schema_sanity_check():
'where TABLE_SCHEMA=%s and '
'TABLE_COLLATION NOT LIKE "%%utf8%%"')
- table_names = [res[0] for res in engine.execute(onlyutf8_sql,
- engine.url.database)]
+ # NOTE(morganfainberg): exclude the sqlalchemy-migrate and alembic
+ # versioning tables from the tables we need to verify utf8 status on.
+ # Non-standard table names are not supported.
+ EXCLUDED_TABLES = ['migrate_version', 'alembic_version']
+
+ table_names = [res[0] for res in
+ engine.execute(onlyutf8_sql, engine.url.database) if
+ res[0].lower() not in EXCLUDED_TABLES]
+
if len(table_names) > 0:
raise ValueError(_('Tables "%s" have non utf8 collation, '
'please make sure all tables are CHARSET=utf8'