)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"845c4cbb43d3aab8368f2aff6e220239cdd4be4e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"e0667cd7_0d505967","updated":"2022-08-29 20:42:12.000000000","message":"+1 pending confrimation you ment to actully raise an excption.\notherwise it looks good","commit_id":"d539d48691b90fd2438a145f2bf721615fc5aa28"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0e6fd2eb2c1ab1d8491f4f10602beb0d9ba7894a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"f792fad4_9ae9e5a8","updated":"2022-08-31 08:39:35.000000000","message":"recheck Gateway timeout","commit_id":"a5676a11dc5cd93b0f8040efea908a792451e792"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c5f0ccf75f666374cf52e20e68558934df4fd0a2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"9fc09d6e_81447fb8","updated":"2022-11-06 00:54:30.000000000","message":"LGTM","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7815ceca619e055f00bb874da907fa113fbc42ed","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"661f3b2a_40bdf704","updated":"2022-12-09 17:02:55.000000000","message":"One comment inline but nothing you can\u0027t do in a follow-up","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"}],"doc/source/admin/pci-passthrough.rst":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"203b91fa484296a5eecec9aadd51afb3013a04c6","unresolved":true,"context_lines":[{"line_number":448,"context_line":"allows nova to select VFs from the same parent PF to fulfill the request. The"},{"line_number":449,"context_line":"value ``isolate`` restricts nova to select each VF from a different parent PF"},{"line_number":450,"context_line":"to fulfill the request. If :nova:extra-spec:`group_policy` is not provided in"},{"line_number":451,"context_line":"such flavor then it will defaulted to ``none``."},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"Symmetrically with the ``resource_class`` and ``traits`` fields of"},{"line_number":454,"context_line":":oslo.config:option:`pci.device_spec` the :oslo.config:option:`pci.alias`"}],"source_content_type":"text/x-rst","patch_set":12,"id":"09e212fb_d0973e2f","line":451,"updated":"2022-10-27 14:03:43.000000000","message":"for what its worth i think we shoudl deprecate this option and eventually remove it and only support non until we actually provide a new feature in placement to allow expressing group policy between specific groups.\n\nyou cant really use isolate properly today without hitting a bunch of edge cases","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0dddf8860f03e12d08779d9040887e9d2cbcbd06","unresolved":true,"context_lines":[{"line_number":448,"context_line":"allows nova to select VFs from the same parent PF to fulfill the request. The"},{"line_number":449,"context_line":"value ``isolate`` restricts nova to select each VF from a different parent PF"},{"line_number":450,"context_line":"to fulfill the request. If :nova:extra-spec:`group_policy` is not provided in"},{"line_number":451,"context_line":"such flavor then it will defaulted to ``none``."},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"Symmetrically with the ``resource_class`` and ``traits`` fields of"},{"line_number":454,"context_line":":oslo.config:option:`pci.device_spec` the :oslo.config:option:`pci.alias`"}],"source_content_type":"text/x-rst","patch_set":12,"id":"86a2142a_da41c850","line":451,"in_reply_to":"09e212fb_d0973e2f","updated":"2022-10-28 09:55:43.000000000","message":"I agree with the long term goal to have group pair level policy. But in some limited cases `isolate` can be used to implement PF anti affinity for VFs and therefore network device redundancy. I.e. if no other resources end up in groups then isolate work for the VF groups. So I would keep them as an option until we have a better one.","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d7b0b43e49d0c9eb04e8eea1c203e8f364d9cf7","unresolved":false,"context_lines":[{"line_number":448,"context_line":"allows nova to select VFs from the same parent PF to fulfill the request. The"},{"line_number":449,"context_line":"value ``isolate`` restricts nova to select each VF from a different parent PF"},{"line_number":450,"context_line":"to fulfill the request. If :nova:extra-spec:`group_policy` is not provided in"},{"line_number":451,"context_line":"such flavor then it will defaulted to ``none``."},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"Symmetrically with the ``resource_class`` and ``traits`` fields of"},{"line_number":454,"context_line":":oslo.config:option:`pci.device_spec` the :oslo.config:option:`pci.alias`"}],"source_content_type":"text/x-rst","patch_set":12,"id":"137e8781_37601238","line":451,"in_reply_to":"86a2142a_da41c850","updated":"2022-11-07 14:59:46.000000000","message":"Ack","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"}],"nova/conf/pci.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7815ceca619e055f00bb874da907fa113fbc42ed","unresolved":true,"context_lines":[{"line_number":70,"context_line":"  ``resource_class``"},{"line_number":71,"context_line":"    The optional Placement resource class name that is used"},{"line_number":72,"context_line":"    to track the requested PCI devices in Placement. It can be a standard"},{"line_number":73,"context_line":"    resource class from the ``os-resource-classes`` lib. Or can be any string."},{"line_number":74,"context_line":"    In that case Nova will normalize it to a proper Placement resource class by"},{"line_number":75,"context_line":"    making it upper case, replacing any consecutive character outside of"},{"line_number":76,"context_line":"    ``[A-Z0-9_]`` with a single \u0027_\u0027, and prefixing the name with ``CUSTOM_`` if"},{"line_number":77,"context_line":"    not yet prefixed. The maximum allowed length is 255 character including the"}],"source_content_type":"text/x-python","patch_set":12,"id":"ae5754a6_cc345e03","line":74,"range":{"start_line":73,"start_character":55,"end_line":74,"end_character":16},"updated":"2022-12-09 17:02:55.000000000","message":"...or it can be an arbitrary string. If it is an non-standard resource class then Nova will...","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"78d5bc16e40c65568a5ee9b7b5899e21670bdeaf","unresolved":false,"context_lines":[{"line_number":70,"context_line":"  ``resource_class``"},{"line_number":71,"context_line":"    The optional Placement resource class name that is used"},{"line_number":72,"context_line":"    to track the requested PCI devices in Placement. It can be a standard"},{"line_number":73,"context_line":"    resource class from the ``os-resource-classes`` lib. Or can be any string."},{"line_number":74,"context_line":"    In that case Nova will normalize it to a proper Placement resource class by"},{"line_number":75,"context_line":"    making it upper case, replacing any consecutive character outside of"},{"line_number":76,"context_line":"    ``[A-Z0-9_]`` with a single \u0027_\u0027, and prefixing the name with ``CUSTOM_`` if"},{"line_number":77,"context_line":"    not yet prefixed. The maximum allowed length is 255 character including the"}],"source_content_type":"text/x-python","patch_set":12,"id":"62aaac79_69038c14","line":74,"range":{"start_line":73,"start_character":55,"end_line":74,"end_character":16},"in_reply_to":"ae5754a6_cc345e03","updated":"2022-12-13 13:49:31.000000000","message":"Done in https://review.opendev.org/c/openstack/nova/+/862876","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7815ceca619e055f00bb874da907fa113fbc42ed","unresolved":true,"context_lines":[{"line_number":70,"context_line":"  ``resource_class``"},{"line_number":71,"context_line":"    The optional Placement resource class name that is used"},{"line_number":72,"context_line":"    to track the requested PCI devices in Placement. It can be a standard"},{"line_number":73,"context_line":"    resource class from the ``os-resource-classes`` lib. Or can be any string."},{"line_number":74,"context_line":"    In that case Nova will normalize it to a proper Placement resource class by"},{"line_number":75,"context_line":"    making it upper case, replacing any consecutive character outside of"},{"line_number":76,"context_line":"    ``[A-Z0-9_]`` with a single \u0027_\u0027, and prefixing the name with ``CUSTOM_`` if"},{"line_number":77,"context_line":"    not yet prefixed. The maximum allowed length is 255 character including the"},{"line_number":78,"context_line":"    prefix. If ``resource_class`` is not provided Nova will generate it from"},{"line_number":79,"context_line":"    ``vendor_id`` and ``product_id`` values of the alias in the form of"},{"line_number":80,"context_line":"    ``CUSTOM_PCI_{vendor_id}_{product_id}``. The ``resource_class`` requested"}],"source_content_type":"text/x-python","patch_set":12,"id":"30c8225d_7bf88b07","line":77,"range":{"start_line":73,"start_character":57,"end_line":77,"end_character":21},"updated":"2022-12-09 17:02:55.000000000","message":"Is there a reason we do this rather than cry foul and die? I assume so but it\u0027s not obvious to me rn\n\nLater: I guess we do this everywhere else so it\u0027s no different here.","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"78d5bc16e40c65568a5ee9b7b5899e21670bdeaf","unresolved":true,"context_lines":[{"line_number":70,"context_line":"  ``resource_class``"},{"line_number":71,"context_line":"    The optional Placement resource class name that is used"},{"line_number":72,"context_line":"    to track the requested PCI devices in Placement. It can be a standard"},{"line_number":73,"context_line":"    resource class from the ``os-resource-classes`` lib. Or can be any string."},{"line_number":74,"context_line":"    In that case Nova will normalize it to a proper Placement resource class by"},{"line_number":75,"context_line":"    making it upper case, replacing any consecutive character outside of"},{"line_number":76,"context_line":"    ``[A-Z0-9_]`` with a single \u0027_\u0027, and prefixing the name with ``CUSTOM_`` if"},{"line_number":77,"context_line":"    not yet prefixed. The maximum allowed length is 255 character including the"},{"line_number":78,"context_line":"    prefix. If ``resource_class`` is not provided Nova will generate it from"},{"line_number":79,"context_line":"    ``vendor_id`` and ``product_id`` values of the alias in the form of"},{"line_number":80,"context_line":"    ``CUSTOM_PCI_{vendor_id}_{product_id}``. The ``resource_class`` requested"}],"source_content_type":"text/x-python","patch_set":12,"id":"ad41cbd2_afabcf10","line":77,"range":{"start_line":73,"start_character":57,"end_line":77,"end_character":21},"in_reply_to":"30c8225d_7bf88b07","updated":"2022-12-13 13:49:31.000000000","message":"no special reason other than being nice to the user.","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7815ceca619e055f00bb874da907fa113fbc42ed","unresolved":true,"context_lines":[{"line_number":84,"context_line":"  ``traits``"},{"line_number":85,"context_line":"    An optional comma separated list of Placement trait names requested to be"},{"line_number":86,"context_line":"    present on the resource provider that fulfills this alias. Each trait can"},{"line_number":87,"context_line":"    be a standard trait from ``os-traits`` lib or can be any string. If it is"},{"line_number":88,"context_line":"    not a standard trait then Nova will normalize the trait name by making it"},{"line_number":89,"context_line":"    upper case, replacing any consecutive character outside of  ``[A-Z0-9_]``"},{"line_number":90,"context_line":"    with a single \u0027_\u0027, and  prefixing the name with ``CUSTOM_`` if not yet"}],"source_content_type":"text/x-python","patch_set":12,"id":"fb611b69_8ec278bd","line":87,"range":{"start_line":87,"start_character":46,"end_line":87,"end_character":68},"updated":"2022-12-09 17:02:55.000000000","message":"...or it can be an arbitrary string. If it is a non-standard trait then Nova will...","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"78d5bc16e40c65568a5ee9b7b5899e21670bdeaf","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  ``traits``"},{"line_number":85,"context_line":"    An optional comma separated list of Placement trait names requested to be"},{"line_number":86,"context_line":"    present on the resource provider that fulfills this alias. Each trait can"},{"line_number":87,"context_line":"    be a standard trait from ``os-traits`` lib or can be any string. If it is"},{"line_number":88,"context_line":"    not a standard trait then Nova will normalize the trait name by making it"},{"line_number":89,"context_line":"    upper case, replacing any consecutive character outside of  ``[A-Z0-9_]``"},{"line_number":90,"context_line":"    with a single \u0027_\u0027, and  prefixing the name with ``CUSTOM_`` if not yet"}],"source_content_type":"text/x-python","patch_set":12,"id":"f67d541f_929bd393","line":87,"range":{"start_line":87,"start_character":46,"end_line":87,"end_character":68},"in_reply_to":"fb611b69_8ec278bd","updated":"2022-12-13 13:49:31.000000000","message":"Done in the FUP","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7815ceca619e055f00bb874da907fa113fbc42ed","unresolved":true,"context_lines":[{"line_number":91,"context_line":"    prefixed. The maximum allowed length of a trait name is 255 character"},{"line_number":92,"context_line":"    including the prefix. Every trait in ``traits`` requested in the alias"},{"line_number":93,"context_line":"    ensured to be in the list of traits provided in the ``traits`` field of"},{"line_number":94,"context_line":"    the ``[pci]device_spec`` when scheduling the request."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"* Supports multiple aliases by repeating the option (not by specifying"},{"line_number":97,"context_line":"  a list value)::"}],"source_content_type":"text/x-python","patch_set":12,"id":"2d4df727_27f2971d","line":94,"updated":"2022-12-09 17:02:55.000000000","message":"Ditto","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"78d5bc16e40c65568a5ee9b7b5899e21670bdeaf","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    prefixed. The maximum allowed length of a trait name is 255 character"},{"line_number":92,"context_line":"    including the prefix. Every trait in ``traits`` requested in the alias"},{"line_number":93,"context_line":"    ensured to be in the list of traits provided in the ``traits`` field of"},{"line_number":94,"context_line":"    the ``[pci]device_spec`` when scheduling the request."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"* Supports multiple aliases by repeating the option (not by specifying"},{"line_number":97,"context_line":"  a list value)::"}],"source_content_type":"text/x-python","patch_set":12,"id":"d9379432_60c63d5f","line":94,"in_reply_to":"2d4df727_27f2971d","updated":"2022-12-13 13:49:31.000000000","message":"Ack","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"}],"nova/objects/request_spec.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"845c4cbb43d3aab8368f2aff6e220239cdd4be4e","unresolved":true,"context_lines":[{"line_number":526,"context_line":"                # would mean alternative resource_class requests. This cannot"},{"line_number":527,"context_line":"                # be expressed today in the allocation_candidate query towards"},{"line_number":528,"context_line":"                # placement."},{"line_number":529,"context_line":"                ValueError("},{"line_number":530,"context_line":"                    \"PCI tracking in placement does not support multiple \""},{"line_number":531,"context_line":"                    \"specs per PCI request\""},{"line_number":532,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":9,"id":"fed5244b_da6fe951","line":529,"updated":"2022-08-29 20:42:12.000000000","message":"i assume you meant to raise ValueError here","commit_id":"d539d48691b90fd2438a145f2bf721615fc5aa28"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"79362aee250c3072801512f5258d4fed6e5509f9","unresolved":true,"context_lines":[{"line_number":526,"context_line":"                # would mean alternative resource_class requests. This cannot"},{"line_number":527,"context_line":"                # be expressed today in the allocation_candidate query towards"},{"line_number":528,"context_line":"                # placement."},{"line_number":529,"context_line":"                ValueError("},{"line_number":530,"context_line":"                    \"PCI tracking in placement does not support multiple \""},{"line_number":531,"context_line":"                    \"specs per PCI request\""},{"line_number":532,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":9,"id":"ce27338a_34751d84","line":529,"in_reply_to":"464f870c_52bd0886","updated":"2022-08-30 14:22:27.000000000","message":"so techincally while this is a bug im not sure its a regression \n\n    @staticmethod\n    def _rc_from_request(pci_request: \u0027objects.InstancePCIRequest\u0027) -\u003e str:\n        # FIXME(gibi): refactor this and the copy of the logic from the\n        #  translator to a common function\n        # FIXME(gibi): handle directly requested resource_class\n        # ??? can there be more than one spec???\n        spec \u003d pci_request.spec[0]\n        rc \u003d f\"CUSTOM_PCI_{spec[\u0027vendor_id\u0027]}_{spec[\u0027product_id\u0027]}\".upper()\n        return rc\n        \nsince that alredy assumed it was  lenght 1 but it would be nice to fix here if that is ok.","commit_id":"d539d48691b90fd2438a145f2bf721615fc5aa28"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7101174407a2642c5cb1fa0e1258e55bd520bc16","unresolved":false,"context_lines":[{"line_number":526,"context_line":"                # would mean alternative resource_class requests. This cannot"},{"line_number":527,"context_line":"                # be expressed today in the allocation_candidate query towards"},{"line_number":528,"context_line":"                # placement."},{"line_number":529,"context_line":"                ValueError("},{"line_number":530,"context_line":"                    \"PCI tracking in placement does not support multiple \""},{"line_number":531,"context_line":"                    \"specs per PCI request\""},{"line_number":532,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":9,"id":"3bb20a62_593f514e","line":529,"in_reply_to":"ce27338a_34751d84","updated":"2022-08-30 16:34:22.000000000","message":"Done","commit_id":"d539d48691b90fd2438a145f2bf721615fc5aa28"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cdb84495d9a310e25128b5caa1a04a6e2fb289fa","unresolved":true,"context_lines":[{"line_number":526,"context_line":"                # would mean alternative resource_class requests. This cannot"},{"line_number":527,"context_line":"                # be expressed today in the allocation_candidate query towards"},{"line_number":528,"context_line":"                # placement."},{"line_number":529,"context_line":"                ValueError("},{"line_number":530,"context_line":"                    \"PCI tracking in placement does not support multiple \""},{"line_number":531,"context_line":"                    \"specs per PCI request\""},{"line_number":532,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":9,"id":"464f870c_52bd0886","line":529,"in_reply_to":"fed5244b_da6fe951","updated":"2022-08-30 11:04:18.000000000","message":"Yep this needs to be fixed.","commit_id":"d539d48691b90fd2438a145f2bf721615fc5aa28"}],"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":"845c4cbb43d3aab8368f2aff6e220239cdd4be4e","unresolved":true,"context_lines":[{"line_number":1710,"context_line":"            ),"},{"line_number":1711,"context_line":"        )"},{"line_number":1712,"context_line":""},{"line_number":1713,"context_line":"        # try to boot with each alias that does not match"},{"line_number":1714,"context_line":"        for alias in ["},{"line_number":1715,"context_line":"            \"a-gpu-wrong-rc\","},{"line_number":1716,"context_line":"            \"a-gpu-wrong-rc-2\","}],"source_content_type":"text/x-python","patch_set":9,"id":"39a3988d_fd5c25e5","line":1713,"updated":"2022-08-29 20:42:12.000000000","message":"i would be tempted to move everything above this into the setup\nand split each of the one below into there own tests.\n\nover all however this looks good","commit_id":"d539d48691b90fd2438a145f2bf721615fc5aa28"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7101174407a2642c5cb1fa0e1258e55bd520bc16","unresolved":false,"context_lines":[{"line_number":1710,"context_line":"            ),"},{"line_number":1711,"context_line":"        )"},{"line_number":1712,"context_line":""},{"line_number":1713,"context_line":"        # try to boot with each alias that does not match"},{"line_number":1714,"context_line":"        for alias in ["},{"line_number":1715,"context_line":"            \"a-gpu-wrong-rc\","},{"line_number":1716,"context_line":"            \"a-gpu-wrong-rc-2\","}],"source_content_type":"text/x-python","patch_set":9,"id":"602b9e81_247ad246","line":1713,"in_reply_to":"39a3988d_fd5c25e5","updated":"2022-08-30 16:34:22.000000000","message":"Ack","commit_id":"d539d48691b90fd2438a145f2bf721615fc5aa28"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"203b91fa484296a5eecec9aadd51afb3013a04c6","unresolved":true,"context_lines":[{"line_number":1634,"context_line":"        ).mock"},{"line_number":1635,"context_line":""},{"line_number":1636,"context_line":"    def test_boot_with_custom_rc_and_traits(self):"},{"line_number":1637,"context_line":"        # The fake libvirt will emulate on the host:"},{"line_number":1638,"context_line":"        # * one type-PCI in slot 0"},{"line_number":1639,"context_line":"        pci_info \u003d fakelibvirt.HostPCIDevicesInfo("},{"line_number":1640,"context_line":"            num_pci\u003d1, num_pfs\u003d0, num_vfs\u003d0)"},{"line_number":1641,"context_line":"        device_spec \u003d self._to_device_spec_conf("},{"line_number":1642,"context_line":"            ["},{"line_number":1643,"context_line":"                {"},{"line_number":1644,"context_line":"                    \"address\": \"0000:81:00.0\","},{"line_number":1645,"context_line":"                    \"resource_class\": \"gpu\","},{"line_number":1646,"context_line":"                    \"traits\": \",\".join("},{"line_number":1647,"context_line":"                        ["},{"line_number":1648,"context_line":"                            os_traits.HW_GPU_API_VULKAN,"},{"line_number":1649,"context_line":"                            \"purple\","},{"line_number":1650,"context_line":"                            \"round\","},{"line_number":1651,"context_line":"                        ]"},{"line_number":1652,"context_line":"                    ),"},{"line_number":1653,"context_line":"                },"},{"line_number":1654,"context_line":"            ]"},{"line_number":1655,"context_line":"        )"},{"line_number":1656,"context_line":"        self.flags(group\u003d\u0027pci\u0027, device_spec\u003ddevice_spec)"},{"line_number":1657,"context_line":"        self.start_compute(hostname\u003d\"compute1\", pci_info\u003dpci_info)"},{"line_number":1658,"context_line":""},{"line_number":1659,"context_line":"        self.assertPCIDeviceCounts(\"compute1\", total\u003d1, free\u003d1)"},{"line_number":1660,"context_line":"        compute1_expected_placement_view \u003d {"},{"line_number":1661,"context_line":"            \"inventories\": {"},{"line_number":1662,"context_line":"                \"0000:81:00.0\": {\"CUSTOM_GPU\": 1},"},{"line_number":1663,"context_line":"            },"},{"line_number":1664,"context_line":"            \"traits\": {"},{"line_number":1665,"context_line":"                \"0000:81:00.0\": ["},{"line_number":1666,"context_line":"                    \"HW_GPU_API_VULKAN\","},{"line_number":1667,"context_line":"                    \"CUSTOM_PURPLE\","},{"line_number":1668,"context_line":"                    \"CUSTOM_ROUND\","},{"line_number":1669,"context_line":"                ],"},{"line_number":1670,"context_line":"            },"},{"line_number":1671,"context_line":"            \"usages\": {"},{"line_number":1672,"context_line":"                \"0000:81:00.0\": {\"CUSTOM_GPU\": 0},"},{"line_number":1673,"context_line":"            },"},{"line_number":1674,"context_line":"            \"allocations\": {},"},{"line_number":1675,"context_line":"        }"},{"line_number":1676,"context_line":"        self.assert_placement_pci_view("},{"line_number":1677,"context_line":"            \"compute1\", **compute1_expected_placement_view)"},{"line_number":1678,"context_line":""},{"line_number":1679,"context_line":"        pci_alias_wrong_rc \u003d {"},{"line_number":1680,"context_line":"            \"vendor_id\": fakelibvirt.PCI_VEND_ID,"},{"line_number":1681,"context_line":"            \"product_id\": fakelibvirt.PCI_PROD_ID,"},{"line_number":1682,"context_line":"            \"name\": \"a-gpu-wrong-rc\","},{"line_number":1683,"context_line":"        }"},{"line_number":1684,"context_line":"        pci_alias_wrong_rc_2 \u003d {"},{"line_number":1685,"context_line":"            \"resource_class\": os_resource_classes.PGPU,"},{"line_number":1686,"context_line":"            \"name\": \"a-gpu-wrong-rc-2\","},{"line_number":1687,"context_line":"        }"},{"line_number":1688,"context_line":"        pci_alias_asking_for_missing_trait \u003d {"},{"line_number":1689,"context_line":"            \"resource_class\": \"GPU\","},{"line_number":1690,"context_line":"            # NOTE(gibi): \"big\" is missing from device spec"},{"line_number":1691,"context_line":"            \"traits\": \"purple,big\","},{"line_number":1692,"context_line":"            \"name\": \"a-gpu-missing-trait\","},{"line_number":1693,"context_line":"        }"},{"line_number":1694,"context_line":"        pci_alias_gpu \u003d {"},{"line_number":1695,"context_line":"            \"resource_class\": \"GPU\","},{"line_number":1696,"context_line":"            \"traits\": \"HW_GPU_API_VULKAN,PURPLE\","},{"line_number":1697,"context_line":"            \"name\": \"a-gpu\","},{"line_number":1698,"context_line":"        }"},{"line_number":1699,"context_line":"        self.flags("},{"line_number":1700,"context_line":"            group\u003d\"pci\","},{"line_number":1701,"context_line":"            # FIXME(gibi): make _to_device_spec_conf a general util for both"},{"line_number":1702,"context_line":"            # device spec and pci alias"},{"line_number":1703,"context_line":"            alias\u003dself._to_device_spec_conf("},{"line_number":1704,"context_line":"                ["},{"line_number":1705,"context_line":"                    pci_alias_wrong_rc,"},{"line_number":1706,"context_line":"                    pci_alias_wrong_rc_2,"},{"line_number":1707,"context_line":"                    pci_alias_asking_for_missing_trait,"},{"line_number":1708,"context_line":"                    pci_alias_gpu,"},{"line_number":1709,"context_line":"                ]"},{"line_number":1710,"context_line":"            ),"},{"line_number":1711,"context_line":"        )"},{"line_number":1712,"context_line":""},{"line_number":1713,"context_line":"        # try to boot with each alias that does not match"},{"line_number":1714,"context_line":"        for alias in ["}],"source_content_type":"text/x-python","patch_set":12,"id":"e053da1c_cb35bacf","line":1711,"range":{"start_line":1637,"start_character":5,"end_line":1711,"end_character":1},"updated":"2022-10-27 14:03:43.000000000","message":"i would prefer if this was in setup","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d7b0b43e49d0c9eb04e8eea1c203e8f364d9cf7","unresolved":false,"context_lines":[{"line_number":1634,"context_line":"        ).mock"},{"line_number":1635,"context_line":""},{"line_number":1636,"context_line":"    def test_boot_with_custom_rc_and_traits(self):"},{"line_number":1637,"context_line":"        # The fake libvirt will emulate on the host:"},{"line_number":1638,"context_line":"        # * one type-PCI in slot 0"},{"line_number":1639,"context_line":"        pci_info \u003d fakelibvirt.HostPCIDevicesInfo("},{"line_number":1640,"context_line":"            num_pci\u003d1, num_pfs\u003d0, num_vfs\u003d0)"},{"line_number":1641,"context_line":"        device_spec \u003d self._to_device_spec_conf("},{"line_number":1642,"context_line":"            ["},{"line_number":1643,"context_line":"                {"},{"line_number":1644,"context_line":"                    \"address\": \"0000:81:00.0\","},{"line_number":1645,"context_line":"                    \"resource_class\": \"gpu\","},{"line_number":1646,"context_line":"                    \"traits\": \",\".join("},{"line_number":1647,"context_line":"                        ["},{"line_number":1648,"context_line":"                            os_traits.HW_GPU_API_VULKAN,"},{"line_number":1649,"context_line":"                            \"purple\","},{"line_number":1650,"context_line":"                            \"round\","},{"line_number":1651,"context_line":"                        ]"},{"line_number":1652,"context_line":"                    ),"},{"line_number":1653,"context_line":"                },"},{"line_number":1654,"context_line":"            ]"},{"line_number":1655,"context_line":"        )"},{"line_number":1656,"context_line":"        self.flags(group\u003d\u0027pci\u0027, device_spec\u003ddevice_spec)"},{"line_number":1657,"context_line":"        self.start_compute(hostname\u003d\"compute1\", pci_info\u003dpci_info)"},{"line_number":1658,"context_line":""},{"line_number":1659,"context_line":"        self.assertPCIDeviceCounts(\"compute1\", total\u003d1, free\u003d1)"},{"line_number":1660,"context_line":"        compute1_expected_placement_view \u003d {"},{"line_number":1661,"context_line":"            \"inventories\": {"},{"line_number":1662,"context_line":"                \"0000:81:00.0\": {\"CUSTOM_GPU\": 1},"},{"line_number":1663,"context_line":"            },"},{"line_number":1664,"context_line":"            \"traits\": {"},{"line_number":1665,"context_line":"                \"0000:81:00.0\": ["},{"line_number":1666,"context_line":"                    \"HW_GPU_API_VULKAN\","},{"line_number":1667,"context_line":"                    \"CUSTOM_PURPLE\","},{"line_number":1668,"context_line":"                    \"CUSTOM_ROUND\","},{"line_number":1669,"context_line":"                ],"},{"line_number":1670,"context_line":"            },"},{"line_number":1671,"context_line":"            \"usages\": {"},{"line_number":1672,"context_line":"                \"0000:81:00.0\": {\"CUSTOM_GPU\": 0},"},{"line_number":1673,"context_line":"            },"},{"line_number":1674,"context_line":"            \"allocations\": {},"},{"line_number":1675,"context_line":"        }"},{"line_number":1676,"context_line":"        self.assert_placement_pci_view("},{"line_number":1677,"context_line":"            \"compute1\", **compute1_expected_placement_view)"},{"line_number":1678,"context_line":""},{"line_number":1679,"context_line":"        pci_alias_wrong_rc \u003d {"},{"line_number":1680,"context_line":"            \"vendor_id\": fakelibvirt.PCI_VEND_ID,"},{"line_number":1681,"context_line":"            \"product_id\": fakelibvirt.PCI_PROD_ID,"},{"line_number":1682,"context_line":"            \"name\": \"a-gpu-wrong-rc\","},{"line_number":1683,"context_line":"        }"},{"line_number":1684,"context_line":"        pci_alias_wrong_rc_2 \u003d {"},{"line_number":1685,"context_line":"            \"resource_class\": os_resource_classes.PGPU,"},{"line_number":1686,"context_line":"            \"name\": \"a-gpu-wrong-rc-2\","},{"line_number":1687,"context_line":"        }"},{"line_number":1688,"context_line":"        pci_alias_asking_for_missing_trait \u003d {"},{"line_number":1689,"context_line":"            \"resource_class\": \"GPU\","},{"line_number":1690,"context_line":"            # NOTE(gibi): \"big\" is missing from device spec"},{"line_number":1691,"context_line":"            \"traits\": \"purple,big\","},{"line_number":1692,"context_line":"            \"name\": \"a-gpu-missing-trait\","},{"line_number":1693,"context_line":"        }"},{"line_number":1694,"context_line":"        pci_alias_gpu \u003d {"},{"line_number":1695,"context_line":"            \"resource_class\": \"GPU\","},{"line_number":1696,"context_line":"            \"traits\": \"HW_GPU_API_VULKAN,PURPLE\","},{"line_number":1697,"context_line":"            \"name\": \"a-gpu\","},{"line_number":1698,"context_line":"        }"},{"line_number":1699,"context_line":"        self.flags("},{"line_number":1700,"context_line":"            group\u003d\"pci\","},{"line_number":1701,"context_line":"            # FIXME(gibi): make _to_device_spec_conf a general util for both"},{"line_number":1702,"context_line":"            # device spec and pci alias"},{"line_number":1703,"context_line":"            alias\u003dself._to_device_spec_conf("},{"line_number":1704,"context_line":"                ["},{"line_number":1705,"context_line":"                    pci_alias_wrong_rc,"},{"line_number":1706,"context_line":"                    pci_alias_wrong_rc_2,"},{"line_number":1707,"context_line":"                    pci_alias_asking_for_missing_trait,"},{"line_number":1708,"context_line":"                    pci_alias_gpu,"},{"line_number":1709,"context_line":"                ]"},{"line_number":1710,"context_line":"            ),"},{"line_number":1711,"context_line":"        )"},{"line_number":1712,"context_line":""},{"line_number":1713,"context_line":"        # try to boot with each alias that does not match"},{"line_number":1714,"context_line":"        for alias in ["}],"source_content_type":"text/x-python","patch_set":12,"id":"56919312_90dce5fb","line":1711,"range":{"start_line":1637,"start_character":5,"end_line":1711,"end_character":1},"in_reply_to":"43d86e05_bd39f297","updated":"2022-11-07 14:59:46.000000000","message":"Ack","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0dddf8860f03e12d08779d9040887e9d2cbcbd06","unresolved":true,"context_lines":[{"line_number":1634,"context_line":"        ).mock"},{"line_number":1635,"context_line":""},{"line_number":1636,"context_line":"    def test_boot_with_custom_rc_and_traits(self):"},{"line_number":1637,"context_line":"        # The fake libvirt will emulate on the host:"},{"line_number":1638,"context_line":"        # * one type-PCI in slot 0"},{"line_number":1639,"context_line":"        pci_info \u003d fakelibvirt.HostPCIDevicesInfo("},{"line_number":1640,"context_line":"            num_pci\u003d1, num_pfs\u003d0, num_vfs\u003d0)"},{"line_number":1641,"context_line":"        device_spec \u003d self._to_device_spec_conf("},{"line_number":1642,"context_line":"            ["},{"line_number":1643,"context_line":"                {"},{"line_number":1644,"context_line":"                    \"address\": \"0000:81:00.0\","},{"line_number":1645,"context_line":"                    \"resource_class\": \"gpu\","},{"line_number":1646,"context_line":"                    \"traits\": \",\".join("},{"line_number":1647,"context_line":"                        ["},{"line_number":1648,"context_line":"                            os_traits.HW_GPU_API_VULKAN,"},{"line_number":1649,"context_line":"                            \"purple\","},{"line_number":1650,"context_line":"                            \"round\","},{"line_number":1651,"context_line":"                        ]"},{"line_number":1652,"context_line":"                    ),"},{"line_number":1653,"context_line":"                },"},{"line_number":1654,"context_line":"            ]"},{"line_number":1655,"context_line":"        )"},{"line_number":1656,"context_line":"        self.flags(group\u003d\u0027pci\u0027, device_spec\u003ddevice_spec)"},{"line_number":1657,"context_line":"        self.start_compute(hostname\u003d\"compute1\", pci_info\u003dpci_info)"},{"line_number":1658,"context_line":""},{"line_number":1659,"context_line":"        self.assertPCIDeviceCounts(\"compute1\", total\u003d1, free\u003d1)"},{"line_number":1660,"context_line":"        compute1_expected_placement_view \u003d {"},{"line_number":1661,"context_line":"            \"inventories\": {"},{"line_number":1662,"context_line":"                \"0000:81:00.0\": {\"CUSTOM_GPU\": 1},"},{"line_number":1663,"context_line":"            },"},{"line_number":1664,"context_line":"            \"traits\": {"},{"line_number":1665,"context_line":"                \"0000:81:00.0\": ["},{"line_number":1666,"context_line":"                    \"HW_GPU_API_VULKAN\","},{"line_number":1667,"context_line":"                    \"CUSTOM_PURPLE\","},{"line_number":1668,"context_line":"                    \"CUSTOM_ROUND\","},{"line_number":1669,"context_line":"                ],"},{"line_number":1670,"context_line":"            },"},{"line_number":1671,"context_line":"            \"usages\": {"},{"line_number":1672,"context_line":"                \"0000:81:00.0\": {\"CUSTOM_GPU\": 0},"},{"line_number":1673,"context_line":"            },"},{"line_number":1674,"context_line":"            \"allocations\": {},"},{"line_number":1675,"context_line":"        }"},{"line_number":1676,"context_line":"        self.assert_placement_pci_view("},{"line_number":1677,"context_line":"            \"compute1\", **compute1_expected_placement_view)"},{"line_number":1678,"context_line":""},{"line_number":1679,"context_line":"        pci_alias_wrong_rc \u003d {"},{"line_number":1680,"context_line":"            \"vendor_id\": fakelibvirt.PCI_VEND_ID,"},{"line_number":1681,"context_line":"            \"product_id\": fakelibvirt.PCI_PROD_ID,"},{"line_number":1682,"context_line":"            \"name\": \"a-gpu-wrong-rc\","},{"line_number":1683,"context_line":"        }"},{"line_number":1684,"context_line":"        pci_alias_wrong_rc_2 \u003d {"},{"line_number":1685,"context_line":"            \"resource_class\": os_resource_classes.PGPU,"},{"line_number":1686,"context_line":"            \"name\": \"a-gpu-wrong-rc-2\","},{"line_number":1687,"context_line":"        }"},{"line_number":1688,"context_line":"        pci_alias_asking_for_missing_trait \u003d {"},{"line_number":1689,"context_line":"            \"resource_class\": \"GPU\","},{"line_number":1690,"context_line":"            # NOTE(gibi): \"big\" is missing from device spec"},{"line_number":1691,"context_line":"            \"traits\": \"purple,big\","},{"line_number":1692,"context_line":"            \"name\": \"a-gpu-missing-trait\","},{"line_number":1693,"context_line":"        }"},{"line_number":1694,"context_line":"        pci_alias_gpu \u003d {"},{"line_number":1695,"context_line":"            \"resource_class\": \"GPU\","},{"line_number":1696,"context_line":"            \"traits\": \"HW_GPU_API_VULKAN,PURPLE\","},{"line_number":1697,"context_line":"            \"name\": \"a-gpu\","},{"line_number":1698,"context_line":"        }"},{"line_number":1699,"context_line":"        self.flags("},{"line_number":1700,"context_line":"            group\u003d\"pci\","},{"line_number":1701,"context_line":"            # FIXME(gibi): make _to_device_spec_conf a general util for both"},{"line_number":1702,"context_line":"            # device spec and pci alias"},{"line_number":1703,"context_line":"            alias\u003dself._to_device_spec_conf("},{"line_number":1704,"context_line":"                ["},{"line_number":1705,"context_line":"                    pci_alias_wrong_rc,"},{"line_number":1706,"context_line":"                    pci_alias_wrong_rc_2,"},{"line_number":1707,"context_line":"                    pci_alias_asking_for_missing_trait,"},{"line_number":1708,"context_line":"                    pci_alias_gpu,"},{"line_number":1709,"context_line":"                ]"},{"line_number":1710,"context_line":"            ),"},{"line_number":1711,"context_line":"        )"},{"line_number":1712,"context_line":""},{"line_number":1713,"context_line":"        # try to boot with each alias that does not match"},{"line_number":1714,"context_line":"        for alias in ["}],"source_content_type":"text/x-python","patch_set":12,"id":"43d86e05_bd39f297","line":1711,"range":{"start_line":1637,"start_character":5,"end_line":1711,"end_character":1},"in_reply_to":"e053da1c_cb35bacf","updated":"2022-10-28 09:55:43.000000000","message":"Done in a FUP https://review.opendev.org/c/openstack/nova/+/862876","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"203b91fa484296a5eecec9aadd51afb3013a04c6","unresolved":true,"context_lines":[{"line_number":1710,"context_line":"            ),"},{"line_number":1711,"context_line":"        )"},{"line_number":1712,"context_line":""},{"line_number":1713,"context_line":"        # try to boot with each alias that does not match"},{"line_number":1714,"context_line":"        for alias in ["},{"line_number":1715,"context_line":"            \"a-gpu-wrong-rc\","},{"line_number":1716,"context_line":"            \"a-gpu-wrong-rc-2\","},{"line_number":1717,"context_line":"            \"a-gpu-missing-trait\","},{"line_number":1718,"context_line":"        ]:"},{"line_number":1719,"context_line":"            extra_spec \u003d {\"pci_passthrough:alias\": f\"{alias}:1\"}"},{"line_number":1720,"context_line":"            flavor_id \u003d self._create_flavor(extra_spec\u003dextra_spec)"},{"line_number":1721,"context_line":"            server \u003d self._create_server("},{"line_number":1722,"context_line":"                flavor_id\u003dflavor_id, networks\u003d[], expected_state\u003d\u0027ERROR\u0027)"},{"line_number":1723,"context_line":"            self.assertIn(\u0027fault\u0027, server)"},{"line_number":1724,"context_line":"            self.assertIn(\u0027No valid host\u0027, server[\u0027fault\u0027][\u0027message\u0027])"},{"line_number":1725,"context_line":""},{"line_number":1726,"context_line":"            self.assertPCIDeviceCounts(\"compute1\", total\u003d1, free\u003d1)"},{"line_number":1727,"context_line":"            self.assert_placement_pci_view("},{"line_number":1728,"context_line":"                \"compute1\", **compute1_expected_placement_view)"},{"line_number":1729,"context_line":""},{"line_number":1730,"context_line":"        # then boot with the matching alias"},{"line_number":1731,"context_line":"        extra_spec \u003d {\"pci_passthrough:alias\": \"a-gpu:1\"}"},{"line_number":1732,"context_line":"        flavor_id \u003d self._create_flavor(extra_spec\u003dextra_spec)"},{"line_number":1733,"context_line":"        server \u003d self._create_server("},{"line_number":1734,"context_line":"            flavor_id\u003dflavor_id, networks\u003d[])"},{"line_number":1735,"context_line":""},{"line_number":1736,"context_line":"        self.assertPCIDeviceCounts(\"compute1\", total\u003d1, free\u003d0)"},{"line_number":1737,"context_line":"        compute1_expected_placement_view["},{"line_number":1738,"context_line":"            \"usages\"][\"0000:81:00.0\"][\"CUSTOM_GPU\"] \u003d 1"},{"line_number":1739,"context_line":"        compute1_expected_placement_view[\"allocations\"][server[\"id\"]] \u003d {"},{"line_number":1740,"context_line":"            \"0000:81:00.0\": {\"CUSTOM_GPU\": 1}"},{"line_number":1741,"context_line":"        }"},{"line_number":1742,"context_line":"        self.assert_placement_pci_view("},{"line_number":1743,"context_line":"            \"compute1\", **compute1_expected_placement_view)"},{"line_number":1744,"context_line":"        self.assert_no_pci_healing(\"compute1\")"}],"source_content_type":"text/x-python","patch_set":12,"id":"887075c3_edbc1130","line":1744,"range":{"start_line":1713,"start_character":8,"end_line":1744,"end_character":46},"updated":"2022-10-27 14:03:43.000000000","message":"and this was 4 differnt test perhaps with ddt.\n\nthe test make sesne and i like the coverage but  debuging this will be hard in its current form","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0dddf8860f03e12d08779d9040887e9d2cbcbd06","unresolved":true,"context_lines":[{"line_number":1710,"context_line":"            ),"},{"line_number":1711,"context_line":"        )"},{"line_number":1712,"context_line":""},{"line_number":1713,"context_line":"        # try to boot with each alias that does not match"},{"line_number":1714,"context_line":"        for alias in ["},{"line_number":1715,"context_line":"            \"a-gpu-wrong-rc\","},{"line_number":1716,"context_line":"            \"a-gpu-wrong-rc-2\","},{"line_number":1717,"context_line":"            \"a-gpu-missing-trait\","},{"line_number":1718,"context_line":"        ]:"},{"line_number":1719,"context_line":"            extra_spec \u003d {\"pci_passthrough:alias\": f\"{alias}:1\"}"},{"line_number":1720,"context_line":"            flavor_id \u003d self._create_flavor(extra_spec\u003dextra_spec)"},{"line_number":1721,"context_line":"            server \u003d self._create_server("},{"line_number":1722,"context_line":"                flavor_id\u003dflavor_id, networks\u003d[], expected_state\u003d\u0027ERROR\u0027)"},{"line_number":1723,"context_line":"            self.assertIn(\u0027fault\u0027, server)"},{"line_number":1724,"context_line":"            self.assertIn(\u0027No valid host\u0027, server[\u0027fault\u0027][\u0027message\u0027])"},{"line_number":1725,"context_line":""},{"line_number":1726,"context_line":"            self.assertPCIDeviceCounts(\"compute1\", total\u003d1, free\u003d1)"},{"line_number":1727,"context_line":"            self.assert_placement_pci_view("},{"line_number":1728,"context_line":"                \"compute1\", **compute1_expected_placement_view)"},{"line_number":1729,"context_line":""},{"line_number":1730,"context_line":"        # then boot with the matching alias"},{"line_number":1731,"context_line":"        extra_spec \u003d {\"pci_passthrough:alias\": \"a-gpu:1\"}"},{"line_number":1732,"context_line":"        flavor_id \u003d self._create_flavor(extra_spec\u003dextra_spec)"},{"line_number":1733,"context_line":"        server \u003d self._create_server("},{"line_number":1734,"context_line":"            flavor_id\u003dflavor_id, networks\u003d[])"},{"line_number":1735,"context_line":""},{"line_number":1736,"context_line":"        self.assertPCIDeviceCounts(\"compute1\", total\u003d1, free\u003d0)"},{"line_number":1737,"context_line":"        compute1_expected_placement_view["},{"line_number":1738,"context_line":"            \"usages\"][\"0000:81:00.0\"][\"CUSTOM_GPU\"] \u003d 1"},{"line_number":1739,"context_line":"        compute1_expected_placement_view[\"allocations\"][server[\"id\"]] \u003d {"},{"line_number":1740,"context_line":"            \"0000:81:00.0\": {\"CUSTOM_GPU\": 1}"},{"line_number":1741,"context_line":"        }"},{"line_number":1742,"context_line":"        self.assert_placement_pci_view("},{"line_number":1743,"context_line":"            \"compute1\", **compute1_expected_placement_view)"},{"line_number":1744,"context_line":"        self.assert_no_pci_healing(\"compute1\")"}],"source_content_type":"text/x-python","patch_set":12,"id":"bde8176b_9aaf746c","line":1744,"range":{"start_line":1713,"start_character":8,"end_line":1744,"end_character":46},"in_reply_to":"887075c3_edbc1130","updated":"2022-10-28 09:55:43.000000000","message":"Done in a FUP https://review.opendev.org/c/openstack/nova/+/862876","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d7b0b43e49d0c9eb04e8eea1c203e8f364d9cf7","unresolved":false,"context_lines":[{"line_number":1710,"context_line":"            ),"},{"line_number":1711,"context_line":"        )"},{"line_number":1712,"context_line":""},{"line_number":1713,"context_line":"        # try to boot with each alias that does not match"},{"line_number":1714,"context_line":"        for alias in ["},{"line_number":1715,"context_line":"            \"a-gpu-wrong-rc\","},{"line_number":1716,"context_line":"            \"a-gpu-wrong-rc-2\","},{"line_number":1717,"context_line":"            \"a-gpu-missing-trait\","},{"line_number":1718,"context_line":"        ]:"},{"line_number":1719,"context_line":"            extra_spec \u003d {\"pci_passthrough:alias\": f\"{alias}:1\"}"},{"line_number":1720,"context_line":"            flavor_id \u003d self._create_flavor(extra_spec\u003dextra_spec)"},{"line_number":1721,"context_line":"            server \u003d self._create_server("},{"line_number":1722,"context_line":"                flavor_id\u003dflavor_id, networks\u003d[], expected_state\u003d\u0027ERROR\u0027)"},{"line_number":1723,"context_line":"            self.assertIn(\u0027fault\u0027, server)"},{"line_number":1724,"context_line":"            self.assertIn(\u0027No valid host\u0027, server[\u0027fault\u0027][\u0027message\u0027])"},{"line_number":1725,"context_line":""},{"line_number":1726,"context_line":"            self.assertPCIDeviceCounts(\"compute1\", total\u003d1, free\u003d1)"},{"line_number":1727,"context_line":"            self.assert_placement_pci_view("},{"line_number":1728,"context_line":"                \"compute1\", **compute1_expected_placement_view)"},{"line_number":1729,"context_line":""},{"line_number":1730,"context_line":"        # then boot with the matching alias"},{"line_number":1731,"context_line":"        extra_spec \u003d {\"pci_passthrough:alias\": \"a-gpu:1\"}"},{"line_number":1732,"context_line":"        flavor_id \u003d self._create_flavor(extra_spec\u003dextra_spec)"},{"line_number":1733,"context_line":"        server \u003d self._create_server("},{"line_number":1734,"context_line":"            flavor_id\u003dflavor_id, networks\u003d[])"},{"line_number":1735,"context_line":""},{"line_number":1736,"context_line":"        self.assertPCIDeviceCounts(\"compute1\", total\u003d1, free\u003d0)"},{"line_number":1737,"context_line":"        compute1_expected_placement_view["},{"line_number":1738,"context_line":"            \"usages\"][\"0000:81:00.0\"][\"CUSTOM_GPU\"] \u003d 1"},{"line_number":1739,"context_line":"        compute1_expected_placement_view[\"allocations\"][server[\"id\"]] \u003d {"},{"line_number":1740,"context_line":"            \"0000:81:00.0\": {\"CUSTOM_GPU\": 1}"},{"line_number":1741,"context_line":"        }"},{"line_number":1742,"context_line":"        self.assert_placement_pci_view("},{"line_number":1743,"context_line":"            \"compute1\", **compute1_expected_placement_view)"},{"line_number":1744,"context_line":"        self.assert_no_pci_healing(\"compute1\")"}],"source_content_type":"text/x-python","patch_set":12,"id":"eace8651_9b8d5a82","line":1744,"range":{"start_line":1713,"start_character":8,"end_line":1744,"end_character":46},"in_reply_to":"bde8176b_9aaf746c","updated":"2022-11-07 14:59:46.000000000","message":"Ack","commit_id":"b10482cbc00518853485d83a9ace35c8d5172749"}],"nova/tests/unit/pci/test_request.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"845c4cbb43d3aab8368f2aff6e220239cdd4be4e","unresolved":true,"context_lines":[{"line_number":198,"context_line":"        self.assertIsNotNone(aliases)"},{"line_number":199,"context_line":"        self.assertIn(\"xxx\", aliases)"},{"line_number":200,"context_line":"        self.assertEqual("},{"line_number":201,"context_line":"            (\"legacy\", [{\"resource_class\": \"foo\", \"traits\": \"bar,baz\"}]),"},{"line_number":202,"context_line":"            aliases[\"xxx\"],"},{"line_number":203,"context_line":"        )"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5d2f8fe1_badf035f","line":201,"updated":"2022-08-29 20:42:12.000000000","message":"legacy is the pci numa_policy correct.","commit_id":"d539d48691b90fd2438a145f2bf721615fc5aa28"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7101174407a2642c5cb1fa0e1258e55bd520bc16","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        self.assertIsNotNone(aliases)"},{"line_number":199,"context_line":"        self.assertIn(\"xxx\", aliases)"},{"line_number":200,"context_line":"        self.assertEqual("},{"line_number":201,"context_line":"            (\"legacy\", [{\"resource_class\": \"foo\", \"traits\": \"bar,baz\"}]),"},{"line_number":202,"context_line":"            aliases[\"xxx\"],"},{"line_number":203,"context_line":"        )"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ae026f2b_404f51f1","line":201,"in_reply_to":"5d2f8fe1_badf035f","updated":"2022-08-30 16:34:22.000000000","message":"Ack","commit_id":"d539d48691b90fd2438a145f2bf721615fc5aa28"}]}
