)]}'
{"nova/tests/unit/virt/libvirt/test_guest.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"41ac6ff1bc53481d2b64a4a7a2ba36d6e981bd0c","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        self.guest.shutdown()"},{"line_number":83,"context_line":"        self.domain.shutdown.assert_called_once_with()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @mock.patch.object(encodeutils, \u0027safe_decode\u0027)"},{"line_number":86,"context_line":"    def test_launch_exception(self, mock_safe_decode):"},{"line_number":87,"context_line":"        self.domain.createWithFlags.side_effect \u003d test.TestingException"},{"line_number":88,"context_line":"        mock_safe_decode.return_value \u003d \"\u003c/xml\u003e\""},{"line_number":89,"context_line":"        self.assertRaises(test.TestingException, self.guest.launch)"},{"line_number":90,"context_line":"        self.assertEqual(1, mock_safe_decode.called)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def test_get_interfaces(self):"},{"line_number":93,"context_line":"        self.domain.XMLDesc.return_value \u003d \"\"\"\u003cdomain\u003e"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_e0e2e8d4","side":"PARENT","line":90,"range":{"start_line":85,"start_character":0,"end_line":90,"end_character":52},"updated":"2020-07-09 13:46:27.000000000","message":"It wasn\u0027t necessary to move these, but it made sense to group them","commit_id":"9ce6c0d8e92fcc2296fc5dce585415090c4424f0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"41ac6ff1bc53481d2b64a4a7a2ba36d6e981bd0c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.assertRaises(test.TestingException,"},{"line_number":70,"context_line":"                          libvirt_guest.Guest.create,"},{"line_number":71,"context_line":"                          fake_xml, self.host)"},{"line_number":72,"context_line":"        # ensure the XML is logged"},{"line_number":73,"context_line":"        self.assertIn(fake_xml, str(mock_log.call_args[0]))"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def test_launch(self):"},{"line_number":76,"context_line":"        self.guest.launch()"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_00071c84","line":73,"range":{"start_line":72,"start_character":0,"end_line":73,"end_character":59},"updated":"2020-07-09 13:46:27.000000000","message":"This is now covering what was previously handled (in a far more roundabout manner) by [1]\n\n[1] https://review.opendev.org/#/c/739208/4/nova/tests/unit/virt/libvirt/test_driver.py@a18374","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"41ac6ff1bc53481d2b64a4a7a2ba36d6e981bd0c","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        mock_safe_decode.return_value \u003d fake_xml"},{"line_number":90,"context_line":"        self.assertRaises(test.TestingException, self.guest.launch)"},{"line_number":91,"context_line":"        self.assertEqual(1, mock_safe_decode.called)"},{"line_number":92,"context_line":"        # ensure the XML is logged"},{"line_number":93,"context_line":"        self.assertIn(fake_xml, str(mock_log.call_args[0]))"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def test_shutdown(self):"},{"line_number":96,"context_line":"        self.domain.shutdown \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_20022070","line":93,"range":{"start_line":92,"start_character":0,"end_line":93,"end_character":59},"updated":"2020-07-09 13:46:27.000000000","message":"And this is replacing [1]\n\n[1] https://review.opendev.org/#/c/739208/4/nova/tests/unit/virt/libvirt/test_driver.py@a18407","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"}],"nova/tests/unit/virt/test_virt_drivers.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"41ac6ff1bc53481d2b64a4a7a2ba36d6e981bd0c","unresolved":false,"context_lines":[{"line_number":294,"context_line":"                               image_meta, \u0027\u0027, None)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    @catch_notimplementederror"},{"line_number":297,"context_line":"    @mock.patch(\u0027os.unlink\u0027)"},{"line_number":298,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.utils.load_file\u0027, return_value\u003d\u0027\u0027)"},{"line_number":299,"context_line":"    def test_unrescue_unrescued_instance(self, mock_load_file, mock_unlink):"},{"line_number":300,"context_line":"        instance_ref, _ \u003d self._get_running_instance()"},{"line_number":301,"context_line":"        self.connection.unrescue(self.ctxt, instance_ref)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_e0302859","side":"PARENT","line":298,"range":{"start_line":297,"start_character":0,"end_line":298,"end_character":69},"updated":"2020-07-09 13:46:27.000000000","message":"We should stop doing these mocks in this entire test case since they\u0027re libvirt specific","commit_id":"9ce6c0d8e92fcc2296fc5dce585415090c4424f0"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ddb85896d452df72a5bee3db43426a5313909e9a","unresolved":false,"context_lines":[{"line_number":2510,"context_line":"        guest \u003d self._create_guest_from_domain(virt_dom, pause\u003dpause)"},{"line_number":2511,"context_line":"        self._attach_pci_devices("},{"line_number":2512,"context_line":"            guest, pci_manager.get_instance_pci_devs(instance))"},{"line_number":2513,"context_line":"        self._attach_direct_passthrough_ports(context, instance, guest)"},{"line_number":2514,"context_line":""},{"line_number":2515,"context_line":"    def _can_set_admin_password(self, image_meta):"},{"line_number":2516,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bf51134e_d55fbde2","line":2513,"updated":"2020-07-08 10:52:33.000000000","message":"Nice refactor! As _create_guest_from_domain() cannot return None (I trust mypy here) therefore this is logically equivalent with the base code.","commit_id":"bfe4b9d1d26ea4995647c4c07ec527a9b57ad4c5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4643813d8215f2bdcaf4623e96a5e1ff9c241bee","unresolved":false,"context_lines":[{"line_number":2502,"context_line":"    def _snapshot_domain(self, context, live_snapshot, virt_dom, state,"},{"line_number":2503,"context_line":"                         instance):"},{"line_number":2504,"context_line":"        # NOTE(dkang): because previous managedSave is not called for LXC,"},{"line_number":2505,"context_line":"        # _create_guest_from must not be called."},{"line_number":2506,"context_line":"        if CONF.libvirt.virt_type \u003d\u003d \u0027lxc\u0027 and live_snapshot:"},{"line_number":2507,"context_line":"            return"},{"line_number":2508,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_74985d74","line":2505,"range":{"start_line":2505,"start_character":23,"end_line":2505,"end_character":28},"updated":"2020-07-09 12:32:18.000000000","message":"whoops","commit_id":"2739f1ed8d9d6bd41c155a1d99da5b2dd728ef0b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4643813d8215f2bdcaf4623e96a5e1ff9c241bee","unresolved":false,"context_lines":[{"line_number":2503,"context_line":"                         instance):"},{"line_number":2504,"context_line":"        # NOTE(dkang): because previous managedSave is not called for LXC,"},{"line_number":2505,"context_line":"        # _create_guest_from must not be called."},{"line_number":2506,"context_line":"        if CONF.libvirt.virt_type \u003d\u003d \u0027lxc\u0027 and live_snapshot:"},{"line_number":2507,"context_line":"            return"},{"line_number":2508,"context_line":""},{"line_number":2509,"context_line":"        pause \u003d state \u003d\u003d power_state.PAUSED"},{"line_number":2510,"context_line":"        guest \u003d self._create_guest_from_domain(virt_dom, pause\u003dpause)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_f4474d76","line":2507,"range":{"start_line":2506,"start_character":0,"end_line":2507,"end_character":18},"updated":"2020-07-09 12:32:18.000000000","message":"This isn\u0027t the same thing. The previous check wouldn only pass if the virt type was !\u003d lxc and we weren\u0027t doing a live snapshot","commit_id":"2739f1ed8d9d6bd41c155a1d99da5b2dd728ef0b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"207717e3e8510ce9d2edacda5e8d70f34ac1c4c5","unresolved":false,"context_lines":[{"line_number":2503,"context_line":"                         instance):"},{"line_number":2504,"context_line":"        # NOTE(dkang): because previous managedSave is not called for LXC,"},{"line_number":2505,"context_line":"        # _create_guest_from must not be called."},{"line_number":2506,"context_line":"        if CONF.libvirt.virt_type \u003d\u003d \u0027lxc\u0027 and live_snapshot:"},{"line_number":2507,"context_line":"            return"},{"line_number":2508,"context_line":""},{"line_number":2509,"context_line":"        pause \u003d state \u003d\u003d power_state.PAUSED"},{"line_number":2510,"context_line":"        guest \u003d self._create_guest_from_domain(virt_dom, pause\u003dpause)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_1da7850d","line":2507,"range":{"start_line":2506,"start_character":0,"end_line":2507,"end_character":18},"in_reply_to":"bf51134e_f4474d76","updated":"2020-07-09 12:38:59.000000000","message":"good catch","commit_id":"2739f1ed8d9d6bd41c155a1d99da5b2dd728ef0b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4643813d8215f2bdcaf4623e96a5e1ff9c241bee","unresolved":false,"context_lines":[{"line_number":2506,"context_line":"        if CONF.libvirt.virt_type \u003d\u003d \u0027lxc\u0027 and live_snapshot:"},{"line_number":2507,"context_line":"            return"},{"line_number":2508,"context_line":""},{"line_number":2509,"context_line":"        pause \u003d state \u003d\u003d power_state.PAUSED"},{"line_number":2510,"context_line":"        guest \u003d self._create_guest_from_domain(virt_dom, pause\u003dpause)"},{"line_number":2511,"context_line":"        self._attach_pci_devices("},{"line_number":2512,"context_line":"            guest, pci_manager.get_instance_pci_devs(instance))"},{"line_number":2513,"context_line":"        self._attach_direct_passthrough_ports(context, instance, guest)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_d431690d","line":2510,"range":{"start_line":2509,"start_character":0,"end_line":2510,"end_character":69},"updated":"2020-07-09 12:32:18.000000000","message":"This also isn\u0027t the same: there can be more states than PAUSED and RUNNING, though I\u0027m not sure if we will see any of those here. Maybe shutdown?","commit_id":"2739f1ed8d9d6bd41c155a1d99da5b2dd728ef0b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"09b8c6a319ba5b7f00a75e9509a23ea93a052da1","unresolved":false,"context_lines":[{"line_number":2506,"context_line":"        if CONF.libvirt.virt_type \u003d\u003d \u0027lxc\u0027 and live_snapshot:"},{"line_number":2507,"context_line":"            return"},{"line_number":2508,"context_line":""},{"line_number":2509,"context_line":"        pause \u003d state \u003d\u003d power_state.PAUSED"},{"line_number":2510,"context_line":"        guest \u003d self._create_guest_from_domain(virt_dom, pause\u003dpause)"},{"line_number":2511,"context_line":"        self._attach_pci_devices("},{"line_number":2512,"context_line":"            guest, pci_manager.get_instance_pci_devs(instance))"},{"line_number":2513,"context_line":"        self._attach_direct_passthrough_ports(context, instance, guest)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_0090bc42","line":2510,"range":{"start_line":2509,"start_character":0,"end_line":2510,"end_character":69},"in_reply_to":"bf51134e_9d5d5517","updated":"2020-07-09 13:42:21.000000000","message":"Yes, exactly. It took me a bit to grok due to terrible naming, but this function is the reverse of \u0027_prepare_domain_for_snapshot\u0027 above. As you can see, that only suspends the instance if we are in the PAUSED or RUNNING state, so we should only resume the instance (which is what the to \u0027_create_guest_from_domain\u0027 is effectively doing - see below) if the instance was in any of those states.","commit_id":"2739f1ed8d9d6bd41c155a1d99da5b2dd728ef0b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"207717e3e8510ce9d2edacda5e8d70f34ac1c4c5","unresolved":false,"context_lines":[{"line_number":2506,"context_line":"        if CONF.libvirt.virt_type \u003d\u003d \u0027lxc\u0027 and live_snapshot:"},{"line_number":2507,"context_line":"            return"},{"line_number":2508,"context_line":""},{"line_number":2509,"context_line":"        pause \u003d state \u003d\u003d power_state.PAUSED"},{"line_number":2510,"context_line":"        guest \u003d self._create_guest_from_domain(virt_dom, pause\u003dpause)"},{"line_number":2511,"context_line":"        self._attach_pci_devices("},{"line_number":2512,"context_line":"            guest, pci_manager.get_instance_pci_devs(instance))"},{"line_number":2513,"context_line":"        self._attach_direct_passthrough_ports(context, instance, guest)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_9d5d5517","line":2510,"range":{"start_line":2509,"start_character":0,"end_line":2510,"end_character":69},"in_reply_to":"bf51134e_d431690d","updated":"2020-07-09 12:38:59.000000000","message":"So you mean there are potential cases when the old code did not call _create_domain at all?","commit_id":"2739f1ed8d9d6bd41c155a1d99da5b2dd728ef0b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"09b8c6a319ba5b7f00a75e9509a23ea93a052da1","unresolved":false,"context_lines":[{"line_number":6439,"context_line":""},{"line_number":6440,"context_line":"        :returns guest.Guest: Guest just created"},{"line_number":6441,"context_line":"        \"\"\""},{"line_number":6442,"context_line":"        guest \u003d libvirt_guest.Guest(domain)"},{"line_number":6443,"context_line":"        if power_on or pause:"},{"line_number":6444,"context_line":"            guest.launch(pause\u003dpause)"},{"line_number":6445,"context_line":""},{"line_number":6446,"context_line":"        return guest"},{"line_number":6447,"context_line":""},{"line_number":6448,"context_line":"    def _neutron_failed_callback(self, event_name, instance):"},{"line_number":6449,"context_line":"        LOG.error(\u0027Neutron Reported failure on event \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_60c9b857","line":6446,"range":{"start_line":6442,"start_character":0,"end_line":6446,"end_character":20},"updated":"2020-07-09 13:42:21.000000000","message":"This is actually a garbage function. The Guest object maintains no state outside of the \u0027_domain\u0027 attribute, so in the below case, guest_a and guest_b are essentially identical:\n\n  guest_a \u003d libvirt_guest.Guest(domain)\n  guest_b \u003d libvirt_guest.Guest(domain)\n\nSo all this is *actually* doing is calling \u0027guest.launch(pause\u003dpause)\u0027, which we should instead do in the caller.","commit_id":"2739f1ed8d9d6bd41c155a1d99da5b2dd728ef0b"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"801759344bc4510079c643f7e2d0905314216c21","unresolved":false,"context_lines":[{"line_number":2349,"context_line":"        snapshot_name \u003d uuidutils.generate_uuid(dashed\u003dFalse)"},{"line_number":2350,"context_line":""},{"line_number":2351,"context_line":"        # store current state so we know what to resume back to if we suspend"},{"line_number":2352,"context_line":"        state \u003d guest.get_power_state(self._host)"},{"line_number":2353,"context_line":""},{"line_number":2354,"context_line":"        # NOTE(dgenin): Instances with LVM encrypted ephemeral storage require"},{"line_number":2355,"context_line":"        #               cold snapshots. Currently, checking for encryption is"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_d04db9c4","line":2352,"range":{"start_line":2352,"start_character":8,"end_line":2352,"end_character":13},"updated":"2020-07-14 10:57:26.000000000","message":"nit - original_power_state","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4a966ae8968d7dd5a1b41c1a9e56eff5eae5dca9","unresolved":false,"context_lines":[{"line_number":2349,"context_line":"        snapshot_name \u003d uuidutils.generate_uuid(dashed\u003dFalse)"},{"line_number":2350,"context_line":""},{"line_number":2351,"context_line":"        # store current state so we know what to resume back to if we suspend"},{"line_number":2352,"context_line":"        state \u003d guest.get_power_state(self._host)"},{"line_number":2353,"context_line":""},{"line_number":2354,"context_line":"        # NOTE(dgenin): Instances with LVM encrypted ephemeral storage require"},{"line_number":2355,"context_line":"        #               cold snapshots. Currently, checking for encryption is"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_2b8c8a34","line":2352,"range":{"start_line":2352,"start_character":8,"end_line":2352,"end_character":13},"in_reply_to":"bf51134e_4bde1e3e","updated":"2020-07-14 11:59:29.000000000","message":"Done","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e923e0c4449e2b36717bb6d1b4e516d34efdfe66","unresolved":false,"context_lines":[{"line_number":2349,"context_line":"        snapshot_name \u003d uuidutils.generate_uuid(dashed\u003dFalse)"},{"line_number":2350,"context_line":""},{"line_number":2351,"context_line":"        # store current state so we know what to resume back to if we suspend"},{"line_number":2352,"context_line":"        state \u003d guest.get_power_state(self._host)"},{"line_number":2353,"context_line":""},{"line_number":2354,"context_line":"        # NOTE(dgenin): Instances with LVM encrypted ephemeral storage require"},{"line_number":2355,"context_line":"        #               cold snapshots. Currently, checking for encryption is"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_4bde1e3e","line":2352,"range":{"start_line":2352,"start_character":8,"end_line":2352,"end_character":13},"in_reply_to":"bf51134e_d04db9c4","updated":"2020-07-14 11:30:06.000000000","message":"I actually though about doing this, but preferred the symmetry of variable names in _suspend_guest_for_snapshot/_resume_guest_after_snapshot. Now that there\u0027s another voice in favor, I can change","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"801759344bc4510079c643f7e2d0905314216c21","unresolved":false,"context_lines":[{"line_number":2368,"context_line":"                # remove the restriction on PAUSED once we require"},{"line_number":2369,"context_line":"                # libvirt\u003e\u003d3.6.0 and qemu\u003e\u003d2.10 since that works with the"},{"line_number":2370,"context_line":"                # Pike Ubuntu Cloud Archive testing in Queens."},{"line_number":2371,"context_line":"                state not in (power_state.SHUTDOWN, power_state.PAUSED)):"},{"line_number":2372,"context_line":"            live_snapshot \u003d True"},{"line_number":2373,"context_line":"            # Abort is an idempotent operation, so make sure any block"},{"line_number":2374,"context_line":"            # jobs which may have failed are ended. This operation also"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_1065711e","line":2371,"range":{"start_line":2371,"start_character":16,"end_line":2371,"end_character":21},"updated":"2020-07-14 10:57:26.000000000","message":"nit - original_power_state","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4a966ae8968d7dd5a1b41c1a9e56eff5eae5dca9","unresolved":false,"context_lines":[{"line_number":2368,"context_line":"                # remove the restriction on PAUSED once we require"},{"line_number":2369,"context_line":"                # libvirt\u003e\u003d3.6.0 and qemu\u003e\u003d2.10 since that works with the"},{"line_number":2370,"context_line":"                # Pike Ubuntu Cloud Archive testing in Queens."},{"line_number":2371,"context_line":"                state not in (power_state.SHUTDOWN, power_state.PAUSED)):"},{"line_number":2372,"context_line":"            live_snapshot \u003d True"},{"line_number":2373,"context_line":"            # Abort is an idempotent operation, so make sure any block"},{"line_number":2374,"context_line":"            # jobs which may have failed are ended. This operation also"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_eb9c526b","line":2371,"range":{"start_line":2371,"start_character":16,"end_line":2371,"end_character":21},"in_reply_to":"bf51134e_1065711e","updated":"2020-07-14 11:59:29.000000000","message":"Done","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"801759344bc4510079c643f7e2d0905314216c21","unresolved":false,"context_lines":[{"line_number":2386,"context_line":"            live_snapshot \u003d False"},{"line_number":2387,"context_line":""},{"line_number":2388,"context_line":"        self._suspend_guest_for_snapshot("},{"line_number":2389,"context_line":"            context, live_snapshot, state, instance)"},{"line_number":2390,"context_line":""},{"line_number":2391,"context_line":"        root_disk \u003d self.image_backend.by_libvirt_path("},{"line_number":2392,"context_line":"            instance, disk_path, image_type\u003dsource_type)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_b0a4854c","line":2389,"range":{"start_line":2389,"start_character":36,"end_line":2389,"end_character":41},"updated":"2020-07-14 10:57:26.000000000","message":"nit - original_power_state","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4a966ae8968d7dd5a1b41c1a9e56eff5eae5dca9","unresolved":false,"context_lines":[{"line_number":2386,"context_line":"            live_snapshot \u003d False"},{"line_number":2387,"context_line":""},{"line_number":2388,"context_line":"        self._suspend_guest_for_snapshot("},{"line_number":2389,"context_line":"            context, live_snapshot, state, instance)"},{"line_number":2390,"context_line":""},{"line_number":2391,"context_line":"        root_disk \u003d self.image_backend.by_libvirt_path("},{"line_number":2392,"context_line":"            instance, disk_path, image_type\u003dsource_type)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_cb97ce44","line":2389,"range":{"start_line":2389,"start_character":36,"end_line":2389,"end_character":41},"in_reply_to":"bf51134e_b0a4854c","updated":"2020-07-14 11:59:29.000000000","message":"Done","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"801759344bc4510079c643f7e2d0905314216c21","unresolved":false,"context_lines":[{"line_number":2406,"context_line":"                context, snapshot_name, image_format, image_id,"},{"line_number":2407,"context_line":"                instance.image_ref)"},{"line_number":2408,"context_line":"            self._resume_guest_after_snapshot("},{"line_number":2409,"context_line":"                context, live_snapshot, state, instance, guest)"},{"line_number":2410,"context_line":"            self._image_api.update(context, image_id, metadata,"},{"line_number":2411,"context_line":"                                   purge_props\u003dFalse)"},{"line_number":2412,"context_line":"        except (NotImplementedError, exception.ImageUnacceptable,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_d0a93924","line":2409,"range":{"start_line":2409,"start_character":40,"end_line":2409,"end_character":45},"updated":"2020-07-14 10:57:26.000000000","message":"nit - original_power_state","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4a966ae8968d7dd5a1b41c1a9e56eff5eae5dca9","unresolved":false,"context_lines":[{"line_number":2406,"context_line":"                context, snapshot_name, image_format, image_id,"},{"line_number":2407,"context_line":"                instance.image_ref)"},{"line_number":2408,"context_line":"            self._resume_guest_after_snapshot("},{"line_number":2409,"context_line":"                context, live_snapshot, state, instance, guest)"},{"line_number":2410,"context_line":"            self._image_api.update(context, image_id, metadata,"},{"line_number":2411,"context_line":"                                   purge_props\u003dFalse)"},{"line_number":2412,"context_line":"        except (NotImplementedError, exception.ImageUnacceptable,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_0b8f062a","line":2409,"range":{"start_line":2409,"start_character":40,"end_line":2409,"end_character":45},"in_reply_to":"bf51134e_d0a93924","updated":"2020-07-14 11:59:29.000000000","message":"Done","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"801759344bc4510079c643f7e2d0905314216c21","unresolved":false,"context_lines":[{"line_number":2431,"context_line":"                live_snapshot \u003d False"},{"line_number":2432,"context_line":"                # Suspend the guest, so this is no longer a live snapshot"},{"line_number":2433,"context_line":"                self._suspend_guest_for_snapshot("},{"line_number":2434,"context_line":"                    context, live_snapshot, state, instance)"},{"line_number":2435,"context_line":""},{"line_number":2436,"context_line":"            snapshot_directory \u003d CONF.libvirt.snapshots_directory"},{"line_number":2437,"context_line":"            fileutils.ensure_tree(snapshot_directory)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_70ae6d2e","line":2434,"range":{"start_line":2434,"start_character":44,"end_line":2434,"end_character":49},"updated":"2020-07-14 10:57:26.000000000","message":"nit - original_power_state","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4a966ae8968d7dd5a1b41c1a9e56eff5eae5dca9","unresolved":false,"context_lines":[{"line_number":2431,"context_line":"                live_snapshot \u003d False"},{"line_number":2432,"context_line":"                # Suspend the guest, so this is no longer a live snapshot"},{"line_number":2433,"context_line":"                self._suspend_guest_for_snapshot("},{"line_number":2434,"context_line":"                    context, live_snapshot, state, instance)"},{"line_number":2435,"context_line":""},{"line_number":2436,"context_line":"            snapshot_directory \u003d CONF.libvirt.snapshots_directory"},{"line_number":2437,"context_line":"            fileutils.ensure_tree(snapshot_directory)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_6b820202","line":2434,"range":{"start_line":2434,"start_character":44,"end_line":2434,"end_character":49},"in_reply_to":"bf51134e_70ae6d2e","updated":"2020-07-14 11:59:29.000000000","message":"Done","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"801759344bc4510079c643f7e2d0905314216c21","unresolved":false,"context_lines":[{"line_number":2464,"context_line":"                        raise"},{"line_number":2465,"context_line":"                finally:"},{"line_number":2466,"context_line":"                    self._resume_guest_after_snapshot("},{"line_number":2467,"context_line":"                        context, live_snapshot, state, instance, guest)"},{"line_number":2468,"context_line":""},{"line_number":2469,"context_line":"                # Upload that image to the image service"},{"line_number":2470,"context_line":"                update_task_state(task_state\u003dtask_states.IMAGE_UPLOADING,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_90b34198","line":2467,"range":{"start_line":2467,"start_character":48,"end_line":2467,"end_character":53},"updated":"2020-07-14 10:57:26.000000000","message":"nit - original_power_state","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4a966ae8968d7dd5a1b41c1a9e56eff5eae5dca9","unresolved":false,"context_lines":[{"line_number":2464,"context_line":"                        raise"},{"line_number":2465,"context_line":"                finally:"},{"line_number":2466,"context_line":"                    self._resume_guest_after_snapshot("},{"line_number":2467,"context_line":"                        context, live_snapshot, state, instance, guest)"},{"line_number":2468,"context_line":""},{"line_number":2469,"context_line":"                # Upload that image to the image service"},{"line_number":2470,"context_line":"                update_task_state(task_state\u003dtask_states.IMAGE_UPLOADING,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_4b857e06","line":2467,"range":{"start_line":2467,"start_character":48,"end_line":2467,"end_character":53},"in_reply_to":"bf51134e_90b34198","updated":"2020-07-14 11:59:29.000000000","message":"Done","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"801759344bc4510079c643f7e2d0905314216c21","unresolved":false,"context_lines":[{"line_number":2491,"context_line":"    def _needs_suspend_resume_for_snapshot("},{"line_number":2492,"context_line":"        self,"},{"line_number":2493,"context_line":"        live_snapshot: bool,"},{"line_number":2494,"context_line":"        state: str,"},{"line_number":2495,"context_line":"    ):"},{"line_number":2496,"context_line":"        # NOTE(dkang): managedSave does not work for LXC"},{"line_number":2497,"context_line":"        if CONF.libvirt.virt_type \u003d\u003d \u0027lxc\u0027:"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_b08be5bd","line":2494,"range":{"start_line":2494,"start_character":8,"end_line":2494,"end_character":13},"updated":"2020-07-14 10:57:26.000000000","message":"nit - power_state","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4a966ae8968d7dd5a1b41c1a9e56eff5eae5dca9","unresolved":false,"context_lines":[{"line_number":2491,"context_line":"    def _needs_suspend_resume_for_snapshot("},{"line_number":2492,"context_line":"        self,"},{"line_number":2493,"context_line":"        live_snapshot: bool,"},{"line_number":2494,"context_line":"        state: str,"},{"line_number":2495,"context_line":"    ):"},{"line_number":2496,"context_line":"        # NOTE(dkang): managedSave does not work for LXC"},{"line_number":2497,"context_line":"        if CONF.libvirt.virt_type \u003d\u003d \u0027lxc\u0027:"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_8b7af620","line":2494,"range":{"start_line":2494,"start_character":8,"end_line":2494,"end_character":13},"in_reply_to":"bf51134e_b08be5bd","updated":"2020-07-14 11:59:29.000000000","message":"Done","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"801759344bc4510079c643f7e2d0905314216c21","unresolved":false,"context_lines":[{"line_number":2502,"context_line":"            return False"},{"line_number":2503,"context_line":""},{"line_number":2504,"context_line":"        # ...and neither does a non-running domain"},{"line_number":2505,"context_line":"        return state in (power_state.RUNNING, power_state.PAUSED)"},{"line_number":2506,"context_line":""},{"line_number":2507,"context_line":"    def _suspend_guest_for_snapshot("},{"line_number":2508,"context_line":"        self,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_f0c27de8","line":2505,"range":{"start_line":2505,"start_character":15,"end_line":2505,"end_character":20},"updated":"2020-07-14 10:57:26.000000000","message":"nit - power_state","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4a966ae8968d7dd5a1b41c1a9e56eff5eae5dca9","unresolved":false,"context_lines":[{"line_number":2502,"context_line":"            return False"},{"line_number":2503,"context_line":""},{"line_number":2504,"context_line":"        # ...and neither does a non-running domain"},{"line_number":2505,"context_line":"        return state in (power_state.RUNNING, power_state.PAUSED)"},{"line_number":2506,"context_line":""},{"line_number":2507,"context_line":"    def _suspend_guest_for_snapshot("},{"line_number":2508,"context_line":"        self,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_eb757233","line":2505,"range":{"start_line":2505,"start_character":15,"end_line":2505,"end_character":20},"in_reply_to":"bf51134e_f0c27de8","updated":"2020-07-14 11:59:29.000000000","message":"Done","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"801759344bc4510079c643f7e2d0905314216c21","unresolved":false,"context_lines":[{"line_number":2508,"context_line":"        self,"},{"line_number":2509,"context_line":"        context: nova_context.RequestContext,"},{"line_number":2510,"context_line":"        live_snapshot: bool,"},{"line_number":2511,"context_line":"        state: str,"},{"line_number":2512,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":2513,"context_line":"    ):"},{"line_number":2514,"context_line":"        if not self._needs_suspend_resume_for_snapshot(live_snapshot, state):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_7085cdac","line":2511,"range":{"start_line":2511,"start_character":8,"end_line":2511,"end_character":13},"updated":"2020-07-14 10:57:26.000000000","message":"nit - original_power_state","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4a966ae8968d7dd5a1b41c1a9e56eff5eae5dca9","unresolved":false,"context_lines":[{"line_number":2508,"context_line":"        self,"},{"line_number":2509,"context_line":"        context: nova_context.RequestContext,"},{"line_number":2510,"context_line":"        live_snapshot: bool,"},{"line_number":2511,"context_line":"        state: str,"},{"line_number":2512,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":2513,"context_line":"    ):"},{"line_number":2514,"context_line":"        if not self._needs_suspend_resume_for_snapshot(live_snapshot, state):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_cb706e43","line":2511,"range":{"start_line":2511,"start_character":8,"end_line":2511,"end_character":13},"in_reply_to":"bf51134e_7085cdac","updated":"2020-07-14 11:59:29.000000000","message":"went with current_power_state","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"801759344bc4510079c643f7e2d0905314216c21","unresolved":false,"context_lines":[{"line_number":2511,"context_line":"        state: str,"},{"line_number":2512,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":2513,"context_line":"    ):"},{"line_number":2514,"context_line":"        if not self._needs_suspend_resume_for_snapshot(live_snapshot, state):"},{"line_number":2515,"context_line":"            return"},{"line_number":2516,"context_line":""},{"line_number":2517,"context_line":"        self.suspend(context, instance)"},{"line_number":2518,"context_line":""},{"line_number":2519,"context_line":"    def _resume_guest_after_snapshot("},{"line_number":2520,"context_line":"        self,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_70d78dc0","line":2517,"range":{"start_line":2514,"start_character":0,"end_line":2517,"end_character":39},"updated":"2020-07-14 10:57:26.000000000","message":"nit - Why return when you can just call self.suspend \n\n    if self._needs_suspend_resume_for_snapshot(live_snapshot, state):\n        self.suspend(context, instance)","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e923e0c4449e2b36717bb6d1b4e516d34efdfe66","unresolved":false,"context_lines":[{"line_number":2511,"context_line":"        state: str,"},{"line_number":2512,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":2513,"context_line":"    ):"},{"line_number":2514,"context_line":"        if not self._needs_suspend_resume_for_snapshot(live_snapshot, state):"},{"line_number":2515,"context_line":"            return"},{"line_number":2516,"context_line":""},{"line_number":2517,"context_line":"        self.suspend(context, instance)"},{"line_number":2518,"context_line":""},{"line_number":2519,"context_line":"    def _resume_guest_after_snapshot("},{"line_number":2520,"context_line":"        self,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_cbe98ee3","line":2517,"range":{"start_line":2514,"start_character":0,"end_line":2517,"end_character":39},"in_reply_to":"bf51134e_70d78dc0","updated":"2020-07-14 11:30:06.000000000","message":"ima say this used to be longer but got chopped down through subsequent changes. What you\u0027ve said makes sense","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"801759344bc4510079c643f7e2d0905314216c21","unresolved":false,"context_lines":[{"line_number":2520,"context_line":"        self,"},{"line_number":2521,"context_line":"        context: nova_context.RequestContext,"},{"line_number":2522,"context_line":"        live_snapshot: bool,"},{"line_number":2523,"context_line":"        state: str,"},{"line_number":2524,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":2525,"context_line":"        guest: libvirt_guest.Guest,"},{"line_number":2526,"context_line":"    ):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_10645149","line":2523,"range":{"start_line":2523,"start_character":8,"end_line":2523,"end_character":13},"updated":"2020-07-14 10:57:26.000000000","message":"nit - original_power_state","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4a966ae8968d7dd5a1b41c1a9e56eff5eae5dca9","unresolved":false,"context_lines":[{"line_number":2520,"context_line":"        self,"},{"line_number":2521,"context_line":"        context: nova_context.RequestContext,"},{"line_number":2522,"context_line":"        live_snapshot: bool,"},{"line_number":2523,"context_line":"        state: str,"},{"line_number":2524,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":2525,"context_line":"        guest: libvirt_guest.Guest,"},{"line_number":2526,"context_line":"    ):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_0b942636","line":2523,"range":{"start_line":2523,"start_character":8,"end_line":2523,"end_character":13},"in_reply_to":"bf51134e_10645149","updated":"2020-07-14 11:59:29.000000000","message":"Done","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"801759344bc4510079c643f7e2d0905314216c21","unresolved":false,"context_lines":[{"line_number":2527,"context_line":"        if not self._needs_suspend_resume_for_snapshot(live_snapshot, state):"},{"line_number":2528,"context_line":"            return"},{"line_number":2529,"context_line":""},{"line_number":2530,"context_line":"        state \u003d guest.get_power_state(self._host)"},{"line_number":2531,"context_line":""},{"line_number":2532,"context_line":"        # TODO(stephenfin): Any reason we couldn\u0027t use \u0027self.resume\u0027 here?"},{"line_number":2533,"context_line":"        guest.launch(pause\u003dstate \u003d\u003d power_state.PAUSED)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_d0749900","line":2530,"range":{"start_line":2530,"start_character":8,"end_line":2530,"end_character":13},"updated":"2020-07-14 10:57:26.000000000","message":"nit - current_power_state otherwise it\u0027s slightly confusing given we are passing in the original state above.","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4a966ae8968d7dd5a1b41c1a9e56eff5eae5dca9","unresolved":false,"context_lines":[{"line_number":2527,"context_line":"        if not self._needs_suspend_resume_for_snapshot(live_snapshot, state):"},{"line_number":2528,"context_line":"            return"},{"line_number":2529,"context_line":""},{"line_number":2530,"context_line":"        state \u003d guest.get_power_state(self._host)"},{"line_number":2531,"context_line":""},{"line_number":2532,"context_line":"        # TODO(stephenfin): Any reason we couldn\u0027t use \u0027self.resume\u0027 here?"},{"line_number":2533,"context_line":"        guest.launch(pause\u003dstate \u003d\u003d power_state.PAUSED)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_6b97a23b","line":2530,"range":{"start_line":2530,"start_character":8,"end_line":2530,"end_character":13},"in_reply_to":"bf51134e_d0749900","updated":"2020-07-14 11:59:29.000000000","message":"Done","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"801759344bc4510079c643f7e2d0905314216c21","unresolved":false,"context_lines":[{"line_number":2529,"context_line":""},{"line_number":2530,"context_line":"        state \u003d guest.get_power_state(self._host)"},{"line_number":2531,"context_line":""},{"line_number":2532,"context_line":"        # TODO(stephenfin): Any reason we couldn\u0027t use \u0027self.resume\u0027 here?"},{"line_number":2533,"context_line":"        guest.launch(pause\u003dstate \u003d\u003d power_state.PAUSED)"},{"line_number":2534,"context_line":""},{"line_number":2535,"context_line":"        self._attach_pci_devices("}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_30a07542","line":2532,"range":{"start_line":2532,"start_character":8,"end_line":2532,"end_character":74},"updated":"2020-07-14 10:57:26.000000000","message":"I was about to write this as a comment given the PCI stuff below, the TODO is enough for now but we should definitely call self.resume in the future.","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"41ac6ff1bc53481d2b64a4a7a2ba36d6e981bd0c","unresolved":false,"context_lines":[{"line_number":2530,"context_line":"        state \u003d guest.get_power_state(self._host)"},{"line_number":2531,"context_line":""},{"line_number":2532,"context_line":"        # TODO(stephenfin): Any reason we couldn\u0027t use \u0027self.resume\u0027 here?"},{"line_number":2533,"context_line":"        guest.launch(pause\u003dstate \u003d\u003d power_state.PAUSED)"},{"line_number":2534,"context_line":""},{"line_number":2535,"context_line":"        self._attach_pci_devices("},{"line_number":2536,"context_line":"            guest, pci_manager.get_instance_pci_devs(instance))"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_201060a8","line":2533,"updated":"2020-07-09 13:46:27.000000000","message":"See [1]. These are equivalent.\n\n[1] https://review.opendev.org/#/c/739208/3/nova/virt/libvirt/driver.py@6446","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"41ac6ff1bc53481d2b64a4a7a2ba36d6e981bd0c","unresolved":false,"context_lines":[{"line_number":3212,"context_line":"                if state in (power_state.SHUTDOWN, power_state.CRASHED):"},{"line_number":3213,"context_line":"                    LOG.info(\"Instance shutdown successfully.\","},{"line_number":3214,"context_line":"                             instance\u003dinstance)"},{"line_number":3215,"context_line":"                    guest.launch()"},{"line_number":3216,"context_line":"                    timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":3217,"context_line":"                        self._wait_for_running, instance)"},{"line_number":3218,"context_line":"                    timer.start(interval\u003d0.5).wait()"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_e01948d7","line":3215,"updated":"2020-07-09 13:46:27.000000000","message":"See [1]. These are equivalent.\n\n[1] https://review.opendev.org/#/c/739208/3/nova/virt/libvirt/driver.py@6446","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"801759344bc4510079c643f7e2d0905314216c21","unresolved":false,"context_lines":[{"line_number":6435,"context_line":"    def _create_guest("},{"line_number":6436,"context_line":"        self,"},{"line_number":6437,"context_line":"        xml: str,"},{"line_number":6438,"context_line":"        power_on: bool \u003d True,"},{"line_number":6439,"context_line":"        pause: bool \u003d False,"},{"line_number":6440,"context_line":"        post_xml_callback: ty.Callable \u003d None,"},{"line_number":6441,"context_line":"    ) -\u003e libvirt_guest.Guest:"},{"line_number":6442,"context_line":"        \"\"\"Create a Guest from XML."}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_b052c533","line":6439,"range":{"start_line":6438,"start_character":0,"end_line":6439,"end_character":28},"updated":"2020-07-14 10:57:26.000000000","message":"supernit - Would be cool if we could just pass a target power_state here instead of having two separate booleans.","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4a966ae8968d7dd5a1b41c1a9e56eff5eae5dca9","unresolved":false,"context_lines":[{"line_number":6435,"context_line":"    def _create_guest("},{"line_number":6436,"context_line":"        self,"},{"line_number":6437,"context_line":"        xml: str,"},{"line_number":6438,"context_line":"        power_on: bool \u003d True,"},{"line_number":6439,"context_line":"        pause: bool \u003d False,"},{"line_number":6440,"context_line":"        post_xml_callback: ty.Callable \u003d None,"},{"line_number":6441,"context_line":"    ) -\u003e libvirt_guest.Guest:"},{"line_number":6442,"context_line":"        \"\"\"Create a Guest from XML."}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_0bbd46b6","line":6439,"range":{"start_line":6438,"start_character":0,"end_line":6439,"end_character":28},"in_reply_to":"bf51134e_4bb73ef6","updated":"2020-07-14 11:59:29.000000000","message":"Okay, this necessitates reworking \u0027_create_guest_with_network\u0027 and its many callers, which is too much work for now. I\u0027m going to leave this for now :)","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e923e0c4449e2b36717bb6d1b4e516d34efdfe66","unresolved":false,"context_lines":[{"line_number":6435,"context_line":"    def _create_guest("},{"line_number":6436,"context_line":"        self,"},{"line_number":6437,"context_line":"        xml: str,"},{"line_number":6438,"context_line":"        power_on: bool \u003d True,"},{"line_number":6439,"context_line":"        pause: bool \u003d False,"},{"line_number":6440,"context_line":"        post_xml_callback: ty.Callable \u003d None,"},{"line_number":6441,"context_line":"    ) -\u003e libvirt_guest.Guest:"},{"line_number":6442,"context_line":"        \"\"\"Create a Guest from XML."}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_4bb73ef6","line":6439,"range":{"start_line":6438,"start_character":0,"end_line":6439,"end_character":28},"in_reply_to":"bf51134e_b052c533","updated":"2020-07-14 11:30:06.000000000","message":"Agreed. I\u0027ll see how easy it is to do","commit_id":"5ba7c02c8463e86b20160ada93343dcc34b75385"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"eac14ac80f7cb3eca7c513c31f80fd81e05c3276","unresolved":false,"context_lines":[{"line_number":2491,"context_line":"    def _needs_suspend_resume_for_snapshot("},{"line_number":2492,"context_line":"        self,"},{"line_number":2493,"context_line":"        live_snapshot: bool,"},{"line_number":2494,"context_line":"        state: str,"},{"line_number":2495,"context_line":"    ):"},{"line_number":2496,"context_line":"        # NOTE(dkang): managedSave does not work for LXC"},{"line_number":2497,"context_line":"        if CONF.libvirt.virt_type \u003d\u003d \u0027lxc\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_a996a23d","line":2494,"range":{"start_line":2494,"start_character":8,"end_line":2494,"end_character":19},"updated":"2020-07-17 16:22:04.000000000","message":"Turns out these are actually ints. mypy can\u0027t tell yet because nova.compute.power_state isn\u0027t yet type checked /o\\","commit_id":"969a6d49e5bac0d19f56d17d42425febcc71517b"}]}
