diff options
author | dineshbhor <dinesh.bhor@nttdata.com> | 2016-03-11 07:00:30 +0000 |
---|---|---|
committer | dineshbhor <dinesh.bhor@nttdata.com> | 2017-05-25 18:37:34 +0530 |
commit | a6172924d5fce8aca4a2a718e2a1f45df6f81372 (patch) | |
tree | ee90e20543505a3b84ae2dfc40455ddc6c1991f4 | |
parent | c23e571ff544c4d1e76d569c916842aa7d598c90 (diff) | |
download | oslo-db-a6172924d5fce8aca4a2a718e2a1f45df6f81372.tar.gz |
Raise only DbMigrationError from migrate 'upgrade' method
All the exceptions which are raised from sqlalchemy-migrate upgrade
method are not more user friendly to the operator.
This patch proposes to convert all the exceptions which will be
raised by 'upgrade' method to an oslo_db specific 'DbMigrationError'
exception.
Related-Bug: #1546441
Change-Id: I28533bedba358281ce302b9b021744387a76c04a
-rw-r--r-- | oslo_db/sqlalchemy/migration.py | 5 | ||||
-rw-r--r-- | oslo_db/tests/sqlalchemy/test_migration_common.py | 16 |
2 files changed, 20 insertions, 1 deletions
diff --git a/oslo_db/sqlalchemy/migration.py b/oslo_db/sqlalchemy/migration.py index f6a4d55..457dd35 100644 --- a/oslo_db/sqlalchemy/migration.py +++ b/oslo_db/sqlalchemy/migration.py @@ -75,7 +75,10 @@ def db_sync(engine, abs_path, version=None, init_version=0, sanity_check=True): if sanity_check: _db_schema_sanity_check(engine) if version is None or version > current_version: - migration = versioning_api.upgrade(engine, repository, version) + try: + migration = versioning_api.upgrade(engine, repository, version) + except Exception as ex: + raise exception.DbMigrationError(ex) else: migration = versioning_api.downgrade(engine, repository, version) diff --git a/oslo_db/tests/sqlalchemy/test_migration_common.py b/oslo_db/tests/sqlalchemy/test_migration_common.py index 95d031e..870f208 100644 --- a/oslo_db/tests/sqlalchemy/test_migration_common.py +++ b/oslo_db/tests/sqlalchemy/test_migration_common.py @@ -192,6 +192,22 @@ class TestMigrationCommon(test_base.DbTestCase): self.assertRaises(db_exception.DBMigrationError, migration.db_sync, self.engine, self.path, 'foo') + @mock.patch.object(versioning_api, 'upgrade') + def test_db_sync_script_not_present(self, upgrade): + # For non existent migration script file sqlalchemy-migrate will raise + # VersionNotFoundError which will be wrapped in DbMigrationError. + upgrade.side_effect = migrate_exception.VersionNotFoundError + self.assertRaises(db_exception.DbMigrationError, + migration.db_sync, self.engine, self.path, + self.test_version + 1) + + @mock.patch.object(versioning_api, 'upgrade') + def test_db_sync_known_error_raised(self, upgrade): + upgrade.side_effect = migrate_exception.KnownError + self.assertRaises(db_exception.DbMigrationError, + migration.db_sync, self.engine, self.path, + self.test_version + 1) + def test_db_sync_upgrade(self): init_ver = 55 with test_utils.nested( |