)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"d0ecfa08bef565d3423135af1c69a83f74c286ec","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     dineshbhor \u003cdinesh.bhor@nttdata.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-05-26 12:04:41 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Raise DbMigrationError instead of KeyError"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Provision is made to raise VersionNotFoundError exception"},{"line_number":10,"context_line":"from sqlalchemy-migrate [1] if migration script file is not"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"bab6814e_bc899c28","line":7,"updated":"2016-05-26 09:19:27.000000000","message":"This got me thinking about compatibility between oslo.db releases: we change the type of an exception raised in db_sync() (although it probably was an implementation detail and not documented), which potentially breaks users of this function, who may still except KeyError.\n\nHow about we do the following: we introduce a new concrete exception type in oslo_db.exception to represent this problem, when a particular version can\u0027t be found. This new exception type will inherit from both DbMigrationError (so that users of db_*() functions can except general migration errors) and KeyError classes to make sure db_sync() remains backwards compatible.","commit_id":"b31060ed65bd6ca5e272e74e8cbd38f9bce716fc"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"940518a76e1cb862ab83173e3895ed89e068187b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     dineshbhor \u003cdinesh.bhor@nttdata.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-05-23 15:44:09 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Raise DbMigrationError instead of KeyError"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Provision is made to raise VersionNotFoundError exception if migration"},{"line_number":10,"context_line":"script file is not present from sqlalchemy-migrate in change"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ff0f0b1f_83c8d6a5","line":7,"range":{"start_line":7,"start_character":34,"end_line":7,"end_character":42},"updated":"2017-05-24 10:41:41.000000000","message":"change to VersionNotFoundError ?","commit_id":"bb3d2097eede8e8b1af7a9069099349c28679a25"}],"oslo_db/sqlalchemy/compat/utils.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"d0ecfa08bef565d3423135af1c69a83f74c286ec","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":"import re"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import migrate"},{"line_number":15,"context_line":"from migrate import exceptions"},{"line_number":16,"context_line":"import sqlalchemy"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_39413eaa","line":14,"updated":"2016-05-26 09:19:27.000000000","message":"nit: this could be a oneline import, e.g.\n\n  import migrate.exceptions as migrate_exc","commit_id":"b31060ed65bd6ca5e272e74e8cbd38f9bce716fc"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"d0ecfa08bef565d3423135af1c69a83f74c286ec","unresolved":false,"context_lines":[{"line_number":28,"context_line":")"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"migrate_011 \u003d MIGRATE_VERSION \u003e\u003d (0, 11, 0)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"sqla_100 \u003d SQLA_VERSION \u003e\u003d (1, 0, 0)"},{"line_number":34,"context_line":"sqla_097 \u003d SQLA_VERSION \u003e\u003d (0, 9, 7)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_b9bd2e6a","line":31,"updated":"2016-05-26 09:19:27.000000000","message":"So I\u0027m a bit reluctant to merge this before the corresponding migrate version is released - just want to make sure we use the correct version number here (in case the next migrate release will get an unexpected version bump)","commit_id":"b31060ed65bd6ca5e272e74e8cbd38f9bce716fc"}],"oslo_db/sqlalchemy/migration.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"e9cf3781e53257c0dd4a71c5d478f2440e6bbbb1","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    if version is None or version \u003e current_version:"},{"line_number":79,"context_line":"        try:"},{"line_number":80,"context_line":"            migration \u003d versioning_api.upgrade(engine, repository, version)"},{"line_number":81,"context_line":"        except versioning_exceptions.VersionNotFoundError as exc:"},{"line_number":82,"context_line":"            raise exception.DbMigrationError(exc)"},{"line_number":83,"context_line":"    else:"},{"line_number":84,"context_line":"        migration \u003d versioning_api.downgrade(engine, repository,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_078b6cc4","line":81,"updated":"2016-05-19 13:30:29.000000000","message":"did you mean InvalidVersionError here? (https://github.com/openstack/sqlalchemy-migrate/blob/master/migrate/exceptions.py)\n\nThere is no VersionNotFoundError","commit_id":"5c35df69c04383cc067cc70c8856f3eee968f1e0"},{"author":{"_account_id":20191,"name":"Dinesh Bhor","email":"bhordinesh07@gmail.com","username":"dineshbhor"},"change_message_id":"0892ca282456266f022721fe6763343bd9910dd0","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    if version is None or version \u003e current_version:"},{"line_number":79,"context_line":"        try:"},{"line_number":80,"context_line":"            migration \u003d versioning_api.upgrade(engine, repository, version)"},{"line_number":81,"context_line":"        except versioning_exceptions.VersionNotFoundError as exc:"},{"line_number":82,"context_line":"            raise exception.DbMigrationError(exc)"},{"line_number":83,"context_line":"    else:"},{"line_number":84,"context_line":"        migration \u003d versioning_api.downgrade(engine, repository,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_0ad0931e","line":81,"in_reply_to":"bab6814e_078b6cc4","updated":"2016-05-19 13:40:35.000000000","message":"Hi Roman,\nThank you for your review.\nI have proposed a patch in sqlalchemy-migrate project to raise VersionNotFoundError exception in case of migration script file is not present in migration repository. I have added a dependency on patch [1].\n\n[1] https://review.openstack.org/#/c/296200/","commit_id":"5c35df69c04383cc067cc70c8856f3eee968f1e0"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"f88c196ac4e4ab1b5c91ec232cb775c5e93a864a","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    if version is None or version \u003e current_version:"},{"line_number":79,"context_line":"        try:"},{"line_number":80,"context_line":"            migration \u003d versioning_api.upgrade(engine, repository, version)"},{"line_number":81,"context_line":"        except versioning_exceptions.VersionNotFoundError as exc:"},{"line_number":82,"context_line":"            raise exception.DbMigrationError(exc)"},{"line_number":83,"context_line":"    else:"},{"line_number":84,"context_line":"        migration \u003d versioning_api.downgrade(engine, repository,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_b8d764ec","line":81,"in_reply_to":"bab6814e_0ad0931e","updated":"2016-05-24 10:03:22.000000000","message":"Hmm, I think having a Depends-On here won\u0027t be enough, as it only helps you to express the dependencies in the Zuul gate, when 2 patches  must be tested simultaneously.\n\noslo.db, on the hand, can and most likely will be installed with a particular version of sqlalchemy-migrate. To make sure this works correctly, we\u0027ll need to bump the minimum required version in requirements.txt (which effectively means global-requirements first).","commit_id":"5c35df69c04383cc067cc70c8856f3eee968f1e0"},{"author":{"_account_id":20191,"name":"Dinesh Bhor","email":"bhordinesh07@gmail.com","username":"dineshbhor"},"change_message_id":"728b00c868bafef684e9357127fe7a3c89d2898d","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    if version is None or version \u003e current_version:"},{"line_number":79,"context_line":"        try:"},{"line_number":80,"context_line":"            migration \u003d versioning_api.upgrade(engine, repository, version)"},{"line_number":81,"context_line":"        except versioning_exceptions.VersionNotFoundError as exc:"},{"line_number":82,"context_line":"            raise exception.DbMigrationError(exc)"},{"line_number":83,"context_line":"    else:"},{"line_number":84,"context_line":"        migration \u003d versioning_api.downgrade(engine, repository,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_fbc85157","line":81,"in_reply_to":"bab6814e_3bba47c1","updated":"2016-05-26 06:58:59.000000000","message":"Done","commit_id":"5c35df69c04383cc067cc70c8856f3eee968f1e0"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"bf3d12899c680ad41177aff13278461cd886a345","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    if version is None or version \u003e current_version:"},{"line_number":79,"context_line":"        try:"},{"line_number":80,"context_line":"            migration \u003d versioning_api.upgrade(engine, repository, version)"},{"line_number":81,"context_line":"        except versioning_exceptions.VersionNotFoundError as exc:"},{"line_number":82,"context_line":"            raise exception.DbMigrationError(exc)"},{"line_number":83,"context_line":"    else:"},{"line_number":84,"context_line":"        migration \u003d versioning_api.downgrade(engine, repository,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_3bba47c1","line":81,"in_reply_to":"bab6814e_b8d764ec","updated":"2016-05-24 12:11:17.000000000","message":"How about we provide a compatibility layer, let\u0027s say in https://github.com/openstack/oslo.db/blob/master/oslo_db/sqlalchemy/compat/utils.py , and define a tuple of exceptions to be excepted here, so that we\u0027d except a KeyError, if sqlalchemy-migrate without https://review.openstack.org/#/c/296200/ is used and migrate.exception.VersionNotFoundError , if the latter is provided by the library version installed?","commit_id":"5c35df69c04383cc067cc70c8856f3eee968f1e0"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"d98a9071133e5c3f548bf56417018d350be8259d","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    if version is None or version \u003e current_version:"},{"line_number":78,"context_line":"        try:"},{"line_number":79,"context_line":"            migration \u003d versioning_api.upgrade(engine, repository, version)"},{"line_number":80,"context_line":"        except versioning_exceptions.VersionNotFoundError as exc:"},{"line_number":81,"context_line":"            raise exception.DbMigrationError(exc)"},{"line_number":82,"context_line":"    else:"},{"line_number":83,"context_line":"        migration \u003d versioning_api.downgrade(engine, repository,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ff0f0b1f_03796692","line":80,"range":{"start_line":80,"start_character":8,"end_line":80,"end_character":65},"updated":"2017-05-24 10:37:10.000000000","message":"Other exceptions can be raised here, for example https://github.com/openstack/sqlalchemy-migrate/blob/master/migrate/versioning/api.py#L383, Is there any reason we don\u0027t convert all types of exception to exception.DbMigrationError here ?","commit_id":"bb3d2097eede8e8b1af7a9069099349c28679a25"}]}
