)]}'
{"doc/notification_samples/instance-live_migration_pre-end.json":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fc10e5db550ee2b642f1142b54a6857363420c9f","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        },"},{"line_number":76,"context_line":"        \"nova_object.name\":\"InstanceActionPayload\","},{"line_number":77,"context_line":"        \"nova_object.namespace\":\"nova\","},{"line_number":78,"context_line":"        \"nova_object.version\":\"1.3\""},{"line_number":79,"context_line":"    },"},{"line_number":80,"context_line":"    \"priority\":\"INFO\","},{"line_number":81,"context_line":"    \"publisher_id\":\"nova-compute:host2\""}],"source_content_type":"application/json","patch_set":1,"id":"ff346bd7_5bad7a2f","line":78,"updated":"2017-07-26 09:33:28.000000000","message":"This patch needs a rebase as InstanceActionPayload is already at version 1.4 which adds the block_devices key to the payload","commit_id":"3c7caff62a360362b41b02c44fd131a760af61f5"}],"nova/tests/functional/notification_sample_tests/test_instance.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fc10e5db550ee2b642f1142b54a6857363420c9f","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        self.admin_api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":92,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_pre.start\u0027)"},{"line_number":93,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_pre.end\u0027)"},{"line_number":94,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":95,"context_line":"        self._verify_notification("},{"line_number":96,"context_line":"            \u0027instance-live_migration_pre-start\u0027,"},{"line_number":97,"context_line":"            replacements\u003d{"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_fb1aee7a","line":94,"updated":"2017-07-26 09:33:28.000000000","message":"Will this patch become unstable after post notification[1] gets merged because of the post notifications starts appearing here?\n\n[1]https://review.openstack.org/#/c/480119","commit_id":"3c7caff62a360362b41b02c44fd131a760af61f5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"dbd48435e21a6b8febe2ebaa71753b3fea5b074b","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            }"},{"line_number":97,"context_line":"        }"},{"line_number":98,"context_line":"        self.admin_api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":99,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_pre.start\u0027)"},{"line_number":100,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_pre.end\u0027)"},{"line_number":101,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":102,"context_line":"        self._verify_notification("},{"line_number":103,"context_line":"            \u0027instance-live_migration_pre-start\u0027,"},{"line_number":104,"context_line":"            replacements\u003d{"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_78bc82db","line":101,"range":{"start_line":99,"start_character":1,"end_line":101,"end_character":1},"updated":"2017-11-03 09:35:09.000000000","message":"waiting for pre.end would be enough but waiting for both does not cause trouble either.","commit_id":"081c21ea4ab7fae76b6b15c77fd4d9ecd6294fb1"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"45a4c21aeb580dc27439126c87e286a8360f5565","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            }"},{"line_number":97,"context_line":"        }"},{"line_number":98,"context_line":"        self.admin_api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":99,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_pre.start\u0027)"},{"line_number":100,"context_line":"        self._wait_for_notification(\u0027instance.live_migration_pre.end\u0027)"},{"line_number":101,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":102,"context_line":"        self._verify_notification("},{"line_number":103,"context_line":"            \u0027instance-live_migration_pre-start\u0027,"},{"line_number":104,"context_line":"            replacements\u003d{"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_5bb5deed","line":101,"range":{"start_line":99,"start_character":1,"end_line":101,"end_character":1},"in_reply_to":"3f4b6375_78bc82db","updated":"2017-11-09 19:48:14.000000000","message":"Done","commit_id":"081c21ea4ab7fae76b6b15c77fd4d9ecd6294fb1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3f037c7e331e45b018cbab2a2bd8cb59f734ee14","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                       post_method, recover_method, block_migration\u003dFalse,"},{"line_number":126,"context_line":"                       migrate_data\u003dNone):"},{"line_number":127,"context_line":"            time.sleep(2)  # make time for abort"},{"line_number":128,"context_line":"            recover_method(context, instance, dest, block_migration,"},{"line_number":129,"context_line":"                        migrate_data)"},{"line_number":130,"context_line":"            return"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        mock_migration.side_effect \u003d _delayed_live_migration"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_bb126457","line":129,"range":{"start_line":128,"start_character":0,"end_line":129,"end_character":37},"updated":"2017-11-13 11:08:18.000000000","message":"We should never reach this point as the abort call should come during the sleep and terminate the migration. It feels that something is fishy about the _delay_live_migration util and maybe our abort test case is broken.\n\n[...after some digging...]\n\nWe need an even smarter FakeDriver.live_migration method than the current one. Fortunately It was already proposed for the resource allocation tests [1]. I suggest to create a patch top of [1] that make this whole test class based on the driver in [1]. Then move this patch top of that series as well.\n\n[1]https://review.openstack.org/#/c/505202/7/nova/virt/fake.py","commit_id":"4b66abe7b1f3f6b6c2005f025ea9d36db660ba84"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"f655c485e68f554dc795bd620e3e3496f1eb1eec","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                       post_method, recover_method, block_migration\u003dFalse,"},{"line_number":126,"context_line":"                       migrate_data\u003dNone):"},{"line_number":127,"context_line":"            time.sleep(2)  # make time for abort"},{"line_number":128,"context_line":"            recover_method(context, instance, dest, block_migration,"},{"line_number":129,"context_line":"                        migrate_data)"},{"line_number":130,"context_line":"            return"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        mock_migration.side_effect \u003d _delayed_live_migration"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_df43c3ae","line":129,"range":{"start_line":128,"start_character":0,"end_line":129,"end_character":37},"in_reply_to":"1f485f77_bb126457","updated":"2017-11-13 17:15:54.000000000","message":"I\u0027ve created the patch [2] based on FakeLiveMigrateDriver, and rebased this patch on top of that. Done\n\n[2] https://review.openstack.org/519405","commit_id":"4b66abe7b1f3f6b6c2005f025ea9d36db660ba84"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8c591d09dfcf86bbb715756c40a6a89d81d5ff30","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":114,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])"},{"line_number":115,"context_line":"        migrations \u003d self.admin_api.get_active_migrations(server[\u0027id\u0027])"},{"line_number":116,"context_line":"        # FakeLiveMigrateDriver needs force_complete to finish migration"},{"line_number":117,"context_line":"        self.admin_api.force_complete_migration(server[\u0027id\u0027],"},{"line_number":118,"context_line":"            migrations[0][\u0027id\u0027])"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_757cd4b4","line":116,"updated":"2017-11-14 16:59:09.000000000","message":"You can make it a TODO, something like:\n# TODO(elod): Enhance FakeLiveMigrateDriver to finish migration automatically. This enhancement probably will happen as part of the patch proposing instance.live_migration_post.end transformation.","commit_id":"745fa08313a37b14ba40b4f6638b633251d7f1a5"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"55c6f0a09b3ae7f4e74e65526ed6a7f72338500a","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":114,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])"},{"line_number":115,"context_line":"        migrations \u003d self.admin_api.get_active_migrations(server[\u0027id\u0027])"},{"line_number":116,"context_line":"        # FakeLiveMigrateDriver needs force_complete to finish migration"},{"line_number":117,"context_line":"        self.admin_api.force_complete_migration(server[\u0027id\u0027],"},{"line_number":118,"context_line":"            migrations[0][\u0027id\u0027])"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_de74c56a","line":116,"in_reply_to":"1f485f77_757cd4b4","updated":"2017-11-14 18:25:19.000000000","message":"Done","commit_id":"745fa08313a37b14ba40b4f6638b633251d7f1a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed86d97589e0091cd594fd682a184df3d5b7b30d","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # automatically. This enhancement probably will happen as part of the"},{"line_number":119,"context_line":"        # patch proposing instance.live_migration_post.end transformation."},{"line_number":120,"context_line":"        self.admin_api.force_complete_migration(server[\u0027id\u0027],"},{"line_number":121,"context_line":"            migrations[0][\u0027id\u0027])"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _test_live_migration_abort(self, server):"},{"line_number":124,"context_line":"        post \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_9150b80c","line":121,"range":{"start_line":121,"start_character":12,"end_line":121,"end_character":25},"updated":"2017-11-22 14:45:34.000000000","message":"Isn\u0027t this a potential IndexError? Should probably assert it first.","commit_id":"cfdddcc6ad947ce34a580e7318d8a9cd7538c087"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"11c817f0eba94be24bf71d533209dc25e7bd975b","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # automatically. This enhancement probably will happen as part of the"},{"line_number":119,"context_line":"        # patch proposing instance.live_migration_post.end transformation."},{"line_number":120,"context_line":"        self.admin_api.force_complete_migration(server[\u0027id\u0027],"},{"line_number":121,"context_line":"            migrations[0][\u0027id\u0027])"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _test_live_migration_abort(self, server):"},{"line_number":124,"context_line":"        post \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_1714984d","line":121,"range":{"start_line":121,"start_character":12,"end_line":121,"end_character":25},"in_reply_to":"ff82abbf_9150b80c","updated":"2017-11-22 16:12:14.000000000","message":"You are right, assert added. Done.","commit_id":"cfdddcc6ad947ce34a580e7318d8a9cd7538c087"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8c591d09dfcf86bbb715756c40a6a89d81d5ff30","unresolved":false,"context_lines":[{"line_number":6420,"context_line":"                         \u0027block_device_mapping\u0027: []},"},{"line_number":6421,"context_line":"                        destroy_disks\u003dTrue, migrate_data\u003dNone)"},{"line_number":6422,"context_line":""},{"line_number":6423,"context_line":"    @mock.patch(\u0027nova.virt.fake.FakeDriver.\u0027"},{"line_number":6424,"context_line":"                \u0027rollback_live_migration_at_destination\u0027)"},{"line_number":6425,"context_line":"    @mock.patch(\u0027nova.objects.migrate_data.LiveMigrateData.\u0027"},{"line_number":6426,"context_line":"                \u0027detect_implementation\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_183cb5e0","line":6423,"updated":"2017-11-14 16:59:09.000000000","message":"Note for the other reviewer. This is needed as now the FakeDriver implements rollback_live_migration_at_destination as well.","commit_id":"745fa08313a37b14ba40b4f6638b633251d7f1a5"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"55c6f0a09b3ae7f4e74e65526ed6a7f72338500a","unresolved":false,"context_lines":[{"line_number":6420,"context_line":"                         \u0027block_device_mapping\u0027: []},"},{"line_number":6421,"context_line":"                        destroy_disks\u003dTrue, migrate_data\u003dNone)"},{"line_number":6422,"context_line":""},{"line_number":6423,"context_line":"    @mock.patch(\u0027nova.virt.fake.FakeDriver.\u0027"},{"line_number":6424,"context_line":"                \u0027rollback_live_migration_at_destination\u0027)"},{"line_number":6425,"context_line":"    @mock.patch(\u0027nova.objects.migrate_data.LiveMigrateData.\u0027"},{"line_number":6426,"context_line":"                \u0027detect_implementation\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_fe178150","line":6423,"in_reply_to":"1f485f77_183cb5e0","updated":"2017-11-14 18:25:19.000000000","message":"Actually we don\u0027t even need that anymore. So I removed this change and the FakeDriver change, too.","commit_id":"745fa08313a37b14ba40b4f6638b633251d7f1a5"}],"nova/virt/fake.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5f7f9693879ea95c73d9aa56910535a7dc972f6f","unresolved":false,"context_lines":[{"line_number":692,"context_line":""},{"line_number":693,"context_line":"        if self._abort_migration:"},{"line_number":694,"context_line":"            recover_method(context, instance, dest, migrate_data,"},{"line_number":695,"context_line":"                           migration_status\u003d\u0027cancelled\u0027)"},{"line_number":696,"context_line":"        else:"},{"line_number":697,"context_line":"            post_method(context, instance, dest, block_migration,"},{"line_number":698,"context_line":"                        migrate_data)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_829e24b6","line":695,"updated":"2017-11-22 16:16:03.000000000","message":"Just to note for the future reviewer this is needed to make sure that the migration is set to cancelled when the migration is aborted. Without this the migration would stay in running state and that would affect other tests. In the normal deployment the recover_method call is done by the libvirt driver with the proper arguments.","commit_id":"2578a308e613fa53e436a16a32396f28b0f56622"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0cdedd5c1019cb5be230da89f2c2fd86f3281d1c","unresolved":false,"context_lines":[{"line_number":692,"context_line":""},{"line_number":693,"context_line":"        if self._abort_migration:"},{"line_number":694,"context_line":"            recover_method(context, instance, dest, migrate_data,"},{"line_number":695,"context_line":"                           migration_status\u003d\u0027cancelled\u0027)"},{"line_number":696,"context_line":"        else:"},{"line_number":697,"context_line":"            post_method(context, instance, dest, block_migration,"},{"line_number":698,"context_line":"                        migrate_data)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_823144a5","line":695,"in_reply_to":"ff82abbf_829e24b6","updated":"2017-11-22 16:20:57.000000000","message":"That\u0027s probably worth a comment in the code here, but could be done in a follow up.","commit_id":"2578a308e613fa53e436a16a32396f28b0f56622"}]}
