)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e0be33af032b43220311d1416b71f284d7ac3473","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"New API to force live migration to complete and to cancel ongoing live"},{"line_number":10,"context_line":"migration will take server id and migration id as arguments."},{"line_number":11,"context_line":"This patch adds newmethod to DB API to retrieve migration with given id"},{"line_number":12,"context_line":"for particular instance id."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I2eebf2a16b03a327348557b88fa573cb40917e9b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a740942_37d8b352","line":11,"range":{"start_line":11,"start_character":16,"end_line":11,"end_character":25},"updated":"2015-12-14 16:48:10.000000000","message":"s/newmethod/a new method/","commit_id":"6d48013e9aa67ffb92e210b6613fdb7d06fb3d50"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"03c3f2b6568c171d7c8f7ec89c9b6d95bd412847","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"New API to force live migration to complete and to cancel ongoing live"},{"line_number":10,"context_line":"migration will take server id and migration id as arguments."},{"line_number":11,"context_line":"This patch adds newmethod to DB API to retrieve migration with given id"},{"line_number":12,"context_line":"for particular instance id."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I2eebf2a16b03a327348557b88fa573cb40917e9b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"da6ed579_73dda641","line":11,"range":{"start_line":11,"start_character":16,"end_line":11,"end_character":25},"updated":"2016-01-12 16:33:44.000000000","message":"nit: s/newmethod/a new method/","commit_id":"4dda09ef55abff900195ce8f7d5b7d44a905c217"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"20d6df0ee4ae0049043f34deeb5740d86e5db2b0","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"New API to force live migration to complete and to cancel ongoing live"},{"line_number":10,"context_line":"migration will take server id and migration id as arguments."},{"line_number":11,"context_line":"This patch adds newmethod to DB API to retrieve migration with given id"},{"line_number":12,"context_line":"for particular instance id."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Partially implements: blueprint pause-vm-during-live-migration"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba63e191_f80c1d44","line":11,"range":{"start_line":11,"start_character":16,"end_line":11,"end_character":25},"updated":"2016-01-19 09:07:35.000000000","message":"a new method","commit_id":"dc8233f9225b27ef2bd6f0f0c8b54df7bff223f2"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"274e93b57891aefc0a7304c1aa4c37783eb339fd","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"New API to force live migration to complete and to cancel ongoing live"},{"line_number":10,"context_line":"migration will take server id and migration id as arguments."},{"line_number":11,"context_line":"This patch adds newmethod to DB API to retrieve migration with given id"},{"line_number":12,"context_line":"for particular instance id."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Partially implements: blueprint pause-vm-during-live-migration"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"9a68dd71_4b2c1a02","line":11,"range":{"start_line":11,"start_character":16,"end_line":11,"end_character":25},"updated":"2016-01-22 11:24:25.000000000","message":"nit: already spotted, just in case of respin \u0027new method\u0027","commit_id":"b45eb7548557d1924a9715b5cfe5477f598c92b5"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"d1d8782e55c0f19fd9da306620267ccce08dd2ce","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"New API to force live migration to complete and to cancel ongoing live"},{"line_number":10,"context_line":"migration will take server id and migration id as arguments."},{"line_number":11,"context_line":"This patch adds newmethod to DB API to retrieve migration with given id"},{"line_number":12,"context_line":"for particular instance id."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Partially implements: blueprint pause-vm-during-live-migration"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"9a68dd71_94eb0513","line":11,"range":{"start_line":11,"start_character":16,"end_line":11,"end_character":25},"in_reply_to":"9a68dd71_4b2c1a02","updated":"2016-01-22 14:57:12.000000000","message":"Done","commit_id":"b45eb7548557d1924a9715b5cfe5477f598c92b5"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"fc08194cc19cdbecbf20f9661a297c05576996e6","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"New API to force live migration to complete and to cancel ongoing live"},{"line_number":10,"context_line":"migration will take server id and migration id as arguments."},{"line_number":11,"context_line":"This patch adds newmethod to DB API to retrieve migration with given id"},{"line_number":12,"context_line":"for particular instance id."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Partially implements: blueprint pause-vm-during-live-migration"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"9a68dd71_40106f59","line":11,"range":{"start_line":11,"start_character":16,"end_line":11,"end_character":25},"in_reply_to":"9a68dd71_4b2c1a02","updated":"2016-01-22 14:12:36.000000000","message":"Still forgetting to fix this one...","commit_id":"b45eb7548557d1924a9715b5cfe5477f598c92b5"}],"nova/db/api.py":[{"author":{"_account_id":7461,"name":"Paul Murray","email":"pmurray@hpe.com","username":"ptm"},"change_message_id":"a4717f6469ccfed6b79e58716ab62dae51086ad4","unresolved":false,"context_lines":[{"line_number":476,"context_line":""},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"def migration_get_by_id_and_instance(context, migration_id, instance_uuid):"},{"line_number":479,"context_line":"    \"\"\"Finds a migration by the id.\"\"\""},{"line_number":480,"context_line":"    return IMPL.migration_get_by_id_and_instance(context,"},{"line_number":481,"context_line":"                                                 migration_id,"},{"line_number":482,"context_line":"                                                 instance_uuid)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_5caf1394","line":479,"updated":"2016-01-04 16:00:34.000000000","message":"Should change this docstring: \"...and instance uuid\" ?","commit_id":"089d5d922325ff00cc8d6e6ec132c30d9756a838"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":6508,"name":"Dmitry Stepanenko","email":"dstepanenko@mirantis.com","username":"dstepanenko"},"change_message_id":"fea164278d89dfaef23c86b25f63ea764145dfc5","unresolved":false,"context_lines":[{"line_number":4523,"context_line":"@main_context_manager.reader"},{"line_number":4524,"context_line":"def migration_get_by_id_and_instance(context, id, instance_uuid):"},{"line_number":4525,"context_line":"    result \u003d model_query(context, models.Migration, read_deleted\u003d\"yes\").\\"},{"line_number":4526,"context_line":"                     filter_by(id\u003did).\\"},{"line_number":4527,"context_line":"                     filter_by(instance_uuid\u003dinstance_uuid).\\"},{"line_number":4528,"context_line":"                     first()"},{"line_number":4529,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a68dd71_958a6cbe","line":4526,"range":{"start_line":4526,"start_character":21,"end_line":4526,"end_character":30},"updated":"2016-01-21 13:49:00.000000000","message":"nit:\n\nwhat do you think about replacing \n\nfilter_by(id\u003did).filter_by(instance_uuid\u003dinstance_uuid)\n\nwith \n\nfilter_by(id\u003did, instance_uuid\u003dinstance_uuid)\n\n?","commit_id":"b45eb7548557d1924a9715b5cfe5477f598c92b5"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"fc08194cc19cdbecbf20f9661a297c05576996e6","unresolved":false,"context_lines":[{"line_number":4523,"context_line":"@main_context_manager.reader"},{"line_number":4524,"context_line":"def migration_get_by_id_and_instance(context, id, instance_uuid):"},{"line_number":4525,"context_line":"    result \u003d model_query(context, models.Migration, read_deleted\u003d\"yes\").\\"},{"line_number":4526,"context_line":"                     filter_by(id\u003did).\\"},{"line_number":4527,"context_line":"                     filter_by(instance_uuid\u003dinstance_uuid).\\"},{"line_number":4528,"context_line":"                     first()"},{"line_number":4529,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a68dd71_c0477fba","line":4526,"range":{"start_line":4526,"start_character":21,"end_line":4526,"end_character":30},"in_reply_to":"9a68dd71_958a6cbe","updated":"2016-01-22 14:12:36.000000000","message":"I treat current form as a way more readable and we do this way in every method there.","commit_id":"b45eb7548557d1924a9715b5cfe5477f598c92b5"},{"author":{"_account_id":18247,"name":"Mark Doffman","email":"mdoffman@linux.vnet.ibm.com","username":"doffm"},"change_message_id":"7cfc6feee8cfbdaa3b981b5759b84d1b8b626d1b","unresolved":false,"context_lines":[{"line_number":4529,"context_line":""},{"line_number":4530,"context_line":"@main_context_manager.reader"},{"line_number":4531,"context_line":"def migration_get_by_id_and_instance(context, id, instance_uuid):"},{"line_number":4532,"context_line":"    result \u003d model_query(context, models.Migration, read_deleted\u003d\"yes\").\\"},{"line_number":4533,"context_line":"                     filter_by(id\u003did).\\"},{"line_number":4534,"context_line":"                     filter_by(instance_uuid\u003dinstance_uuid).\\"},{"line_number":4535,"context_line":"                     first()"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a68dd71_648f43cd","line":4532,"range":{"start_line":4532,"start_character":69,"end_line":4532,"end_character":73},"updated":"2016-01-26 11:17:42.000000000","message":"Why read_deleted\u003d\u0027yes\u0027, is there any way that a deleted migration will be forced to complete? Would this even work if not using read_deleted\u003dyes on other calls to the migrations db? Do all migrations db accesses use \u0027read_deleted\u003dyes\u0027?","commit_id":"c1549e35fcbe9f0feaa44f2219c9f3e5bc5307c9"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"16ab4e6e21746d6e83b8abcf88ea18bdf1bc72f9","unresolved":false,"context_lines":[{"line_number":4529,"context_line":""},{"line_number":4530,"context_line":"@main_context_manager.reader"},{"line_number":4531,"context_line":"def migration_get_by_id_and_instance(context, id, instance_uuid):"},{"line_number":4532,"context_line":"    result \u003d model_query(context, models.Migration, read_deleted\u003d\"yes\").\\"},{"line_number":4533,"context_line":"                     filter_by(id\u003did).\\"},{"line_number":4534,"context_line":"                     filter_by(instance_uuid\u003dinstance_uuid).\\"},{"line_number":4535,"context_line":"                     first()"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a5de9d1_cedc0549","line":4532,"range":{"start_line":4532,"start_character":69,"end_line":4532,"end_character":73},"in_reply_to":"7a5de9d1_12e249d6","updated":"2016-01-27 16:00:29.000000000","message":"Mark raised a good point here, I just checked the specs for aborting a running live migration and it is not clear if we want to mark the record as \"deleted\" or if we want to just change the status to \"aborted\". We need to get some consensus on this point as it is going to have impact on this read_deleted flag.","commit_id":"c1549e35fcbe9f0feaa44f2219c9f3e5bc5307c9"},{"author":{"_account_id":18247,"name":"Mark Doffman","email":"mdoffman@linux.vnet.ibm.com","username":"doffm"},"change_message_id":"16cafaeb2439b4e45228515b059cf5ab9b3e6be3","unresolved":false,"context_lines":[{"line_number":4529,"context_line":""},{"line_number":4530,"context_line":"@main_context_manager.reader"},{"line_number":4531,"context_line":"def migration_get_by_id_and_instance(context, id, instance_uuid):"},{"line_number":4532,"context_line":"    result \u003d model_query(context, models.Migration, read_deleted\u003d\"yes\").\\"},{"line_number":4533,"context_line":"                     filter_by(id\u003did).\\"},{"line_number":4534,"context_line":"                     filter_by(instance_uuid\u003dinstance_uuid).\\"},{"line_number":4535,"context_line":"                     first()"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a5de9d1_12e249d6","line":4532,"range":{"start_line":4532,"start_character":69,"end_line":4532,"end_character":73},"in_reply_to":"7a5de9d1_9b409f09","updated":"2016-01-27 14:16:55.000000000","message":"The Migrations objects are never deleted in the database. Not sure if this is a good idea, but its whats there. This makes using read_deleted pointless. It should probably be removed.","commit_id":"c1549e35fcbe9f0feaa44f2219c9f3e5bc5307c9"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"c325cfa78ab670149d830bcc4a821d1190638a59","unresolved":false,"context_lines":[{"line_number":4529,"context_line":""},{"line_number":4530,"context_line":"@main_context_manager.reader"},{"line_number":4531,"context_line":"def migration_get_by_id_and_instance(context, id, instance_uuid):"},{"line_number":4532,"context_line":"    result \u003d model_query(context, models.Migration, read_deleted\u003d\"yes\").\\"},{"line_number":4533,"context_line":"                     filter_by(id\u003did).\\"},{"line_number":4534,"context_line":"                     filter_by(instance_uuid\u003dinstance_uuid).\\"},{"line_number":4535,"context_line":"                     first()"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a5de9d1_9b409f09","line":4532,"range":{"start_line":4532,"start_character":69,"end_line":4532,"end_character":73},"in_reply_to":"9a68dd71_648f43cd","updated":"2016-01-27 11:50:12.000000000","message":"My understanding is that this method might be used by different functions.\n\nLet\u0027s say we aborted live migration. My assumption is that it will set \u0027deleted\u0027 flag in DB to True, because it is a DELETE API call. In this case it depends what we want to return to end-user when he triggers force complete - MigrationNotFound because it is marked as deleted in the DB or MigrationInvalidState because the state is invalid for forcing LM to complete.\n\nOn the other hand it will be used by getting migration details. In this case someone might ask for details of migration that has been aborted(deleted) and I think that we should return such migrations.\n\nIMO to keep consistency we should be able to return such migration in case of a GET call. In case of forcing aborted live migration we should raise MigrationInvalidState. So we won\u0027t have situation where you can GET aborted live migration, but forcing the same migration to complete leads to MigrationNotFound error.\n\nIn case that DELETE call will not set \u0027deleted\u0027 flag in the database to True I will be able to make it None by default.","commit_id":"c1549e35fcbe9f0feaa44f2219c9f3e5bc5307c9"}],"nova/tests/unit/db/test_db_api.py":[{"author":{"_account_id":6508,"name":"Dmitry Stepanenko","email":"dstepanenko@mirantis.com","username":"dstepanenko"},"change_message_id":"fea164278d89dfaef23c86b25f63ea764145dfc5","unresolved":false,"context_lines":[{"line_number":1523,"context_line":"            self.ctxt, migration_id, instance_uuid)"},{"line_number":1524,"context_line":"        self.assertEqual(migration_id, instance_migration.id)"},{"line_number":1525,"context_line":"        self.assertEqual(instance_uuid, instance_migration.instance_uuid)"},{"line_number":1526,"context_line":"        self.assertEqual(\u0027a\u0027, instance_migration.source_node)"},{"line_number":1527,"context_line":"        self.assertEqual(\u0027b\u0027, instance_migration.dest_node)"},{"line_number":1528,"context_line":""},{"line_number":1529,"context_line":"    def test_get_migration_for_instance_not_found(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a68dd71_644aa8c7","line":1526,"updated":"2016-01-21 13:49:00.000000000","message":"What do you think about not hardcoding expected values for instance_migration.source_node and instance_migration.dest_node, but getting them from migrations[0].source_node and migrations[0].dest_node respectively?","commit_id":"b45eb7548557d1924a9715b5cfe5477f598c92b5"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"d1d8782e55c0f19fd9da306620267ccce08dd2ce","unresolved":false,"context_lines":[{"line_number":1523,"context_line":"            self.ctxt, migration_id, instance_uuid)"},{"line_number":1524,"context_line":"        self.assertEqual(migration_id, instance_migration.id)"},{"line_number":1525,"context_line":"        self.assertEqual(instance_uuid, instance_migration.instance_uuid)"},{"line_number":1526,"context_line":"        self.assertEqual(\u0027a\u0027, instance_migration.source_node)"},{"line_number":1527,"context_line":"        self.assertEqual(\u0027b\u0027, instance_migration.dest_node)"},{"line_number":1528,"context_line":""},{"line_number":1529,"context_line":"    def test_get_migration_for_instance_not_found(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a68dd71_94d2255b","line":1526,"in_reply_to":"9a68dd71_205e9b44","updated":"2016-01-22 14:57:12.000000000","message":"Done","commit_id":"b45eb7548557d1924a9715b5cfe5477f598c92b5"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"fc08194cc19cdbecbf20f9661a297c05576996e6","unresolved":false,"context_lines":[{"line_number":1523,"context_line":"            self.ctxt, migration_id, instance_uuid)"},{"line_number":1524,"context_line":"        self.assertEqual(migration_id, instance_migration.id)"},{"line_number":1525,"context_line":"        self.assertEqual(instance_uuid, instance_migration.instance_uuid)"},{"line_number":1526,"context_line":"        self.assertEqual(\u0027a\u0027, instance_migration.source_node)"},{"line_number":1527,"context_line":"        self.assertEqual(\u0027b\u0027, instance_migration.dest_node)"},{"line_number":1528,"context_line":""},{"line_number":1529,"context_line":"    def test_get_migration_for_instance_not_found(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a68dd71_205e9b44","line":1526,"in_reply_to":"9a68dd71_644aa8c7","updated":"2016-01-22 14:12:36.000000000","message":"I\u0027d rather remove these checks entirely as they are redundant anyway.","commit_id":"b45eb7548557d1924a9715b5cfe5477f598c92b5"}]}
