)]}'
{"nova/tests/functional/libvirt/test_pci_sriov_servers.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"16b9ca7a4cad3a4f97ab0ddf2a37564497909b06","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            \u0027.PciPassthroughFilter.host_passes\u0027,"},{"line_number":61,"context_line":"            side_effect\u003dhost_pass_mock)).mock"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def assertPCIDeviceCounts(self, hostname, total, free):"},{"line_number":64,"context_line":"        \"\"\"Ensure $hostname has $total devices, $free of which are free.\"\"\""},{"line_number":65,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":66,"context_line":"        devices \u003d objects.PciDeviceList.get_by_compute_node("}],"source_content_type":"text/x-python","patch_set":8,"id":"7f6b1bfe_f5884b20","line":63,"updated":"2020-10-15 15:15:15.000000000","message":"Wait, camel case?","commit_id":"95576249123b062c2d7111c35806a2695e21f077"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"22091ba8bea8325927f0f386ac1522b432c6b285","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            \u0027.PciPassthroughFilter.host_passes\u0027,"},{"line_number":61,"context_line":"            side_effect\u003dhost_pass_mock)).mock"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def assertPCIDeviceCounts(self, hostname, total, free):"},{"line_number":64,"context_line":"        \"\"\"Ensure $hostname has $total devices, $free of which are free.\"\"\""},{"line_number":65,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":66,"context_line":"        devices \u003d objects.PciDeviceList.get_by_compute_node("}],"source_content_type":"text/x-python","patch_set":8,"id":"5f681702_3777823d","line":63,"in_reply_to":"7f6b1bfe_f5884b20","updated":"2020-10-19 09:21:36.000000000","message":"unittest uses it (assertEqual, assertIn, ...) so I figured it was consistent with that. I\u0027ve always done it this way, fwiw","commit_id":"95576249123b062c2d7111c35806a2695e21f077"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"16b9ca7a4cad3a4f97ab0ddf2a37564497909b06","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    def _migrate_stub(self, domain, destination, params, flags):"},{"line_number":128,"context_line":"        \"\"\"Stub out migrateToURI3.\"\"\""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        src_hostname \u003d domain._connection.hostname"},{"line_number":131,"context_line":"        dst_hostname \u003d urlparse.urlparse(destination).netloc"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        # In a real live migration, libvirt and QEMU on the source and"},{"line_number":134,"context_line":"        # destination talk it out, resulting in the instance starting to exist"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f6b1bfe_7551dbd8","line":131,"range":{"start_line":130,"start_character":0,"end_line":131,"end_character":60},"updated":"2020-10-15 15:15:15.000000000","message":"nit: can we put these below the comment, since they\u0027re related to finding the dest host and creating the incoming server on it?","commit_id":"95576249123b062c2d7111c35806a2695e21f077"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"16b9ca7a4cad3a4f97ab0ddf2a37564497909b06","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        dst.driver._host.get_connection().createXML("},{"line_number":140,"context_line":"            params[\u0027destination_xml\u0027],"},{"line_number":141,"context_line":"            \u0027fake-createXML-doesnt-care-about-flags\u0027)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        src \u003d self.computes[src_hostname]"},{"line_number":144,"context_line":"        conn \u003d src.driver._host.get_connection()"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        # because migrateToURI3 is spawned in a background thread, this method"},{"line_number":147,"context_line":"        # does not block the upper nova layers. Because we don\u0027t want nova to"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f6b1bfe_d55f0fe3","line":144,"range":{"start_line":142,"start_character":0,"end_line":144,"end_character":48},"updated":"2020-10-15 15:15:15.000000000","message":"nit: Ditto - can we put these below the comment, since they\u0027re about getting the source connection and completing the job.","commit_id":"95576249123b062c2d7111c35806a2695e21f077"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"16b9ca7a4cad3a4f97ab0ddf2a37564497909b06","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        ).find(\u0027./uuid\u0027).text"},{"line_number":154,"context_line":"        dom \u003d conn.lookupByUUIDString(server)"},{"line_number":155,"context_line":"        dom.complete_job()"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def test_create_server_with_VF(self):"},{"line_number":158,"context_line":"        \"\"\"Create a server with an SR-IOV VF-type PCI device.\"\"\""},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7f6b1bfe_5573ff80","line":156,"updated":"2020-10-15 15:15:15.000000000","message":"nit: should we set a flag here (and then assert it in the tests) that the stub actually ran, similar to how I did it in test_numa_live_migration.py?","commit_id":"95576249123b062c2d7111c35806a2695e21f077"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"16b9ca7a4cad3a4f97ab0ddf2a37564497909b06","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        )"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        # ensure the binding details sent to \"neutron\" were correct"},{"line_number":269,"context_line":"        port \u003d self.neutron.show_port("},{"line_number":270,"context_line":"            base.LibvirtNeutronFixture.network_4_port_1[\u0027id\u0027],"},{"line_number":271,"context_line":"        )[\u0027port\u0027]"},{"line_number":272,"context_line":"        self.assertIn(\u0027binding:profile\u0027, port)"},{"line_number":273,"context_line":"        self.assertEqual("},{"line_number":274,"context_line":"            {"},{"line_number":275,"context_line":"                \u0027pci_vendor_info\u0027: \u00278086:1515\u0027,"},{"line_number":276,"context_line":"                \u0027pci_slot\u0027: \u00270000:81:00.2\u0027,"},{"line_number":277,"context_line":"                \u0027physical_network\u0027: \u0027physnet4\u0027,"},{"line_number":278,"context_line":"            },"},{"line_number":279,"context_line":"            port[\u0027binding:profile\u0027],"},{"line_number":280,"context_line":"        )"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def test_live_migrate_server_with_PF(self):"},{"line_number":283,"context_line":"        \"\"\"Live migrate an instance with a PCI PF."}],"source_content_type":"text/x-python","patch_set":8,"id":"7f6b1bfe_7518bb1c","line":280,"range":{"start_line":269,"start_character":0,"end_line":280,"end_character":9},"updated":"2020-10-15 15:15:15.000000000","message":"This isn\u0027t actually new code (see L218-229 on the left), just gerrit getting confused.","commit_id":"95576249123b062c2d7111c35806a2695e21f077"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4d6150ae56f07c4f34213db29f54752abed9dd2b","unresolved":false,"context_lines":[{"line_number":369,"context_line":"            host\u003d\u0027test_compute0\u0027,"},{"line_number":370,"context_line":"        )"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        # our source host should have marked two PCI devices are used, the VF"},{"line_number":373,"context_line":"        # and the parent PF, while the future destination is currnetly unused"},{"line_number":374,"context_line":"        self.assertEqual(\u0027test_compute0\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":375,"context_line":"        self.assertPCIDeviceCounts(\u0027test_compute0\u0027, total\u003d10, free\u003d8)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f6b1bfe_f074d99b","line":372,"range":{"start_line":372,"start_character":61,"end_line":372,"end_character":64},"updated":"2020-10-15 15:33:05.000000000","message":"\"as\"","commit_id":"95576249123b062c2d7111c35806a2695e21f077"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4d6150ae56f07c4f34213db29f54752abed9dd2b","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        )"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        # our source host should have marked two PCI devices are used, the VF"},{"line_number":373,"context_line":"        # and the parent PF, while the future destination is currnetly unused"},{"line_number":374,"context_line":"        self.assertEqual(\u0027test_compute0\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":375,"context_line":"        self.assertPCIDeviceCounts(\u0027test_compute0\u0027, total\u003d10, free\u003d8)"},{"line_number":376,"context_line":"        self.assertPCIDeviceCounts(\u0027test_compute1\u0027, total\u003d3, free\u003d3)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f6b1bfe_50694dbc","line":373,"range":{"start_line":373,"start_character":61,"end_line":373,"end_character":70},"updated":"2020-10-15 15:33:05.000000000","message":"\"currently\"","commit_id":"95576249123b062c2d7111c35806a2695e21f077"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"16b9ca7a4cad3a4f97ab0ddf2a37564497909b06","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        self.assertIn(\u0027binding:profile\u0027, port)"},{"line_number":383,"context_line":"        self.assertEqual("},{"line_number":384,"context_line":"            {"},{"line_number":385,"context_line":"                \u0027pci_vendor_info\u0027: \u00278086:1515\u0027,"},{"line_number":386,"context_line":"                # TODO(stephenfin): Stop relying on a side-effect of how nova"},{"line_number":387,"context_line":"                # chooses from multiple PCI devices (apparently the last"},{"line_number":388,"context_line":"                # matching one)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f6b1bfe_55277f13","line":385,"updated":"2020-10-15 15:15:15.000000000","message":"OK, we\u0027ve asked for network_4_port_1 - and network_4 is declared as being \u0027physnet4\u0027 in nova/tests/functional/libvirt/base.py. So we expect these IDs to be those of a VF attached to physnet4. This is indeed the case, as 1515 is the VF_PROD_ID in fakelibvirt.py, which is what we\u0027ve declared as being attached to physnet4 on L91 in our PCI_PASSTHROUGH_WHITELIST.","commit_id":"95576249123b062c2d7111c35806a2695e21f077"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"16b9ca7a4cad3a4f97ab0ddf2a37564497909b06","unresolved":false,"context_lines":[{"line_number":627,"context_line":"        self._create_server("},{"line_number":628,"context_line":"            flavor_id\u003dflavor_id, networks\u003d\u0027none\u0027, expected_state\u003d\u0027ERROR\u0027)"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"    def test_live_migrate_server_with_pci(self):"},{"line_number":631,"context_line":"        \"\"\"Live migrate an instance with a PCI passthrough device."},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"        This should fail because it\u0027s not possible to live migrate an instance"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f6b1bfe_b5c253e8","line":630,"updated":"2020-10-15 15:15:15.000000000","message":"OK, this is a generic PCI device, not a PF like the other veeeerry similar-looking test on L282.","commit_id":"95576249123b062c2d7111c35806a2695e21f077"}],"nova/tests/unit/virt/libvirt/fakelibvirt.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"41ce9524656f7c4cd592845828611e2bef1ac1a2","unresolved":true,"context_lines":[{"line_number":1178,"context_line":"                   function\u003d\u00270x01\u0027/\u003e"},{"line_number":1179,"context_line":"          \u003c/source\u003e"},{"line_number":1180,"context_line":"          \u003caddress type\u003d\u0027pci\u0027 domain\u003d\u00270x0000\u0027 bus\u003d\u00270x00\u0027 slot\u003d\u00270x03\u0027 function\u003d\u00270x0\u0027/\u003e"},{"line_number":1181,"context_line":"        \u003c/interface\u003e\u0027\u0027\u0027 % nic  # noqa"},{"line_number":1182,"context_line":""},{"line_number":1183,"context_line":"        hostdevs \u003d \u0027\u0027"},{"line_number":1184,"context_line":"        for hostdev in self._def[\u0027devices\u0027][\u0027hostdevs\u0027]:"}],"source_content_type":"text/x-python","patch_set":9,"id":"6dad556c_a6fe4e26","line":1181,"range":{"start_line":1181,"start_character":30,"end_line":1181,"end_character":37},"updated":"2020-12-17 15:09:10.000000000","message":"I don\u0027t see the need for this (even in the commit msg) but OK, I trust you and I don\u0027t want to bikeshed while this test is definitely good.","commit_id":"ec8732a4b8adabd4730feabc3625c368c0e1b84d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"24fff9ab53e13b2f44809c422a5be76a061ae024","unresolved":false,"context_lines":[{"line_number":1178,"context_line":"                   function\u003d\u00270x01\u0027/\u003e"},{"line_number":1179,"context_line":"          \u003c/source\u003e"},{"line_number":1180,"context_line":"          \u003caddress type\u003d\u0027pci\u0027 domain\u003d\u00270x0000\u0027 bus\u003d\u00270x00\u0027 slot\u003d\u00270x03\u0027 function\u003d\u00270x0\u0027/\u003e"},{"line_number":1181,"context_line":"        \u003c/interface\u003e\u0027\u0027\u0027 % nic  # noqa"},{"line_number":1182,"context_line":""},{"line_number":1183,"context_line":"        hostdevs \u003d \u0027\u0027"},{"line_number":1184,"context_line":"        for hostdev in self._def[\u0027devices\u0027][\u0027hostdevs\u0027]:"}],"source_content_type":"text/x-python","patch_set":9,"id":"2426c66c_ad40d53f","line":1181,"range":{"start_line":1181,"start_character":30,"end_line":1181,"end_character":37},"in_reply_to":"6dad556c_a6fe4e26","updated":"2020-12-17 15:55:40.000000000","message":"Oh, it\u0027s just that the line is too long and I didn\u0027t want to wrap it because it would be harder to read. Note that I did this below previously","commit_id":"ec8732a4b8adabd4730feabc3625c368c0e1b84d"}]}
