)]}'
{"nova/tests/functional/regressions/test_bug_1843639.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"100e860ff1858c4409c1c9e307b30cab0fce8db2","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                cpu_nodes\u003d2, cpu_sockets\u003d2, cpu_cores\u003d2, cpu_threads\u003d2,"},{"line_number":63,"context_line":"                kB_mem\u003d10740000)})"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.guest.Guest.migrate\u0027)"},{"line_number":66,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager.pre_live_migration\u0027)"},{"line_number":67,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager\u0027"},{"line_number":68,"context_line":"                \u0027.check_can_live_migrate_destination\u0027)"},{"line_number":69,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.LibvirtDriver._get_volume_driver\u0027)"},{"line_number":70,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.LibvirtDriver.get_volume_connector\u0027)"},{"line_number":71,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.guest.Guest.get_job_info\u0027)"},{"line_number":72,"context_line":"    def test_live_migrate(self, mock_get_job_info, mock_get_volume_connector,"},{"line_number":73,"context_line":"                          mock_get_volume_driver, mock_dest_check,"},{"line_number":74,"context_line":"                          mock_pre_lm, mock_migrate):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_3ad21b5e","line":71,"range":{"start_line":65,"start_character":0,"end_line":71,"end_character":61},"updated":"2019-09-18 17:14:39.000000000","message":"I did a bunch of work around making fakelibvirt \"support\" live migration in [1], so I kind want to ask you to rebase on top of that (and you need the start computes helper anyways)\n\n[1] https://review.opendev.org/#/c/672595/","commit_id":"3d1374c35609587ae57fc955c1c2597dc5c1b5cc"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"1a685c86dbfb93cb4813916dc9a4a13ae05b901f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                cpu_nodes\u003d2, cpu_sockets\u003d2, cpu_cores\u003d2, cpu_threads\u003d2,"},{"line_number":63,"context_line":"                kB_mem\u003d10740000)})"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.guest.Guest.migrate\u0027)"},{"line_number":66,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager.pre_live_migration\u0027)"},{"line_number":67,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager\u0027"},{"line_number":68,"context_line":"                \u0027.check_can_live_migrate_destination\u0027)"},{"line_number":69,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.LibvirtDriver._get_volume_driver\u0027)"},{"line_number":70,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.LibvirtDriver.get_volume_connector\u0027)"},{"line_number":71,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.guest.Guest.get_job_info\u0027)"},{"line_number":72,"context_line":"    def test_live_migrate(self, mock_get_job_info, mock_get_volume_connector,"},{"line_number":73,"context_line":"                          mock_get_volume_driver, mock_dest_check,"},{"line_number":74,"context_line":"                          mock_pre_lm, mock_migrate):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_6bb51c31","line":71,"range":{"start_line":65,"start_character":0,"end_line":71,"end_character":61},"in_reply_to":"3fa7e38b_3ad21b5e","updated":"2019-09-19 10:25:52.000000000","message":"Why when this is a targeted regression test around the behaviour of the volume drivers and not a generic LM test? I don\u0027t care about the behaviour of pre_live_migration or migrate etc, only the order of the calls to disconnect_volume and connect_volume.\n\nI\u0027d also like to backport this so it needs to be as standalone as possible, that\u0027s why I\u0027ve asked that you break out the helper from that change so I can also bring that back as well.","commit_id":"3d1374c35609587ae57fc955c1c2597dc5c1b5cc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae4339f9b6228d1e07644e444985d0418dfd9928","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from nova.tests.unit import cast_as_call"},{"line_number":21,"context_line":"from nova.tests.unit import policy_fixture"},{"line_number":22,"context_line":"from nova.tests.unit.virt.libvirt import fakelibvirt"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from nova.virt.libvirt import config as vconfig"},{"line_number":25,"context_line":"from nova.virt.libvirt import guest as libvirt_guest"},{"line_number":26,"context_line":"from nova.virt.libvirt.volume import volume as libvirt_volume"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_f820e7fa","line":23,"updated":"2019-10-23 16:16:10.000000000","message":"Why is there a gap here?","commit_id":"2101894c10d07427f489e44e91b830b57299cd58"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae4339f9b6228d1e07644e444985d0418dfd9928","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class TestPostLiveMigrationVolumeDisconnectErrror("},{"line_number":32,"context_line":"        integrated_helpers.InstanceHelperMixin, base.ServersTestBase):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def setUp(self):"},{"line_number":35,"context_line":"        super(TestPostLiveMigrationVolumeDisconnectErrror, self).setUp()"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_98fbf345","line":32,"range":{"start_line":32,"start_character":48,"end_line":32,"end_character":68},"updated":"2019-10-23 16:16:10.000000000","message":"Generally I don\u0027t like this thing because it eventually extends from _IntegratedTestBase which has all kinds of opinionated things like number of computes and using the CastAsCall fixture which isn\u0027t realistic, but I guess if this is a libvirt specific bug then you can\u0027t really get around it.","commit_id":"2101894c10d07427f489e44e91b830b57299cd58"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae4339f9b6228d1e07644e444985d0418dfd9928","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        super(TestPostLiveMigrationVolumeDisconnectErrror, self).setUp()"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        self.useFixture(policy_fixture.RealPolicyFixture())"},{"line_number":38,"context_line":"        self.useFixture(nova_fixtures.NeutronFixture(self))"},{"line_number":39,"context_line":"        self.useFixture(func_fixtures.PlacementFixture())"},{"line_number":40,"context_line":"        self.useFixture(nova_fixtures.CinderFixture(self))"},{"line_number":41,"context_line":"        self.useFixture(cast_as_call.CastAsCall(self))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_38d2ffd2","line":38,"range":{"start_line":38,"start_character":38,"end_line":38,"end_character":52},"updated":"2019-10-23 16:16:10.000000000","message":"This is already handled in _IntegratedTestBase, but you have to make sure the USE_NEUTRON variable is set to True. It defaults to that on master but I\u0027m not sure about stable branches.","commit_id":"2101894c10d07427f489e44e91b830b57299cd58"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae4339f9b6228d1e07644e444985d0418dfd9928","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        self.useFixture(policy_fixture.RealPolicyFixture())"},{"line_number":38,"context_line":"        self.useFixture(nova_fixtures.NeutronFixture(self))"},{"line_number":39,"context_line":"        self.useFixture(func_fixtures.PlacementFixture())"},{"line_number":40,"context_line":"        self.useFixture(nova_fixtures.CinderFixture(self))"},{"line_number":41,"context_line":"        self.useFixture(cast_as_call.CastAsCall(self))"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_f84ea7c0","line":39,"updated":"2019-10-23 16:16:10.000000000","message":"This is already setup in _IntegratedTestBase.","commit_id":"2101894c10d07427f489e44e91b830b57299cd58"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae4339f9b6228d1e07644e444985d0418dfd9928","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        self.useFixture(nova_fixtures.NeutronFixture(self))"},{"line_number":39,"context_line":"        self.useFixture(func_fixtures.PlacementFixture())"},{"line_number":40,"context_line":"        self.useFixture(nova_fixtures.CinderFixture(self))"},{"line_number":41,"context_line":"        self.useFixture(cast_as_call.CastAsCall(self))"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        api_fixture \u003d self.useFixture(nova_fixtures.OSAPIFixture("},{"line_number":44,"context_line":"            api_version\u003d\u0027v2.1\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_984693c0","line":41,"updated":"2019-10-23 16:16:10.000000000","message":"Gross. ServersTestBase means you already get it anyway.","commit_id":"2101894c10d07427f489e44e91b830b57299cd58"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae4339f9b6228d1e07644e444985d0418dfd9928","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        self.useFixture(nova_fixtures.CinderFixture(self))"},{"line_number":41,"context_line":"        self.useFixture(cast_as_call.CastAsCall(self))"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        api_fixture \u003d self.useFixture(nova_fixtures.OSAPIFixture("},{"line_number":44,"context_line":"            api_version\u003d\u0027v2.1\u0027))"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        self.admin_api \u003d api_fixture.admin_api"},{"line_number":47,"context_line":"        self.api \u003d api_fixture.api"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Use microversion 2.74 so we can place the instance on the src node"},{"line_number":50,"context_line":"        self.admin_api.microversion \u003d \u00272.74\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_b8f6ef5c","line":47,"range":{"start_line":43,"start_character":8,"end_line":47,"end_character":34},"updated":"2019-10-23 16:16:10.000000000","message":"This is already setup in _IntegratedTestBase. Just set ADMIN_API\u003dTrue.","commit_id":"2101894c10d07427f489e44e91b830b57299cd58"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae4339f9b6228d1e07644e444985d0418dfd9928","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.admin_api \u003d api_fixture.admin_api"},{"line_number":47,"context_line":"        self.api \u003d api_fixture.api"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Use microversion 2.74 so we can place the instance on the src node"},{"line_number":50,"context_line":"        self.admin_api.microversion \u003d \u00272.74\u0027"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        self.start_service(\u0027conductor\u0027)"},{"line_number":53,"context_line":"        self.start_service(\u0027scheduler\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_d8864bbb","line":50,"range":{"start_line":49,"start_character":8,"end_line":50,"end_character":44},"updated":"2019-10-23 16:16:10.000000000","message":"Do you plan on backporting this functional test? Because if so you\u0027re not going to be able to use this on stable branches past train.","commit_id":"2101894c10d07427f489e44e91b830b57299cd58"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae4339f9b6228d1e07644e444985d0418dfd9928","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        # Use microversion 2.74 so we can place the instance on the src node"},{"line_number":50,"context_line":"        self.admin_api.microversion \u003d \u00272.74\u0027"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        self.start_service(\u0027conductor\u0027)"},{"line_number":53,"context_line":"        self.start_service(\u0027scheduler\u0027)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        # Start two compute nodes using the libvirt driver"},{"line_number":56,"context_line":"        self.flags(compute_driver\u003d\u0027libvirt.LibvirtDriver\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_9890d3ef","line":53,"range":{"start_line":52,"start_character":8,"end_line":53,"end_character":39},"updated":"2019-10-23 16:16:10.000000000","message":"This is already done in _IntegratedTestBase.","commit_id":"2101894c10d07427f489e44e91b830b57299cd58"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae4339f9b6228d1e07644e444985d0418dfd9928","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                cpu_nodes\u003d1, cpu_sockets\u003d2, cpu_cores\u003d2, cpu_threads\u003d2,"},{"line_number":63,"context_line":"                kB_mem\u003d10740000)})"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.guest.Guest.migrate\u0027)"},{"line_number":66,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager.pre_live_migration\u0027)"},{"line_number":67,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager\u0027"},{"line_number":68,"context_line":"                \u0027.check_can_live_migrate_destination\u0027)"},{"line_number":69,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.LibvirtDriver._get_volume_driver\u0027)"},{"line_number":70,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.LibvirtDriver.get_volume_connector\u0027)"},{"line_number":71,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.guest.Guest.get_job_info\u0027)"},{"line_number":72,"context_line":"    def test_live_migrate(self, mock_get_job_info, mock_get_volume_connector,"},{"line_number":73,"context_line":"                          mock_get_volume_driver, mock_dest_check,"},{"line_number":74,"context_line":"                          mock_pre_lm, mock_migrate):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_38b99f78","line":71,"range":{"start_line":65,"start_character":4,"end_line":71,"end_character":61},"updated":"2019-10-23 16:16:10.000000000","message":"Why does all of this stuff have to be mocked out? Kind of defeats the purpose of using a functional test if we have to mock everything out.","commit_id":"2101894c10d07427f489e44e91b830b57299cd58"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ae4339f9b6228d1e07644e444985d0418dfd9928","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        migrate_data \u003d migrate_data_obj.LibvirtLiveMigrateData()"},{"line_number":93,"context_line":"        migrate_data.is_shared_instance_path \u003d False"},{"line_number":94,"context_line":"        migrate_data.is_shared_block_storage \u003d False"},{"line_number":95,"context_line":"        migrate_data.bdms \u003d []"},{"line_number":96,"context_line":"        migrate_data.vifs \u003d []"},{"line_number":97,"context_line":"        migrate_data.block_migration \u003d False"},{"line_number":98,"context_line":"        migrate_data.serial_listen_addr \u003d \"1.2.3.4\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_987e93ad","line":95,"range":{"start_line":95,"start_character":8,"end_line":95,"end_character":30},"updated":"2019-10-23 16:16:10.000000000","message":"This is clearly a lie right?","commit_id":"2101894c10d07427f489e44e91b830b57299cd58"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0981489411acb0af33e4bb9b0826524cc228c1db","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                \"host\": \"dest\","},{"line_number":128,"context_line":"            }})"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        # FIXME (lyarwood): The instance should be ACTIVE with the migration"},{"line_number":131,"context_line":"        # complete and running on the dest even after a disconnect_volume"},{"line_number":132,"context_line":"        # failure during LM."},{"line_number":133,"context_line":"        self._wait_for_state_change(self.admin_api, server, \u0027ERROR\u0027)"},{"line_number":134,"context_line":"        self._wait_for_migration_status(server, [\u0027error\u0027])"},{"line_number":135,"context_line":"        server \u003d self.admin_api.get_server(server[\u0027id\u0027])"},{"line_number":136,"context_line":"        self.assertEqual(\u0027src\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        # Ensure we actually called disconnect_volume"},{"line_number":139,"context_line":"        mock_volume_driver.disconnect_volume.assert_called_once_with(mock.ANY,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_d3394cd8","line":136,"range":{"start_line":130,"start_character":8,"end_line":136,"end_character":63},"updated":"2019-10-23 16:21:33.000000000","message":"If this is your goal for the test, then you can avoid all of the libvirt crap in this test and just use a fake driver as normal for functional regression tests and stub the driver\u0027s post_live_migration method to raise an exception, processutils.ProcessExecutionError in this case, but it probably doesn\u0027t matter. But that would mean you can (1) not extend the libvirt base and _IntegratedTestBase grossness and (2) not even have this libvirt specific with all of the mocking going on, it would be a ton simpler.","commit_id":"2101894c10d07427f489e44e91b830b57299cd58"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"085b3b4e4619220dd8e313b6a2161752383bb527","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                \"host\": \"dest\","},{"line_number":128,"context_line":"            }})"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        # FIXME (lyarwood): The instance should be ACTIVE with the migration"},{"line_number":131,"context_line":"        # complete and running on the dest even after a disconnect_volume"},{"line_number":132,"context_line":"        # failure during LM."},{"line_number":133,"context_line":"        self._wait_for_state_change(self.admin_api, server, \u0027ERROR\u0027)"},{"line_number":134,"context_line":"        self._wait_for_migration_status(server, [\u0027error\u0027])"},{"line_number":135,"context_line":"        server \u003d self.admin_api.get_server(server[\u0027id\u0027])"},{"line_number":136,"context_line":"        self.assertEqual(\u0027src\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        # Ensure we actually called disconnect_volume"},{"line_number":139,"context_line":"        mock_volume_driver.disconnect_volume.assert_called_once_with(mock.ANY,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_53e79c47","line":136,"range":{"start_line":130,"start_character":8,"end_line":136,"end_character":63},"in_reply_to":"3fa7e38b_d3394cd8","updated":"2019-10-23 16:24:25.000000000","message":"I guess that would just prove that the compute manager bails, not that the libvirt driver bug is fixed, so scratch that idea.\n\nAnyway, I don\u0027t really think this functional test is all that useful since the libvirt driver fix is so simple and this is mocked to high heaven and would be a nightmare to backport, so it\u0027s probably not even worth doing.","commit_id":"2101894c10d07427f489e44e91b830b57299cd58"}]}
