)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bc0c4b30588da1f78b72aae36bcc4f8fedd546e7","unresolved":false,"context_lines":[{"line_number":9,"context_line":"UC on column address changed to (address, deleted)."},{"line_number":10,"context_line":"Used soft_delete instead of delete."},{"line_number":11,"context_line":"Migrate scripts updated."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"blueprint db-enforce-unique-keys"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I2f9f92cae3c9e49e0f594437d130c1654f76a343"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAPn%2F%2Fej4%3D","line":12,"updated":"2013-07-01 03:23:47.000000000","message":"Also there is related bug https://bugs.launchpad.net/nova/+bug/1156227","commit_id":"88a810b4dfc67d86059c6ab8329e2caa3b792651"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"31fc9bf0122c2f10d2267bff16dd9e42259193ab","unresolved":false,"context_lines":[{"line_number":9,"context_line":"UC on column address changed to (address, deleted)."},{"line_number":10,"context_line":"Used soft_delete instead of delete."},{"line_number":11,"context_line":"Migrate scripts updated."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"blueprint db-enforce-unique-keys"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I2f9f92cae3c9e49e0f594437d130c1654f76a343"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAPn%2F%2FeCQ%3D","line":12,"in_reply_to":"AAAAPn%2F%2Fej4%3D","updated":"2013-07-01 09:45:30.000000000","message":"Done","commit_id":"88a810b4dfc67d86059c6ab8329e2caa3b792651"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bc0c4b30588da1f78b72aae36bcc4f8fedd546e7","unresolved":false,"context_lines":[{"line_number":1304,"context_line":"@require_context"},{"line_number":1305,"context_line":"def _virtual_interface_query(context, session\u003dNone):"},{"line_number":1306,"context_line":"    return model_query(context, models.VirtualInterface, session\u003dsession,"},{"line_number":1307,"context_line":"                       read_deleted\u003d\"yes\")"},{"line_number":1308,"context_line":""},{"line_number":1309,"context_line":""},{"line_number":1310,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2FekI%3D","side":"PARENT","line":1307,"updated":"2013-07-01 03:23:47.000000000","message":"why we are not able to remove read_deleted at all in this case?","commit_id":"d28089bbe822c2c413c1ea08e5def4758d18bf92"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"31fc9bf0122c2f10d2267bff16dd9e42259193ab","unresolved":false,"context_lines":[{"line_number":1304,"context_line":"@require_context"},{"line_number":1305,"context_line":"def _virtual_interface_query(context, session\u003dNone):"},{"line_number":1306,"context_line":"    return model_query(context, models.VirtualInterface, session\u003dsession,"},{"line_number":1307,"context_line":"                       read_deleted\u003d\"yes\")"},{"line_number":1308,"context_line":""},{"line_number":1309,"context_line":""},{"line_number":1310,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2FeCM%3D","side":"PARENT","line":1307,"in_reply_to":"AAAAPn%2F%2FekI%3D","updated":"2013-07-01 09:45:30.000000000","message":"Done","commit_id":"d28089bbe822c2c413c1ea08e5def4758d18bf92"}],"nova/db/sqlalchemy/migrate_repo/versions/191_change_virtual_interface_uc.py":[{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"9aaea773aece64546d0b9b78c2fc727324c3bbfe","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                                 OLD_COLUMNS)"},{"line_number":34,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":35,"context_line":"    t \u003d Table(TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":36,"context_line":"    for i in t.indexes:"},{"line_number":37,"context_line":"        if i.name \u003d\u003d OLD_COLUMNS:"},{"line_number":38,"context_line":"            i.drop()"},{"line_number":39,"context_line":"            break"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2F3dY%3D","line":36,"updated":"2013-06-19 14:07:15.000000000","message":"why don\u0027t you use Index(...).drop() ?","commit_id":"844b5f009fe31b75107fb53f5640d501a4202db7"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"81836aaa1a746ed94d17a846cd1af72c75097cd1","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                                 OLD_COLUMNS)"},{"line_number":34,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":35,"context_line":"    t \u003d Table(TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":36,"context_line":"    for i in t.indexes:"},{"line_number":37,"context_line":"        if i.name \u003d\u003d OLD_COLUMNS:"},{"line_number":38,"context_line":"            i.drop()"},{"line_number":39,"context_line":"            break"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2FlkA%3D","line":36,"in_reply_to":"AAAAPn%2F%2F0HM%3D","updated":"2013-06-27 08:51:16.000000000","message":"Done","commit_id":"844b5f009fe31b75107fb53f5640d501a4202db7"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"f501528099bc9a4919d2be09d682986e2c2b81b7","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                                 OLD_COLUMNS)"},{"line_number":34,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":35,"context_line":"    t \u003d Table(TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":36,"context_line":"    for i in t.indexes:"},{"line_number":37,"context_line":"        if i.name \u003d\u003d OLD_COLUMNS:"},{"line_number":38,"context_line":"            i.drop()"},{"line_number":39,"context_line":"            break"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2F0HM%3D","line":36,"in_reply_to":"AAAAPn%2F%2F3Xg%3D","updated":"2013-06-20 15:52:57.000000000","message":"so maybe it will be better write something like\n\nif migrate_engine.name \u003d\u003d \"mysql\" ...\n\nalso you need create this index in downgrade()","commit_id":"844b5f009fe31b75107fb53f5640d501a4202db7"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"81836aaa1a746ed94d17a846cd1af72c75097cd1","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                                 OLD_COLUMNS)"},{"line_number":34,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":35,"context_line":"    t \u003d Table(TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":36,"context_line":"    for i in t.indexes:"},{"line_number":37,"context_line":"        if i.name \u003d\u003d OLD_COLUMNS:"},{"line_number":38,"context_line":"            i.drop()"},{"line_number":39,"context_line":"            break"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2FlkM%3D","line":36,"in_reply_to":"AAAAPn%2F%2F3dY%3D","updated":"2013-06-27 08:51:16.000000000","message":"Done","commit_id":"844b5f009fe31b75107fb53f5640d501a4202db7"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"b825425c83d8acf3d1a2fa9081a1e595bdb0d490","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                                 OLD_COLUMNS)"},{"line_number":34,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":35,"context_line":"    t \u003d Table(TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":36,"context_line":"    for i in t.indexes:"},{"line_number":37,"context_line":"        if i.name \u003d\u003d OLD_COLUMNS:"},{"line_number":38,"context_line":"            i.drop()"},{"line_number":39,"context_line":"            break"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2F3Xg%3D","line":36,"in_reply_to":"AAAAPn%2F%2F3dY%3D","updated":"2013-06-19 14:43:22.000000000","message":"Drop this index only if it present in table (MySQL backend UNIQUE KEY \u0027address\u0027)","commit_id":"844b5f009fe31b75107fb53f5640d501a4202db7"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"f501528099bc9a4919d2be09d682986e2c2b81b7","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":35,"context_line":"    t \u003d Table(TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":36,"context_line":"    for i in t.indexes:"},{"line_number":37,"context_line":"        if i.name \u003d\u003d OLD_COLUMNS:"},{"line_number":38,"context_line":"            i.drop()"},{"line_number":39,"context_line":"            break"},{"line_number":40,"context_line":"    uc \u003d UniqueConstraint(*COLUMNS, table\u003dt, name\u003dUC_NAME)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2F0G8%3D","line":37,"updated":"2013-06-20 15:52:57.000000000","message":"maybe not OLD_COLUMNS but OLD_NAME?","commit_id":"844b5f009fe31b75107fb53f5640d501a4202db7"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"81836aaa1a746ed94d17a846cd1af72c75097cd1","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":35,"context_line":"    t \u003d Table(TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":36,"context_line":"    for i in t.indexes:"},{"line_number":37,"context_line":"        if i.name \u003d\u003d OLD_COLUMNS:"},{"line_number":38,"context_line":"            i.drop()"},{"line_number":39,"context_line":"            break"},{"line_number":40,"context_line":"    uc \u003d UniqueConstraint(*COLUMNS, table\u003dt, name\u003dUC_NAME)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Flj0%3D","line":37,"in_reply_to":"AAAAPn%2F%2F0G8%3D","updated":"2013-06-27 08:51:16.000000000","message":"OLD_COLUMN","commit_id":"844b5f009fe31b75107fb53f5640d501a4202db7"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"31fc9bf0122c2f10d2267bff16dd9e42259193ab","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def upgrade(migrate_engine):"},{"line_number":32,"context_line":"    utils.drop_unique_constraint(migrate_engine, TABLE_NAME, OLD_UC_NAME,"},{"line_number":33,"context_line":"                                 OLD_COLUMN)"},{"line_number":34,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":35,"context_line":"    t \u003d Table(TABLE_NAME, meta, autoload\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2FeIE%3D","line":32,"updated":"2013-07-01 09:45:30.000000000","message":"In all backend.","commit_id":"88a810b4dfc67d86059c6ab8329e2caa3b792651"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bc0c4b30588da1f78b72aae36bcc4f8fedd546e7","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                                 OLD_COLUMN)"},{"line_number":34,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":35,"context_line":"    t \u003d Table(TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":36,"context_line":"    if migrate_engine.name \u003d\u003d \"mysql\":"},{"line_number":37,"context_line":"        index \u003d Index(OLD_COLUMN, t.c[OLD_COLUMN], unique\u003dTrue)"},{"line_number":38,"context_line":"        index.drop()"},{"line_number":39,"context_line":"    uc \u003d UniqueConstraint(*COLUMNS, table\u003dt, name\u003dUC_NAME)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2Fej8%3D","line":36,"updated":"2013-07-01 03:23:47.000000000","message":"And what about postgresql? \n\nAlso I would like to see here note about \"why we don\u0027t have in sqlite this unique constraint\"","commit_id":"88a810b4dfc67d86059c6ab8329e2caa3b792651"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"d507b51616334744039282380fda14b75cb7501f","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                                 OLD_COLUMN)"},{"line_number":34,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":35,"context_line":"    t \u003d Table(TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":36,"context_line":"    if migrate_engine.name \u003d\u003d \"mysql\":"},{"line_number":37,"context_line":"        index \u003d Index(OLD_COLUMN, t.c[OLD_COLUMN], unique\u003dTrue)"},{"line_number":38,"context_line":"        index.drop()"},{"line_number":39,"context_line":"    uc \u003d UniqueConstraint(*COLUMNS, table\u003dt, name\u003dUC_NAME)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2FeS4%3D","line":36,"in_reply_to":"AAAAPn%2F%2Fej8%3D","updated":"2013-07-01 07:31:02.000000000","message":"ok, let it be my note :)\n\nwhy we don\u0027t have in sqlite this unique constraint?","commit_id":"88a810b4dfc67d86059c6ab8329e2caa3b792651"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"31fc9bf0122c2f10d2267bff16dd9e42259193ab","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":35,"context_line":"    t \u003d Table(TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":36,"context_line":"    if migrate_engine.name \u003d\u003d \"mysql\":"},{"line_number":37,"context_line":"        index \u003d Index(OLD_COLUMN, t.c[OLD_COLUMN], unique\u003dTrue)"},{"line_number":38,"context_line":"        index.drop()"},{"line_number":39,"context_line":"    uc \u003d UniqueConstraint(*COLUMNS, table\u003dt, name\u003dUC_NAME)"},{"line_number":40,"context_line":"    uc.create()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2FeII%3D","line":37,"updated":"2013-07-01 09:45:30.000000000","message":"This constraint only present in MySQL backend (UNIQUE KEY \u0027address\u0027).","commit_id":"88a810b4dfc67d86059c6ab8329e2caa3b792651"}],"nova/tests/db/test_db_api.py":[{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"8174b98c05653d8c165849f852ee375af37a8a36","unresolved":false,"context_lines":[{"line_number":4217,"context_line":"        vif \u003d self._create_virt_interface({})"},{"line_number":4218,"context_line":"        # NOTE(boris-42): Due to the bug 1156227 this won\u0027t work. In havana-1"},{"line_number":4219,"context_line":"        #                 it will be fixed."},{"line_number":4220,"context_line":"        self.assertRaises(exception.VirtualInterfaceCreateException,"},{"line_number":4221,"context_line":"                          self._create_virt_interface, {\"uuid\": vif[\u0027uuid\u0027]})"},{"line_number":4222,"context_line":""},{"line_number":4223,"context_line":"    def test_virtual_interface_get(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2FSmM%3D","side":"PARENT","line":4220,"updated":"2013-07-04 23:30:52.000000000","message":"It looks like you\u0027re fixing this bug, right?  Could you reference it in your commit reason?","commit_id":"5daa62bce908e8eef30f64d2c84917258071528f"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"916671f6ca3508763db029cd6c003fae0d66f5a2","unresolved":false,"context_lines":[{"line_number":4217,"context_line":"        vif \u003d self._create_virt_interface({})"},{"line_number":4218,"context_line":"        # NOTE(boris-42): Due to the bug 1156227 this won\u0027t work. In havana-1"},{"line_number":4219,"context_line":"        #                 it will be fixed."},{"line_number":4220,"context_line":"        self.assertRaises(exception.VirtualInterfaceCreateException,"},{"line_number":4221,"context_line":"                          self._create_virt_interface, {\"uuid\": vif[\u0027uuid\u0027]})"},{"line_number":4222,"context_line":""},{"line_number":4223,"context_line":"    def test_virtual_interface_get(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2FSNs%3D","side":"PARENT","line":4220,"in_reply_to":"AAAAPn%2F%2FSmM%3D","updated":"2013-07-05 07:21:17.000000000","message":"Done","commit_id":"5daa62bce908e8eef30f64d2c84917258071528f"}]}
