)]}'
{"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5a9725bfc6a1fdeb4688620f8e8337f9cf6c7c7e","unresolved":false,"context_lines":[{"line_number":8817,"context_line":"        return_value \u003d drvr.check_can_live_migrate_destination(self.context,"},{"line_number":8818,"context_line":"                instance_ref, None, compute_info, True)"},{"line_number":8819,"context_line":"        return_value.is_volume_backed \u003d False"},{"line_number":8820,"context_line":"        self.assertEqual({\u0027filename\u0027: \u0027file\u0027,"},{"line_number":8821,"context_line":"                          \u0027image_type\u0027: \u0027default\u0027,"},{"line_number":8822,"context_line":"                          \u0027disk_available_mb\u0027: 409600,"},{"line_number":8823,"context_line":"                          \u0027disk_over_commit\u0027: False,"},{"line_number":8824,"context_line":"                          \u0027block_migration\u0027: True,"},{"line_number":8825,"context_line":"                          \u0027is_volume_backed\u0027: False,"},{"line_number":8826,"context_line":"                          \u0027dst_wants_file_backed_memory\u0027: False,"},{"line_number":8827,"context_line":"                          \u0027file_backed_memory_discard\u0027: False,"},{"line_number":8828,"context_line":"                          \u0027graphics_listen_addr_spice\u0027: \u0027127.0.0.1\u0027,"},{"line_number":8829,"context_line":"                          \u0027graphics_listen_addr_vnc\u0027: \u0027127.0.0.1\u0027,"},{"line_number":8830,"context_line":"                          \u0027serial_listen_addr\u0027: None},"},{"line_number":8831,"context_line":"                         return_value.obj_to_primitive()[\u0027nova_object.data\u0027])"},{"line_number":8832,"context_line":""},{"line_number":8833,"context_line":"    @mock.patch.object(objects.Service, \u0027get_by_compute_host\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_f919107a","line":8830,"range":{"start_line":8820,"start_character":25,"end_line":8830,"end_character":54},"updated":"2019-02-19 16:48:49.000000000","message":"As later, it seems like it would be more sane to create a LibvirtLiveMigrateData object here as elsewhere. That can be a later cleanup though","commit_id":"47163c365bd986cddd8a9f87abcc1db590a01573"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"d8ace81c1979fc7a7ce77e190246e41c0b4c2d25","unresolved":false,"context_lines":[{"line_number":8817,"context_line":"        return_value \u003d drvr.check_can_live_migrate_destination(self.context,"},{"line_number":8818,"context_line":"                instance_ref, None, compute_info, True)"},{"line_number":8819,"context_line":"        return_value.is_volume_backed \u003d False"},{"line_number":8820,"context_line":"        self.assertEqual({\u0027filename\u0027: \u0027file\u0027,"},{"line_number":8821,"context_line":"                          \u0027image_type\u0027: \u0027default\u0027,"},{"line_number":8822,"context_line":"                          \u0027disk_available_mb\u0027: 409600,"},{"line_number":8823,"context_line":"                          \u0027disk_over_commit\u0027: False,"},{"line_number":8824,"context_line":"                          \u0027block_migration\u0027: True,"},{"line_number":8825,"context_line":"                          \u0027is_volume_backed\u0027: False,"},{"line_number":8826,"context_line":"                          \u0027dst_wants_file_backed_memory\u0027: False,"},{"line_number":8827,"context_line":"                          \u0027file_backed_memory_discard\u0027: False,"},{"line_number":8828,"context_line":"                          \u0027graphics_listen_addr_spice\u0027: \u0027127.0.0.1\u0027,"},{"line_number":8829,"context_line":"                          \u0027graphics_listen_addr_vnc\u0027: \u0027127.0.0.1\u0027,"},{"line_number":8830,"context_line":"                          \u0027serial_listen_addr\u0027: None},"},{"line_number":8831,"context_line":"                         return_value.obj_to_primitive()[\u0027nova_object.data\u0027])"},{"line_number":8832,"context_line":""},{"line_number":8833,"context_line":"    @mock.patch.object(objects.Service, \u0027get_by_compute_host\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_3a68b8b8","line":8830,"range":{"start_line":8820,"start_character":25,"end_line":8830,"end_character":54},"in_reply_to":"9fdfeff1_f919107a","updated":"2019-02-21 15:54:00.000000000","message":"See reply on next comment.","commit_id":"47163c365bd986cddd8a9f87abcc1db590a01573"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5a9725bfc6a1fdeb4688620f8e8337f9cf6c7c7e","unresolved":false,"context_lines":[{"line_number":11872,"context_line":"            c, instance, block_device_info, nw_info, None,"},{"line_number":11873,"context_line":"            migrate_data\u003dmigrate_data)"},{"line_number":11874,"context_line":"        # DictMatcher doesn\u0027t handle nested dicts"},{"line_number":11875,"context_line":"        result_dict \u003d self._migrate_data_to_dict(result)"},{"line_number":11876,"context_line":"        for nested_dicts in zip(target_ret[\u0027bdms\u0027], result_dict[\u0027bdms\u0027]):"},{"line_number":11877,"context_line":"            self.assertThat(nested_dicts[0],"},{"line_number":11878,"context_line":"                            matchers.DictMatches(nested_dicts[1]))"},{"line_number":11879,"context_line":"        result_dict.pop(\u0027bdms\u0027)"},{"line_number":11880,"context_line":"        target_ret.pop(\u0027bdms\u0027)"},{"line_number":11881,"context_line":"        self.assertThat(target_ret, matchers.DictMatches(result_dict))"},{"line_number":11882,"context_line":"        mock_connect.assert_has_calls(expected_connect_calls)"},{"line_number":11883,"context_line":"        self.assertEqual(len(expected_connect_calls), mock_connect.call_count)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_3939d8d7","line":11880,"range":{"start_line":11875,"start_character":8,"end_line":11880,"end_character":30},"updated":"2019-02-19 16:48:49.000000000","message":"Why do we need to convert these into dictionaries in the first place? Couldn\u0027t we just compare the objects if we started returning a dict from \u0027_generate_target_ret\u0027?","commit_id":"47163c365bd986cddd8a9f87abcc1db590a01573"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"d8ace81c1979fc7a7ce77e190246e41c0b4c2d25","unresolved":false,"context_lines":[{"line_number":11872,"context_line":"            c, instance, block_device_info, nw_info, None,"},{"line_number":11873,"context_line":"            migrate_data\u003dmigrate_data)"},{"line_number":11874,"context_line":"        # DictMatcher doesn\u0027t handle nested dicts"},{"line_number":11875,"context_line":"        result_dict \u003d self._migrate_data_to_dict(result)"},{"line_number":11876,"context_line":"        for nested_dicts in zip(target_ret[\u0027bdms\u0027], result_dict[\u0027bdms\u0027]):"},{"line_number":11877,"context_line":"            self.assertThat(nested_dicts[0],"},{"line_number":11878,"context_line":"                            matchers.DictMatches(nested_dicts[1]))"},{"line_number":11879,"context_line":"        result_dict.pop(\u0027bdms\u0027)"},{"line_number":11880,"context_line":"        target_ret.pop(\u0027bdms\u0027)"},{"line_number":11881,"context_line":"        self.assertThat(target_ret, matchers.DictMatches(result_dict))"},{"line_number":11882,"context_line":"        mock_connect.assert_has_calls(expected_connect_calls)"},{"line_number":11883,"context_line":"        self.assertEqual(len(expected_connect_calls), mock_connect.call_count)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_9a71a4ab","line":11880,"range":{"start_line":11875,"start_character":8,"end_line":11880,"end_character":30},"in_reply_to":"9fdfeff1_3939d8d7","updated":"2019-02-21 15:54:00.000000000","message":"The default __eq__ method in oslo.versionedobjects calls obj_to_primitive() on both and compares those dicts. In py36 I believe dicts started being ordered, so that can mess things up. I don\u0027t feel like implementing a proper __eq__ just for this patch, so I\u0027m OK with doing the obj_to_primitive() call ourselves and calling DictMatches on the results.","commit_id":"47163c365bd986cddd8a9f87abcc1db590a01573"}],"nova/tests/unit/virt/xenapi/test_xenapi.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5a9725bfc6a1fdeb4688620f8e8337f9cf6c7c7e","unresolved":false,"context_lines":[{"line_number":3585,"context_line":"                    self.conn._vmops, \u0027_get_host_opaque_ref\u0027):"},{"line_number":3586,"context_line":"            fake_host_ref.return_value \u003d \u0027fake_host_ref\u0027"},{"line_number":3587,"context_line":"            fake_get_network_ref.return_value \u003d \u0027fake_network_ref\u0027"},{"line_number":3588,"context_line":"            expected \u003d {\u0027block_migration\u0027: True,"},{"line_number":3589,"context_line":"                        \u0027is_volume_backed\u0027: False,"},{"line_number":3590,"context_line":"                        \u0027migrate_send_data\u0027: {\u0027value\u0027: \u0027fake_migrate_data\u0027},"},{"line_number":3591,"context_line":"                        \u0027destination_sr_ref\u0027: \u0027asdf\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_de1c3279","line":3588,"range":{"start_line":3588,"start_character":12,"end_line":3588,"end_character":22},"updated":"2019-02-19 16:48:49.000000000","message":"Any reason you couldn\u0027t create an instance of \u0027objects.XenapiLiveMigrateData\u0027 here too, as is done in the below test. Possible cleanup","commit_id":"47163c365bd986cddd8a9f87abcc1db590a01573"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"d8ace81c1979fc7a7ce77e190246e41c0b4c2d25","unresolved":false,"context_lines":[{"line_number":3585,"context_line":"                    self.conn._vmops, \u0027_get_host_opaque_ref\u0027):"},{"line_number":3586,"context_line":"            fake_host_ref.return_value \u003d \u0027fake_host_ref\u0027"},{"line_number":3587,"context_line":"            fake_get_network_ref.return_value \u003d \u0027fake_network_ref\u0027"},{"line_number":3588,"context_line":"            expected \u003d {\u0027block_migration\u0027: True,"},{"line_number":3589,"context_line":"                        \u0027is_volume_backed\u0027: False,"},{"line_number":3590,"context_line":"                        \u0027migrate_send_data\u0027: {\u0027value\u0027: \u0027fake_migrate_data\u0027},"},{"line_number":3591,"context_line":"                        \u0027destination_sr_ref\u0027: \u0027asdf\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_7aa3a001","line":3588,"range":{"start_line":3588,"start_character":12,"end_line":3588,"end_character":22},"in_reply_to":"9fdfeff1_de1c3279","updated":"2019-02-21 15:54:00.000000000","message":"I think we\u0027re going to hit the default __eq__ dict order thing again.","commit_id":"47163c365bd986cddd8a9f87abcc1db590a01573"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e139d7ea7b925a58b89e1057389b896bad4bab7c","unresolved":false,"context_lines":[{"line_number":6755,"context_line":""},{"line_number":6756,"context_line":"        :param context: security context"},{"line_number":6757,"context_line":"        :param instance: nova.db.sqlalchemy.models.Instance"},{"line_number":6758,"context_line":"        :param dest_check_data: result of check_can_live_migrate_destination"},{"line_number":6759,"context_line":"        :param block_device_info: result of _get_instance_block_device_info"},{"line_number":6760,"context_line":"        :returns: a LibvirtLiveMigrateData object"},{"line_number":6761,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"9fdfeff1_ecb4abf4","line":6758,"range":{"start_line":6758,"start_character":42,"end_line":6758,"end_character":76},"updated":"2019-02-22 14:10:25.000000000","message":"OK and this is always going to be a LibvirtLiveMigrateData now because we\u0027re no longer handling old computes passing legacy dicts back and forth. That was all removed with Ibcb6bf912b3fb69c8631665fef2832906ba338aa in Rocky.","commit_id":"fcdc5f1a6029e34f9cb4ff92e974134be1272bcc"}]}
