)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b8bf9ee03a6cfd1a05063dd1416fc3816a2e368c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"8777c47c_71019bf7","updated":"2022-12-15 20:33:48.000000000","message":"this is quite good coverage of the pool spliting and placement behavior.\n\nwhile im sure we coudl have more coverage this add alot of confindace for some of the tricker edgecases.","commit_id":"11fa1f70287c0e428e370c6a6145fb50a5d90040"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"54506a431cf16c9b46f97a9a4f24439d0b0bc6c9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"ae36b4d5_056c1e0a","updated":"2022-12-21 15:44:19.000000000","message":"I lost the +A during the rebased that remove a patch from the series that needs further discussion. So I\u0027m put the +A back.","commit_id":"1462883dcc68be1371197264d704a44fcc289dfd"}],"nova/tests/functional/integrated_helpers.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b8bf9ee03a6cfd1a05063dd1416fc3816a2e368c","unresolved":false,"context_lines":[{"line_number":872,"context_line":"    def _reserve_placement_resource(self, rp_name, rc_name, reserved):"},{"line_number":873,"context_line":"        rp_uuid \u003d self._get_provider_uuid_by_name(rp_name)"},{"line_number":874,"context_line":"        inv \u003d self.placement.get("},{"line_number":875,"context_line":"            \u0027/resource_providers/%s/inventories/%s\u0027 % (rp_uuid, rc_name),"},{"line_number":876,"context_line":"            version\u003d\u00271.26\u0027"},{"line_number":877,"context_line":"        ).body"},{"line_number":878,"context_line":"        inv[\"reserved\"] \u003d reserved"}],"source_content_type":"text/x-python","patch_set":15,"id":"1ae075b4_1d6dce4f","line":875,"updated":"2022-12-15 20:33:48.000000000","message":"nit: my personal prefernce has been shifting to f string more and more over time but this is still ok","commit_id":"11fa1f70287c0e428e370c6a6145fb50a5d90040"}],"nova/tests/functional/libvirt/test_pci_in_placement.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b8bf9ee03a6cfd1a05063dd1416fc3816a2e368c","unresolved":false,"context_lines":[{"line_number":1755,"context_line":"        request that would match from placement perspective to one of the"},{"line_number":1756,"context_line":"        device only and would match to the other device from nova DB"},{"line_number":1757,"context_line":"        perspective. Then we will expect that the boot request fails with no"},{"line_number":1758,"context_line":"        valid host."},{"line_number":1759,"context_line":"        \"\"\""},{"line_number":1760,"context_line":"        # The fake libvirt will emulate on the host:"},{"line_number":1761,"context_line":"        # * one type-PCI in slot 0"}],"source_content_type":"text/x-python","patch_set":15,"id":"03a33e9b_f1b0c759","line":1758,"updated":"2022-12-15 20:33:48.000000000","message":"ok this is a rather complext setup so thanks for descibing up front.","commit_id":"11fa1f70287c0e428e370c6a6145fb50a5d90040"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"05812ef28588dc7710bf794f133912fa60532c7b","unresolved":false,"context_lines":[{"line_number":1755,"context_line":"        request that would match from placement perspective to one of the"},{"line_number":1756,"context_line":"        device only and would match to the other device from nova DB"},{"line_number":1757,"context_line":"        perspective. Then we will expect that the boot request fails with no"},{"line_number":1758,"context_line":"        valid host."},{"line_number":1759,"context_line":"        \"\"\""},{"line_number":1760,"context_line":"        # The fake libvirt will emulate on the host:"},{"line_number":1761,"context_line":"        # * one type-PCI in slot 0"}],"source_content_type":"text/x-python","patch_set":15,"id":"d1eb4f7a_c9fbd331","line":1758,"in_reply_to":"03a33e9b_f1b0c759","updated":"2022-12-20 17:12:22.000000000","message":"What Sean said","commit_id":"11fa1f70287c0e428e370c6a6145fb50a5d90040"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b8bf9ee03a6cfd1a05063dd1416fc3816a2e368c","unresolved":true,"context_lines":[{"line_number":1766,"context_line":"        # so we can selectively schedule to one of the devices in placement"},{"line_number":1767,"context_line":"        device_spec \u003d self._to_device_spec_conf("},{"line_number":1768,"context_line":"            ["},{"line_number":1769,"context_line":"                {"},{"line_number":1770,"context_line":"                    \"address\": \"0000:81:00.0\","},{"line_number":1771,"context_line":"                    \"resource_class\": \"MY_DEV\","},{"line_number":1772,"context_line":"                    \"traits\": \"A_PCI\","},{"line_number":1773,"context_line":"                },"},{"line_number":1774,"context_line":"                {"},{"line_number":1775,"context_line":"                    \"address\": \"0000:81:01.0\","},{"line_number":1776,"context_line":"                    \"resource_class\": \"MY_DEV\","},{"line_number":1777,"context_line":"                    \"traits\": \"A_PF\","},{"line_number":1778,"context_line":"                },"},{"line_number":1779,"context_line":"            ]"},{"line_number":1780,"context_line":"        )"},{"line_number":1781,"context_line":"        self.flags(group\u003d\u0027pci\u0027, device_spec\u003ddevice_spec)"}],"source_content_type":"text/x-python","patch_set":15,"id":"c2a9ca96_1e9d2ffc","line":1778,"range":{"start_line":1769,"start_character":1,"end_line":1778,"end_character":17},"updated":"2022-12-15 20:33:48.000000000","message":"while this might appear counter intuitive, when using a pci alias to request a device it might actully make sense for one resouce class to actully map to diffent veddor deviec if each provide the same over capablity. and you might want to use traits to then diffeneciate between them so this is certenly something that should be supproted.","commit_id":"11fa1f70287c0e428e370c6a6145fb50a5d90040"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"91f169e103202e3af18252ac945c6aba0e55db43","unresolved":false,"context_lines":[{"line_number":1766,"context_line":"        # so we can selectively schedule to one of the devices in placement"},{"line_number":1767,"context_line":"        device_spec \u003d self._to_device_spec_conf("},{"line_number":1768,"context_line":"            ["},{"line_number":1769,"context_line":"                {"},{"line_number":1770,"context_line":"                    \"address\": \"0000:81:00.0\","},{"line_number":1771,"context_line":"                    \"resource_class\": \"MY_DEV\","},{"line_number":1772,"context_line":"                    \"traits\": \"A_PCI\","},{"line_number":1773,"context_line":"                },"},{"line_number":1774,"context_line":"                {"},{"line_number":1775,"context_line":"                    \"address\": \"0000:81:01.0\","},{"line_number":1776,"context_line":"                    \"resource_class\": \"MY_DEV\","},{"line_number":1777,"context_line":"                    \"traits\": \"A_PF\","},{"line_number":1778,"context_line":"                },"},{"line_number":1779,"context_line":"            ]"},{"line_number":1780,"context_line":"        )"},{"line_number":1781,"context_line":"        self.flags(group\u003d\u0027pci\u0027, device_spec\u003ddevice_spec)"}],"source_content_type":"text/x-python","patch_set":15,"id":"b7cd4715_52c26245","line":1778,"range":{"start_line":1769,"start_character":1,"end_line":1778,"end_character":17},"in_reply_to":"c2a9ca96_1e9d2ffc","updated":"2022-12-16 14:19:03.000000000","message":"I approach it from a different angle. Our model and config interface allows this so people will eventually configure a node like this. So we need to make sure this works.","commit_id":"11fa1f70287c0e428e370c6a6145fb50a5d90040"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b8bf9ee03a6cfd1a05063dd1416fc3816a2e368c","unresolved":false,"context_lines":[{"line_number":1814,"context_line":"            # by trait this matches 81.01 only"},{"line_number":1815,"context_line":"            \"traits\": \"A_PF\","},{"line_number":1816,"context_line":"            \"name\": \"a-pci\","},{"line_number":1817,"context_line":"        }"},{"line_number":1818,"context_line":"        self.flags("},{"line_number":1819,"context_line":"            group\u003d\"pci\","},{"line_number":1820,"context_line":"            alias\u003dself._to_device_spec_conf([pci_alias_no_match]),"}],"source_content_type":"text/x-python","patch_set":15,"id":"e670fbd0_0e8fe4f9","line":1817,"updated":"2022-12-15 20:33:48.000000000","message":"ack so the A_PF trait has been in correctly requeste in combination wtih the product_id for a type-PCI dev\n\n        pci_info \u003d fakelibvirt.HostPCIDevicesInfo(\n            num_pci\u003d1, num_pfs\u003d1, num_vfs\u003d0)\n            \ncreates one device of type-PCI and product id (fakelibvirt.PCI_PROD_ID) \n\nyou are using that impelmeation detail of the fixture here and relying on the fact taht its address will be 0000:81:00.0 for the trait mapping via the device_spec but i think that is fine in the functional tests.","commit_id":"11fa1f70287c0e428e370c6a6145fb50a5d90040"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"91f169e103202e3af18252ac945c6aba0e55db43","unresolved":false,"context_lines":[{"line_number":1814,"context_line":"            # by trait this matches 81.01 only"},{"line_number":1815,"context_line":"            \"traits\": \"A_PF\","},{"line_number":1816,"context_line":"            \"name\": \"a-pci\","},{"line_number":1817,"context_line":"        }"},{"line_number":1818,"context_line":"        self.flags("},{"line_number":1819,"context_line":"            group\u003d\"pci\","},{"line_number":1820,"context_line":"            alias\u003dself._to_device_spec_conf([pci_alias_no_match]),"}],"source_content_type":"text/x-python","patch_set":15,"id":"d8375cc2_5c26dec4","line":1817,"in_reply_to":"e670fbd0_0e8fe4f9","updated":"2022-12-16 14:19:03.000000000","message":"Yes I rely on the PCI address scheme of the fixture. But if that changes then the assert at L1804 will catch it as I check the initial state including the addresses.","commit_id":"11fa1f70287c0e428e370c6a6145fb50a5d90040"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b8bf9ee03a6cfd1a05063dd1416fc3816a2e368c","unresolved":false,"context_lines":[{"line_number":1846,"context_line":"                },"},{"line_number":1847,"context_line":"            ]"},{"line_number":1848,"context_line":"        )"},{"line_number":1849,"context_line":"        self.flags(group\u003d\u0027pci\u0027, device_spec\u003ddevice_spec)"},{"line_number":1850,"context_line":"        self.start_compute(hostname\u003d\"compute1\", pci_info\u003dpci_info)"},{"line_number":1851,"context_line":""},{"line_number":1852,"context_line":"        compute1_expected_placement_view \u003d {"}],"source_content_type":"text/x-python","patch_set":15,"id":"fac0a4f7_4d903df4","line":1849,"updated":"2022-12-15 20:33:48.000000000","message":"yep so we filter the aviabel device by a singel entry in the device_spec by product id and map that to a single resouce class and trait.","commit_id":"11fa1f70287c0e428e370c6a6145fb50a5d90040"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b8bf9ee03a6cfd1a05063dd1416fc3816a2e368c","unresolved":false,"context_lines":[{"line_number":1870,"context_line":"        }"},{"line_number":1871,"context_line":"        self.assert_placement_pci_view("},{"line_number":1872,"context_line":"            \"compute1\", **compute1_expected_placement_view)"},{"line_number":1873,"context_line":"        self.assertPCIDeviceCounts(\u0027compute1\u0027, total\u003d4, free\u003d4)"},{"line_number":1874,"context_line":""},{"line_number":1875,"context_line":"        pci_alias_vf \u003d {"},{"line_number":1876,"context_line":"            \"resource_class\": \"MY_VF\","}],"source_content_type":"text/x-python","patch_set":15,"id":"683c5f93_2615059a","line":1873,"updated":"2022-12-15 20:33:48.000000000","message":"then we assert that the in placement we have multiple resouce proviers each with inveotory of the configure resouce class and the correct traits and usage.","commit_id":"11fa1f70287c0e428e370c6a6145fb50a5d90040"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b8bf9ee03a6cfd1a05063dd1416fc3816a2e368c","unresolved":false,"context_lines":[{"line_number":1882,"context_line":"            # FIXME(gibi): make _to_device_spec_conf a general util for both"},{"line_number":1883,"context_line":"            # device spec and pci alias"},{"line_number":1884,"context_line":"            alias\u003dself._to_device_spec_conf([pci_alias_vf]),"},{"line_number":1885,"context_line":"        )"},{"line_number":1886,"context_line":""},{"line_number":1887,"context_line":"        # reserve VFs from 81.01 in placement to drive the first instance to"},{"line_number":1888,"context_line":"        # 81.00"}],"source_content_type":"text/x-python","patch_set":15,"id":"8a0fd9c3_0a23c19f","line":1885,"updated":"2022-12-15 20:33:48.000000000","message":"then create an alias to consume the vf","commit_id":"11fa1f70287c0e428e370c6a6145fb50a5d90040"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b8bf9ee03a6cfd1a05063dd1416fc3816a2e368c","unresolved":true,"context_lines":[{"line_number":1893,"context_line":"        # reserved"},{"line_number":1894,"context_line":"        extra_spec \u003d {\"pci_passthrough:alias\": \"a-vf:1\"}"},{"line_number":1895,"context_line":"        flavor_id \u003d self._create_flavor(extra_spec\u003dextra_spec)"},{"line_number":1896,"context_line":"        server_1vf \u003d self._create_server(flavor_id\u003dflavor_id, networks\u003d[])"},{"line_number":1897,"context_line":""},{"line_number":1898,"context_line":"        self.assertPCIDeviceCounts(\u0027compute1\u0027, total\u003d4, free\u003d3)"},{"line_number":1899,"context_line":"        compute1_expected_placement_view[\"usages\"] \u003d {"}],"source_content_type":"text/x-python","patch_set":15,"id":"9c4a87fa_9fbb3333","line":1896,"updated":"2022-12-15 20:33:48.000000000","message":"force the server to consume form the firce device host by setting reserving the secon","commit_id":"11fa1f70287c0e428e370c6a6145fb50a5d90040"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"91f169e103202e3af18252ac945c6aba0e55db43","unresolved":false,"context_lines":[{"line_number":1893,"context_line":"        # reserved"},{"line_number":1894,"context_line":"        extra_spec \u003d {\"pci_passthrough:alias\": \"a-vf:1\"}"},{"line_number":1895,"context_line":"        flavor_id \u003d self._create_flavor(extra_spec\u003dextra_spec)"},{"line_number":1896,"context_line":"        server_1vf \u003d self._create_server(flavor_id\u003dflavor_id, networks\u003d[])"},{"line_number":1897,"context_line":""},{"line_number":1898,"context_line":"        self.assertPCIDeviceCounts(\u0027compute1\u0027, total\u003d4, free\u003d3)"},{"line_number":1899,"context_line":"        compute1_expected_placement_view[\"usages\"] \u003d {"}],"source_content_type":"text/x-python","patch_set":15,"id":"d7a68f3a_98edc125","line":1896,"in_reply_to":"9c4a87fa_9fbb3333","updated":"2022-12-16 14:19:03.000000000","message":"yepp I needed to drive the allocation here so I temporary reserved the other devices.","commit_id":"11fa1f70287c0e428e370c6a6145fb50a5d90040"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b8bf9ee03a6cfd1a05063dd1416fc3816a2e368c","unresolved":true,"context_lines":[{"line_number":1912,"context_line":"        # viable placement candidate is: one VF from 81.00 and one VF from"},{"line_number":1913,"context_line":"        # 81.01"},{"line_number":1914,"context_line":"        self._reserve_placement_resource("},{"line_number":1915,"context_line":"            \"compute1_0000:81:01.0\", \"CUSTOM_MY_VF\", 1)"},{"line_number":1916,"context_line":""},{"line_number":1917,"context_line":"        extra_spec \u003d {\"pci_passthrough:alias\": \"a-vf:2\"}"},{"line_number":1918,"context_line":"        flavor_id \u003d self._create_flavor(extra_spec\u003dextra_spec)"}],"source_content_type":"text/x-python","patch_set":15,"id":"dc4186ab_54b8b997","line":1915,"updated":"2022-12-15 20:33:48.000000000","message":"the we reduce the reservation to 1 so the only way for the final vm to boot is if the VF are split between both inventories.","commit_id":"11fa1f70287c0e428e370c6a6145fb50a5d90040"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"91f169e103202e3af18252ac945c6aba0e55db43","unresolved":false,"context_lines":[{"line_number":1912,"context_line":"        # viable placement candidate is: one VF from 81.00 and one VF from"},{"line_number":1913,"context_line":"        # 81.01"},{"line_number":1914,"context_line":"        self._reserve_placement_resource("},{"line_number":1915,"context_line":"            \"compute1_0000:81:01.0\", \"CUSTOM_MY_VF\", 1)"},{"line_number":1916,"context_line":""},{"line_number":1917,"context_line":"        extra_spec \u003d {\"pci_passthrough:alias\": \"a-vf:2\"}"},{"line_number":1918,"context_line":"        flavor_id \u003d self._create_flavor(extra_spec\u003dextra_spec)"}],"source_content_type":"text/x-python","patch_set":15,"id":"13f4e12a_1985cca6","line":1915,"in_reply_to":"dc4186ab_54b8b997","updated":"2022-12-16 14:19:03.000000000","message":"exactly!","commit_id":"11fa1f70287c0e428e370c6a6145fb50a5d90040"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b8bf9ee03a6cfd1a05063dd1416fc3816a2e368c","unresolved":true,"context_lines":[{"line_number":1930,"context_line":"        }"},{"line_number":1931,"context_line":"        self.assert_placement_pci_view("},{"line_number":1932,"context_line":"            \"compute1\", **compute1_expected_placement_view)"},{"line_number":1933,"context_line":"        self.assert_no_pci_healing(\"compute1\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"8d0f09b3_269a854e","line":1933,"updated":"2022-12-15 20:33:48.000000000","message":"which we then confrim\n\nthis is complex but a good test of the functionality","commit_id":"11fa1f70287c0e428e370c6a6145fb50a5d90040"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"91f169e103202e3af18252ac945c6aba0e55db43","unresolved":false,"context_lines":[{"line_number":1930,"context_line":"        }"},{"line_number":1931,"context_line":"        self.assert_placement_pci_view("},{"line_number":1932,"context_line":"            \"compute1\", **compute1_expected_placement_view)"},{"line_number":1933,"context_line":"        self.assert_no_pci_healing(\"compute1\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"b05ea49e_a52c55df","line":1933,"in_reply_to":"8d0f09b3_269a854e","updated":"2022-12-16 14:19:03.000000000","message":"Ack","commit_id":"11fa1f70287c0e428e370c6a6145fb50a5d90040"}]}
