)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f571b556540ed6d008e426b715dab2cf803417f","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"libvirt: Support Cyborg PCI ARQ managed mode"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Request Cyborg API microversion 2.4 for ARQ GET requests when the Cyborg"},{"line_number":10,"context_line":"server supports it. Version 2.4 includes the optional managed key in PCI"},{"line_number":11,"context_line":"ARQ attach handle information. Discover the supported microversion through"},{"line_number":12,"context_line":"the configured keystoneauth adapter so service authentication, TLS, and"},{"line_number":13,"context_line":"retry settings are honored."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Use that managed key when generating libvirt PCI hostdev XML for Cyborg"},{"line_number":16,"context_line":"ARQs. When managed is false, Nova creates hostdev XML with managed\u003dno so"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3cea8392_968b6ca5","line":13,"range":{"start_line":9,"start_character":72,"end_line":13,"end_character":27},"updated":"2026-08-22 13:13:20.000000000","message":"nit: can you wrap at \u003c\u003d 72 chars?","commit_id":"80521b296d997b200acaa1c3e23ba77353fde37c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8860c3dbdd014b45e546592e2c970824f2ab7f54","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"libvirt: Support Cyborg PCI ARQ managed mode"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Request Cyborg API microversion 2.4 for ARQ GET requests when the Cyborg"},{"line_number":10,"context_line":"server supports it. Version 2.4 includes the optional managed key in PCI"},{"line_number":11,"context_line":"ARQ attach handle information. Discover the supported microversion through"},{"line_number":12,"context_line":"the configured keystoneauth adapter so service authentication, TLS, and"},{"line_number":13,"context_line":"retry settings are honored."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Use that managed key when generating libvirt PCI hostdev XML for Cyborg"},{"line_number":16,"context_line":"ARQs. When managed is false, Nova creates hostdev XML with managed\u003dno so"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"28762aa4_de32d2da","line":13,"range":{"start_line":9,"start_character":72,"end_line":13,"end_character":27},"in_reply_to":"3cea8392_968b6ca5","updated":"2026-08-24 18:05:19.000000000","message":"i forgot about this","commit_id":"80521b296d997b200acaa1c3e23ba77353fde37c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8860c3dbdd014b45e546592e2c970824f2ab7f54","unresolved":true,"context_lines":[{"line_number":23,"context_line":"managed data, and a create/delete lifecycle with managed\u003dfalse."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Implements: blueprint support-vfio-variant-driver-managed-mode-via-cyborg"},{"line_number":26,"context_line":"Depends-On: https://review.opendev.org/c/openstack/cyborg/+/994575"},{"line_number":27,"context_line":"Change-Id: I2eced89234c5776bb516129f8f9e2e1d879749f1"},{"line_number":28,"context_line":"Signed-off-by: Sean Mooney \u003cwork@seanmooney.info\u003e"},{"line_number":29,"context_line":"Assisted-By: pi opus 4.6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"07680e80_3768368e","line":26,"updated":"2026-08-24 18:05:19.000000000","message":"i have an open design question on this patch in cybrog that im not quite happy with today. i had hope to reloeve that today or tomrrow but this may or may not be ready before feature freeze\n\ni do not expect that to affect the nova patch at all, it will be internal to cybrog if i change things but just an fyi that that might take more time then we have before FF ill remove -w on this patch once that is adressed in cyborg.","commit_id":"d14814718f0e542a80685367d0cc851c14914f2f"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fb90b5192773cf0eb5fe77e55e6744186507704","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"2fd1654b_11f25a15","updated":"2026-06-24 01:46:46.000000000","message":"recheck","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"25bb2a3989dd1054c43f826cb4bc05be88a06627","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b3c60f86_97417920","updated":"2026-08-11 12:51:48.000000000","message":"recheck","commit_id":"6e3fd6c4d325090d7de8090ea1a8b97823b14c7a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f571b556540ed6d008e426b715dab2cf803417f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"b79198dd_2d4de3ad","updated":"2026-08-22 13:13:20.000000000","message":"soft -1 since this is mainly nits, but there is one potential error case I think we should catch (missing catalog information)","commit_id":"80521b296d997b200acaa1c3e23ba77353fde37c"}],"nova/accelerator/cyborg.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5e32cd792f62111cc976391550c45e6468594d2d","unresolved":true,"context_lines":[{"line_number":11,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"   Note on object relationships:"},{"line_number":17,"context_line":"   1 device profile (DP) has D \u003e\u003d 1 request groups (just as a flavor"}],"source_content_type":"text/x-python","patch_set":1,"id":"0cc29525_55cc811c","line":14,"updated":"2026-07-07 10:28:30.000000000","message":"as an aside since this module was create the openstacksdk has gained supprot for both placement and cybrog\nim hoping to port both form using the raw keystoneauth client to using the sdk and starting the move to using the nova user and service creditals form our config after this feature is complete and the cybrog srbac functionaltiy is merged.\n\nthat might now land this cycle but i do not wnat to consider that a depency for this functionality as i need to do some pre work to do that properly in terms fo ci testing ectra so would rather not rush that.","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bd86ea3914ed28e08ed372314130d78064b3cdc1","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"   Note on object relationships:"},{"line_number":17,"context_line":"   1 device profile (DP) has D \u003e\u003d 1 request groups (just as a flavor"}],"source_content_type":"text/x-python","patch_set":1,"id":"bc404a06_96ba47da","line":14,"in_reply_to":"0cc29525_55cc811c","updated":"2026-08-11 17:33:01.000000000","message":"Acknowledged","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"866fc9675fed164cc48626dfb8cfaf4066b3acf6","unresolved":true,"context_lines":[{"line_number":140,"context_line":"        return _cached_cyborg_max_microversion"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    try:"},{"line_number":143,"context_line":"        endpoint_data \u003d client.get_endpoint_data()"},{"line_number":144,"context_line":"        max_ver \u003d endpoint_data.max_microversion"},{"line_number":145,"context_line":"        LOG.info(\u0027Cyborg API max microversion: %s\u0027, max_ver)"},{"line_number":146,"context_line":"        if max_ver is not None:"},{"line_number":147,"context_line":"            _cached_cyborg_max_microversion \u003d max_ver"}],"source_content_type":"text/x-python","patch_set":2,"id":"959e7aca_5661b7b4","line":144,"range":{"start_line":143,"start_character":7,"end_line":144,"end_character":48},"updated":"2026-08-11 17:27:24.000000000","message":"this is not correct. it end ups falling back to 2.0 semantics.","commit_id":"6e3fd6c4d325090d7de8090ea1a8b97823b14c7a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cbc440b70fc148c343757657bfe358f7b0b3dce1","unresolved":true,"context_lines":[{"line_number":140,"context_line":"        return _cached_cyborg_max_microversion"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    try:"},{"line_number":143,"context_line":"        endpoint_data \u003d client.get_endpoint_data()"},{"line_number":144,"context_line":"        max_ver \u003d endpoint_data.max_microversion"},{"line_number":145,"context_line":"        LOG.info(\u0027Cyborg API max microversion: %s\u0027, max_ver)"},{"line_number":146,"context_line":"        if max_ver is not None:"},{"line_number":147,"context_line":"            _cached_cyborg_max_microversion \u003d max_ver"}],"source_content_type":"text/x-python","patch_set":2,"id":"b6a2c66e_4b2f4a75","line":144,"range":{"start_line":143,"start_character":7,"end_line":144,"end_character":48},"in_reply_to":"132e1afd_9b7946bd","updated":"2026-08-24 10:31:33.000000000","message":"That\u0027s a much better idea, IMO. Will review now.","commit_id":"6e3fd6c4d325090d7de8090ea1a8b97823b14c7a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8860c3dbdd014b45e546592e2c970824f2ab7f54","unresolved":true,"context_lines":[{"line_number":140,"context_line":"        return _cached_cyborg_max_microversion"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    try:"},{"line_number":143,"context_line":"        endpoint_data \u003d client.get_endpoint_data()"},{"line_number":144,"context_line":"        max_ver \u003d endpoint_data.max_microversion"},{"line_number":145,"context_line":"        LOG.info(\u0027Cyborg API max microversion: %s\u0027, max_ver)"},{"line_number":146,"context_line":"        if max_ver is not None:"},{"line_number":147,"context_line":"            _cached_cyborg_max_microversion \u003d max_ver"}],"source_content_type":"text/x-python","patch_set":2,"id":"8c7ba2f8_1b67b918","line":144,"range":{"start_line":143,"start_character":7,"end_line":144,"end_character":48},"in_reply_to":"7b29a313_9981ad33","updated":"2026-08-24 18:05:19.000000000","message":"movign to the sdk is waht i wanted to do as a followup patch anyway\ni just didnt think i woudl have time before FF\nso if we think we can merge both then im happy to go with mels approch","commit_id":"6e3fd6c4d325090d7de8090ea1a8b97823b14c7a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cf795ef319b7c1e863b3dd42d662dd092d167ef9","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        return _cached_cyborg_max_microversion"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    try:"},{"line_number":143,"context_line":"        endpoint_data \u003d client.get_endpoint_data()"},{"line_number":144,"context_line":"        max_ver \u003d endpoint_data.max_microversion"},{"line_number":145,"context_line":"        LOG.info(\u0027Cyborg API max microversion: %s\u0027, max_ver)"},{"line_number":146,"context_line":"        if max_ver is not None:"},{"line_number":147,"context_line":"            _cached_cyborg_max_microversion \u003d max_ver"}],"source_content_type":"text/x-python","patch_set":2,"id":"d3ca6d66_f4f6b215","line":144,"range":{"start_line":143,"start_character":7,"end_line":144,"end_character":48},"in_reply_to":"959e7aca_5661b7b4","updated":"2026-08-12 12:40:35.000000000","message":"fixed.\n\ni will work on moving cyborg and placement to useing the sdk expclitvly next cycel but for now ill resolve this","commit_id":"6e3fd6c4d325090d7de8090ea1a8b97823b14c7a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"fcdb00c2466a7d8974961bda3f565f9ea3e7a064","unresolved":true,"context_lines":[{"line_number":140,"context_line":"        return _cached_cyborg_max_microversion"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    try:"},{"line_number":143,"context_line":"        endpoint_data \u003d client.get_endpoint_data()"},{"line_number":144,"context_line":"        max_ver \u003d endpoint_data.max_microversion"},{"line_number":145,"context_line":"        LOG.info(\u0027Cyborg API max microversion: %s\u0027, max_ver)"},{"line_number":146,"context_line":"        if max_ver is not None:"},{"line_number":147,"context_line":"            _cached_cyborg_max_microversion \u003d max_ver"}],"source_content_type":"text/x-python","patch_set":2,"id":"7b29a313_9981ad33","line":144,"range":{"start_line":143,"start_character":7,"end_line":144,"end_character":48},"in_reply_to":"b6a2c66e_4b2f4a75","updated":"2026-08-24 10:47:09.000000000","message":"Done. Unless we plan to backport this for some reason, I definitely think this patch should be rebased on that one.","commit_id":"6e3fd6c4d325090d7de8090ea1a8b97823b14c7a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"2e97c456546886b3a70d535d5514fd26c27d17af","unresolved":true,"context_lines":[{"line_number":140,"context_line":"        return _cached_cyborg_max_microversion"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    try:"},{"line_number":143,"context_line":"        endpoint_data \u003d client.get_endpoint_data()"},{"line_number":144,"context_line":"        max_ver \u003d endpoint_data.max_microversion"},{"line_number":145,"context_line":"        LOG.info(\u0027Cyborg API max microversion: %s\u0027, max_ver)"},{"line_number":146,"context_line":"        if max_ver is not None:"},{"line_number":147,"context_line":"            _cached_cyborg_max_microversion \u003d max_ver"}],"source_content_type":"text/x-python","patch_set":2,"id":"132e1afd_9b7946bd","line":144,"range":{"start_line":143,"start_character":7,"end_line":144,"end_character":48},"in_reply_to":"d3ca6d66_f4f6b215","updated":"2026-08-24 03:53:10.000000000","message":"I ... don\u0027t love the idea of adding this microversion handling one-off this way due to such issues and more, so I\u0027m trying out a change to switch Cyborg to SDK here:\n\nhttps://review.opendev.org/c/openstack/nova/+/1002007\n\nThat is, if it would not be too much to rebase upon.","commit_id":"6e3fd6c4d325090d7de8090ea1a8b97823b14c7a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f571b556540ed6d008e426b715dab2cf803417f","unresolved":true,"context_lines":[{"line_number":110,"context_line":"                devices_amount +\u003d int(val)"},{"line_number":111,"context_line":"    return devices_amount"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"# Cyborg API microversion that adds \u0027managed\u0027 to attach_handle_info."},{"line_number":115,"context_line":"CYBORG_MICROVERSION_MANAGED \u003d \u00272.4\u0027"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"_cached_cyborg_max_microversion \u003d None"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"def reset_cache():"},{"line_number":121,"context_line":"    \"\"\"Reset the cached Cyborg API discovery result.\"\"\""},{"line_number":122,"context_line":"    global _cached_cyborg_max_microversion"}],"source_content_type":"text/x-python","patch_set":3,"id":"25c103f0_481b434d","line":119,"range":{"start_line":113,"start_character":1,"end_line":119,"end_character":1},"updated":"2026-08-22 13:13:20.000000000","message":"nit: could we move these constants/globals to the top of the file?","commit_id":"80521b296d997b200acaa1c3e23ba77353fde37c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f571b556540ed6d008e426b715dab2cf803417f","unresolved":true,"context_lines":[{"line_number":117,"context_line":"_cached_cyborg_max_microversion \u003d None"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"def reset_cache():"},{"line_number":121,"context_line":"    \"\"\"Reset the cached Cyborg API discovery result.\"\"\""},{"line_number":122,"context_line":"    global _cached_cyborg_max_microversion"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    _cached_cyborg_max_microversion \u003d None"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"def _get_cyborg_max_microversion(client):"},{"line_number":128,"context_line":"    \"\"\"Fetch and cache the Cyborg server\u0027s max microversion."}],"source_content_type":"text/x-python","patch_set":3,"id":"bd833769_5f2a4650","line":125,"range":{"start_line":120,"start_character":0,"end_line":125,"end_character":1},"updated":"2026-08-22 13:13:20.000000000","message":"nit: I\u0027d argue this probably belongs up top also, given it touches globals.","commit_id":"80521b296d997b200acaa1c3e23ba77353fde37c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f571b556540ed6d008e426b715dab2cf803417f","unresolved":true,"context_lines":[{"line_number":124,"context_line":"    _cached_cyborg_max_microversion \u003d None"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"def _get_cyborg_max_microversion(client):"},{"line_number":128,"context_line":"    \"\"\"Fetch and cache the Cyborg server\u0027s max microversion."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    Cache the successful discovery result for the Nova service process. A"}],"source_content_type":"text/x-python","patch_set":3,"id":"4ad626ae_27f7aabe","line":127,"updated":"2026-08-22 13:13:20.000000000","message":"nit:\n\n```suggestion\ndef _get_cyborg_max_microversion(client: \u0027_CyborgClient\u0027) -\u003e tuple[int | float, ...] | None:\n```","commit_id":"80521b296d997b200acaa1c3e23ba77353fde37c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f571b556540ed6d008e426b715dab2cf803417f","unresolved":true,"context_lines":[{"line_number":146,"context_line":"        # the session so keystoneauth performs discovery with the configured"},{"line_number":147,"context_line":"        # authentication, TLS, and retry settings."},{"line_number":148,"context_line":"        endpoint \u003d client.get_endpoint()"},{"line_number":149,"context_line":"        endpoint_data \u003d client.session.get_endpoint_data("},{"line_number":150,"context_line":"            client.auth, endpoint_override\u003dendpoint)"},{"line_number":151,"context_line":"        max_ver \u003d endpoint_data.max_microversion"},{"line_number":152,"context_line":"        LOG.info(\u0027Cyborg API max microversion: %s\u0027, max_ver)"}],"source_content_type":"text/x-python","patch_set":3,"id":"8886f572_db81d060","line":149,"updated":"2026-08-22 13:13:20.000000000","message":"This can return `None`. You probably want to change your checks below?","commit_id":"80521b296d997b200acaa1c3e23ba77353fde37c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f571b556540ed6d008e426b715dab2cf803417f","unresolved":true,"context_lines":[{"line_number":156,"context_line":"    except Exception:"},{"line_number":157,"context_line":"        LOG.warning("},{"line_number":158,"context_line":"            \u0027Failed to discover Cyborg API version. \u0027"},{"line_number":159,"context_line":"            \u0027ARQ responses may not include the managed field.\u0027,"},{"line_number":160,"context_line":"            exc_info\u003dTrue)"},{"line_number":161,"context_line":"    return None"},{"line_number":162,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"68efad1f_2ab5249b","line":159,"updated":"2026-08-22 13:13:20.000000000","message":"This error is in the wrong place. It belongs in `_arq_microversion`, not a generic helper like this. Could you move it or (better?) combine the two helpers. We can always split it up again if we need another microversion check down the line...","commit_id":"80521b296d997b200acaa1c3e23ba77353fde37c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f571b556540ed6d008e426b715dab2cf803417f","unresolved":true,"context_lines":[{"line_number":161,"context_line":"    return None"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"def _arq_microversion(client):"},{"line_number":165,"context_line":"    \"\"\"Return the microversion to use for ARQ GET requests."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    Returns \u00272.4\u0027 if the Cyborg server supports it, otherwise None"}],"source_content_type":"text/x-python","patch_set":3,"id":"a00d3084_ddff85be","line":164,"updated":"2026-08-22 13:13:20.000000000","message":"nit:\n\n```suggestion\ndef _arq_microversion(client: \u0027_CyborgClient\u0027) -\u003e tuple[int | float, ...] | None:\n```","commit_id":"80521b296d997b200acaa1c3e23ba77353fde37c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f571b556540ed6d008e426b715dab2cf803417f","unresolved":true,"context_lines":[{"line_number":367,"context_line":"           :raises: AcceleratorRequestOpFailed"},{"line_number":368,"context_line":"        \"\"\""},{"line_number":369,"context_line":"        query \u003d {\"instance\": instance_uuid}"},{"line_number":370,"context_line":"        mv \u003d _arq_microversion(self._client)"},{"line_number":371,"context_line":"        mv_kwargs \u003d {}"},{"line_number":372,"context_line":"        if mv:"},{"line_number":373,"context_line":"            mv_kwargs[\u0027microversion\u0027] \u003d mv"},{"line_number":374,"context_line":"            mv_kwargs[\u0027microversion_service_type\u0027] \u003d \u0027accelerator\u0027"},{"line_number":375,"context_line":"        resp, err_msg \u003d self._call_cyborg(self._client.get,"},{"line_number":376,"context_line":"            self.ARQ_URL, params\u003dquery, **mv_kwargs)"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        if err_msg:"},{"line_number":379,"context_line":"            err_msg \u003d err_msg + _(\u0027 Instance %s\u0027) % instance_uuid"},{"line_number":380,"context_line":"            raise exception.AcceleratorRequestOpFailed("}],"source_content_type":"text/x-python","patch_set":3,"id":"48d5692e_54d15c0d","line":377,"range":{"start_line":370,"start_character":44,"end_line":377,"end_character":1},"updated":"2026-08-22 13:13:20.000000000","message":"These parameters are ignored if `microversion` is `None`. Can you simplify this and just always pass them?\n\n```suggestion\n        mv \u003d _arq_microversion(self._client)\n        resp, err_msg \u003d self._call_cyborg(self._client.get,\n            self.ARQ_URL, params\u003dquery, microversion\u003dmv,\n            microversion_service_type\u003d\u0027accelerator\u0027)\n\n```","commit_id":"80521b296d997b200acaa1c3e23ba77353fde37c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f571b556540ed6d008e426b715dab2cf803417f","unresolved":true,"context_lines":[{"line_number":414,"context_line":"           :raises: AcceleratorRequestOpFailed"},{"line_number":415,"context_line":"        \"\"\""},{"line_number":416,"context_line":"        mv \u003d _arq_microversion(self._client)"},{"line_number":417,"context_line":"        mv_kwargs \u003d {}"},{"line_number":418,"context_line":"        if mv:"},{"line_number":419,"context_line":"            mv_kwargs[\u0027microversion\u0027] \u003d mv"},{"line_number":420,"context_line":"            mv_kwargs[\u0027microversion_service_type\u0027] \u003d \u0027accelerator\u0027"},{"line_number":421,"context_line":"        resp, err_msg \u003d self._call_cyborg(self._client.get,"},{"line_number":422,"context_line":"                \"/\".join([self.ARQ_URL, arq_uuid]), **mv_kwargs)"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"        if err_msg:"},{"line_number":425,"context_line":"            err_msg \u003d err_msg + _(\u0027 ARQ: %s\u0027) % arq_uuid"}],"source_content_type":"text/x-python","patch_set":3,"id":"07600d04_6b18aad6","line":422,"range":{"start_line":417,"start_character":0,"end_line":422,"end_character":64},"updated":"2026-08-22 13:13:20.000000000","message":"Same comment as above\n\n\n```suggestion\n        resp, err_msg \u003d self._call_cyborg(self._client.get,\n            \"/\".join([self.ARQ_URL, arq_uuid]), microversion\u003dmv,\n            microversion_service_type\u003d\u0027accelerator\u0027)\n```","commit_id":"80521b296d997b200acaa1c3e23ba77353fde37c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cf3173bf03e1d732435c7382bf69d0e455f8bada","unresolved":true,"context_lines":[{"line_number":114,"context_line":"# Cyborg API microversion that adds \u0027managed\u0027 to attach_handle_info."},{"line_number":115,"context_line":"CYBORG_MICROVERSION_MANAGED \u003d \u00272.4\u0027"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"_cached_cyborg_max_microversion \u003d None"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"def reset_cache():"}],"source_content_type":"text/x-python","patch_set":4,"id":"e8ff8947_26b23ab7","line":117,"updated":"2026-08-24 18:06:20.000000000","message":"ah i forgot about this also","commit_id":"d14814718f0e542a80685367d0cc851c14914f2f"}],"nova/test.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f571b556540ed6d008e426b715dab2cf803417f","unresolved":true,"context_lines":[{"line_number":196,"context_line":"        # native threading as well"},{"line_number":197,"context_line":"        self.useFixture("},{"line_number":198,"context_line":"            nova_fixtures.PropagateTestCaseIdToChildEventlets(self.id()))"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        # Ensure that the pci alias is reset between test cases running in"},{"line_number":201,"context_line":"        # the same process"},{"line_number":202,"context_line":"        request.get_alias_from_config.cache_clear()"},{"line_number":203,"context_line":"        libvirt_driver.LibvirtDriver._get_pci_passthrough_devices.cache_clear()"},{"line_number":204,"context_line":"        cyborg.reset_cache()"}],"source_content_type":"text/x-python","patch_set":3,"id":"bc4040fe_c4abca4f","line":201,"range":{"start_line":199,"start_character":1,"end_line":201,"end_character":26},"updated":"2026-08-22 13:13:20.000000000","message":"```suggestion\n\n        # Ensure that the pci alias and cyborg cache are reset between test\n        # cases running in the same process\n```","commit_id":"80521b296d997b200acaa1c3e23ba77353fde37c"}],"nova/tests/functional/libvirt/test_accel_servers.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e3ee9b0a12098657943f9150f964438503719a69","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from lxml import etree"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import nova.virt.libvirt.guest"},{"line_number":24,"context_line":"from nova.tests import fixtures as nova_fixtures"},{"line_number":25,"context_line":"from nova.tests.fixtures import libvirt as fakelibvirt"},{"line_number":26,"context_line":"from nova.tests.fixtures.cyborg import get_arqs"},{"line_number":27,"context_line":"from nova.tests.functional.libvirt import base"}],"source_content_type":"text/x-python","patch_set":1,"id":"49a9c300_94adb856","line":24,"updated":"2026-06-24 04:44:48.000000000","message":"pep8: H306: imports not in alphabetical order (nova.virt.libvirt.guest, nova.tests.fixtures)","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5e32cd792f62111cc976391550c45e6468594d2d","unresolved":true,"context_lines":[{"line_number":21,"context_line":"from lxml import etree"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import nova.virt.libvirt.guest"},{"line_number":24,"context_line":"from nova.tests import fixtures as nova_fixtures"},{"line_number":25,"context_line":"from nova.tests.fixtures import libvirt as fakelibvirt"},{"line_number":26,"context_line":"from nova.tests.fixtures.cyborg import get_arqs"},{"line_number":27,"context_line":"from nova.tests.functional.libvirt import base"}],"source_content_type":"text/x-python","patch_set":1,"id":"665d2903_4337e0fb","line":24,"in_reply_to":"49a9c300_94adb856","updated":"2026-07-07 10:28:30.000000000","message":"sigh...","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bd86ea3914ed28e08ed372314130d78064b3cdc1","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from lxml import etree"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import nova.virt.libvirt.guest"},{"line_number":24,"context_line":"from nova.tests import fixtures as nova_fixtures"},{"line_number":25,"context_line":"from nova.tests.fixtures import libvirt as fakelibvirt"},{"line_number":26,"context_line":"from nova.tests.fixtures.cyborg import get_arqs"},{"line_number":27,"context_line":"from nova.tests.functional.libvirt import base"}],"source_content_type":"text/x-python","patch_set":1,"id":"1394ed29_d0f80544","line":24,"in_reply_to":"665d2903_4337e0fb","updated":"2026-08-11 17:33:01.000000000","message":"Done","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e3ee9b0a12098657943f9150f964438503719a69","unresolved":false,"context_lines":[{"line_number":23,"context_line":"import nova.virt.libvirt.guest"},{"line_number":24,"context_line":"from nova.tests import fixtures as nova_fixtures"},{"line_number":25,"context_line":"from nova.tests.fixtures import libvirt as fakelibvirt"},{"line_number":26,"context_line":"from nova.tests.fixtures.cyborg import get_arqs"},{"line_number":27,"context_line":"from nova.tests.functional.libvirt import base"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"a1ef382f_4b713df0","line":26,"updated":"2026-06-24 04:44:48.000000000","message":"pep8: H306: imports not in alphabetical order (nova.tests.fixtures.libvirt, nova.tests.fixtures.cyborg.get_arqs)","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bd86ea3914ed28e08ed372314130d78064b3cdc1","unresolved":false,"context_lines":[{"line_number":23,"context_line":"import nova.virt.libvirt.guest"},{"line_number":24,"context_line":"from nova.tests import fixtures as nova_fixtures"},{"line_number":25,"context_line":"from nova.tests.fixtures import libvirt as fakelibvirt"},{"line_number":26,"context_line":"from nova.tests.fixtures.cyborg import get_arqs"},{"line_number":27,"context_line":"from nova.tests.functional.libvirt import base"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"01368086_3ed52454","line":26,"in_reply_to":"717c8e62_fcf2bc18","updated":"2026-08-11 17:33:01.000000000","message":"Done","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5e32cd792f62111cc976391550c45e6468594d2d","unresolved":true,"context_lines":[{"line_number":23,"context_line":"import nova.virt.libvirt.guest"},{"line_number":24,"context_line":"from nova.tests import fixtures as nova_fixtures"},{"line_number":25,"context_line":"from nova.tests.fixtures import libvirt as fakelibvirt"},{"line_number":26,"context_line":"from nova.tests.fixtures.cyborg import get_arqs"},{"line_number":27,"context_line":"from nova.tests.functional.libvirt import base"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"717c8e62_fcf2bc18","line":26,"in_reply_to":"a1ef382f_4b713df0","updated":"2026-07-07 10:28:30.000000000","message":"this is why i hate hackigns order... but this is vaild","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5e32cd792f62111cc976391550c45e6468594d2d","unresolved":true,"context_lines":[{"line_number":54,"context_line":"        # fake driver but is ignored by the real libvirt driver."},{"line_number":55,"context_line":"        for arq in bound_arq_list:"},{"line_number":56,"context_line":"            arq[\u0027attach_handle_type\u0027] \u003d \u0027PCI\u0027"},{"line_number":57,"context_line":"        nova_fixtures.CyborgFixture.arq_list \u003d arq_list"},{"line_number":58,"context_line":"        nova_fixtures.CyborgFixture.bound_arq_list \u003d bound_arq_list"},{"line_number":59,"context_line":"        nova_fixtures.CyborgFixture.arq_uuids \u003d ["},{"line_number":60,"context_line":"            arq[\u0027uuid\u0027] for arq in arq_list]"},{"line_number":61,"context_line":"        self.cyborg.call_create_arq_count \u003d 0"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _start_compute_with_device_rp(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"571f80cd_a9d9981b","line":60,"range":{"start_line":57,"start_character":6,"end_line":60,"end_character":44},"updated":"2026-07-07 10:28:30.000000000","message":"asigned to fixture is not the right approch,\n\nwe awnat ot alwasy mange this though fixutres to ensure not cross test sharing.","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bd86ea3914ed28e08ed372314130d78064b3cdc1","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        # fake driver but is ignored by the real libvirt driver."},{"line_number":55,"context_line":"        for arq in bound_arq_list:"},{"line_number":56,"context_line":"            arq[\u0027attach_handle_type\u0027] \u003d \u0027PCI\u0027"},{"line_number":57,"context_line":"        nova_fixtures.CyborgFixture.arq_list \u003d arq_list"},{"line_number":58,"context_line":"        nova_fixtures.CyborgFixture.bound_arq_list \u003d bound_arq_list"},{"line_number":59,"context_line":"        nova_fixtures.CyborgFixture.arq_uuids \u003d ["},{"line_number":60,"context_line":"            arq[\u0027uuid\u0027] for arq in arq_list]"},{"line_number":61,"context_line":"        self.cyborg.call_create_arq_count \u003d 0"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _start_compute_with_device_rp(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfda84b9_9ddbd4e9","line":60,"range":{"start_line":57,"start_character":6,"end_line":60,"end_character":44},"in_reply_to":"571f80cd_a9d9981b","updated":"2026-08-11 17:33:01.000000000","message":"Done","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5e32cd792f62111cc976391550c45e6468594d2d","unresolved":true,"context_lines":[{"line_number":41,"context_line":"        super().setUp()"},{"line_number":42,"context_line":"        self.cyborg \u003d self.useFixture(nova_fixtures.CyborgFixture())"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _reinit_cyborg_arqs(self, managed_mode\u003dNone):"},{"line_number":45,"context_line":"        \"\"\"Re-initialize CyborgFixture ARQ lists with managed_mode."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        Also sets attach_handle_type to \u0027PCI\u0027 (the libvirt driver"},{"line_number":48,"context_line":"        only accepts \u0027PCI\u0027, not the default \u0027TEST_PCI\u0027)."},{"line_number":49,"context_line":"        \"\"\""},{"line_number":50,"context_line":"        arq_list, bound_arq_list \u003d get_arqs("},{"line_number":51,"context_line":"            self.cyborg.dp_name, managed_mode\u003dmanaged_mode)"},{"line_number":52,"context_line":"        # The libvirt driver filters by attach_handle_type \u003d\u003d \u0027PCI\u0027;"},{"line_number":53,"context_line":"        # the default fixture uses \u0027TEST_PCI\u0027 which works with the"},{"line_number":54,"context_line":"        # fake driver but is ignored by the real libvirt driver."},{"line_number":55,"context_line":"        for arq in bound_arq_list:"},{"line_number":56,"context_line":"            arq[\u0027attach_handle_type\u0027] \u003d \u0027PCI\u0027"},{"line_number":57,"context_line":"        nova_fixtures.CyborgFixture.arq_list \u003d arq_list"},{"line_number":58,"context_line":"        nova_fixtures.CyborgFixture.bound_arq_list \u003d bound_arq_list"},{"line_number":59,"context_line":"        nova_fixtures.CyborgFixture.arq_uuids \u003d ["},{"line_number":60,"context_line":"            arq[\u0027uuid\u0027] for arq in arq_list]"},{"line_number":61,"context_line":"        self.cyborg.call_create_arq_count \u003d 0"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _start_compute_with_device_rp(self):"},{"line_number":64,"context_line":"        \"\"\"Start a libvirt compute and create a Cyborg device RP.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"25d643e1_70eb3bae","line":61,"range":{"start_line":44,"start_character":2,"end_line":61,"end_character":45},"updated":"2026-07-07 10:28:30.000000000","message":"hum i can proably do this cleaner.\n\nim concerne this will leak between tests since im not resetting this","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bd86ea3914ed28e08ed372314130d78064b3cdc1","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        super().setUp()"},{"line_number":42,"context_line":"        self.cyborg \u003d self.useFixture(nova_fixtures.CyborgFixture())"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _reinit_cyborg_arqs(self, managed_mode\u003dNone):"},{"line_number":45,"context_line":"        \"\"\"Re-initialize CyborgFixture ARQ lists with managed_mode."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        Also sets attach_handle_type to \u0027PCI\u0027 (the libvirt driver"},{"line_number":48,"context_line":"        only accepts \u0027PCI\u0027, not the default \u0027TEST_PCI\u0027)."},{"line_number":49,"context_line":"        \"\"\""},{"line_number":50,"context_line":"        arq_list, bound_arq_list \u003d get_arqs("},{"line_number":51,"context_line":"            self.cyborg.dp_name, managed_mode\u003dmanaged_mode)"},{"line_number":52,"context_line":"        # The libvirt driver filters by attach_handle_type \u003d\u003d \u0027PCI\u0027;"},{"line_number":53,"context_line":"        # the default fixture uses \u0027TEST_PCI\u0027 which works with the"},{"line_number":54,"context_line":"        # fake driver but is ignored by the real libvirt driver."},{"line_number":55,"context_line":"        for arq in bound_arq_list:"},{"line_number":56,"context_line":"            arq[\u0027attach_handle_type\u0027] \u003d \u0027PCI\u0027"},{"line_number":57,"context_line":"        nova_fixtures.CyborgFixture.arq_list \u003d arq_list"},{"line_number":58,"context_line":"        nova_fixtures.CyborgFixture.bound_arq_list \u003d bound_arq_list"},{"line_number":59,"context_line":"        nova_fixtures.CyborgFixture.arq_uuids \u003d ["},{"line_number":60,"context_line":"            arq[\u0027uuid\u0027] for arq in arq_list]"},{"line_number":61,"context_line":"        self.cyborg.call_create_arq_count \u003d 0"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _start_compute_with_device_rp(self):"},{"line_number":64,"context_line":"        \"\"\"Start a libvirt compute and create a Cyborg device RP.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"53d7e7e5_b6e6e4a2","line":61,"range":{"start_line":44,"start_character":2,"end_line":61,"end_character":45},"in_reply_to":"25d643e1_70eb3bae","updated":"2026-08-11 17:33:01.000000000","message":"Done","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5e32cd792f62111cc976391550c45e6468594d2d","unresolved":true,"context_lines":[{"line_number":6972,"context_line":"        self.assertNotIn(\u0027pci_slot\u0027, binding_profile)"},{"line_number":6973,"context_line":""},{"line_number":6974,"context_line":""},{"line_number":6975,"context_line":""},{"line_number":6976,"context_line":""},{"line_number":6977,"context_line":"class PortBindingShelvedServerTest(integrated_helpers._IntegratedTestBase):"},{"line_number":6978,"context_line":"    \"\"\"Tests for servers with ports.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"a0c41924_f8556789","line":6975,"updated":"2026-07-07 10:28:30.000000000","message":"This shoudl not be neded. we expect 2 blank lines not 4","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bd86ea3914ed28e08ed372314130d78064b3cdc1","unresolved":false,"context_lines":[{"line_number":6972,"context_line":"        self.assertNotIn(\u0027pci_slot\u0027, binding_profile)"},{"line_number":6973,"context_line":""},{"line_number":6974,"context_line":""},{"line_number":6975,"context_line":""},{"line_number":6976,"context_line":""},{"line_number":6977,"context_line":"class PortBindingShelvedServerTest(integrated_helpers._IntegratedTestBase):"},{"line_number":6978,"context_line":"    \"\"\"Tests for servers with ports.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"e24fd446_eb735202","line":6975,"in_reply_to":"a0c41924_f8556789","updated":"2026-08-11 17:33:01.000000000","message":"Done","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"}],"nova/tests/unit/accelerator/test_cyborg.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5e32cd792f62111cc976391550c45e6468594d2d","unresolved":true,"context_lines":[{"line_number":552,"context_line":"    @mock.patch(\u0027requests.get\u0027)"},{"line_number":553,"context_line":"    def test_get_cyborg_max_microversion(self, mock_requests_get):"},{"line_number":554,"context_line":"        \"\"\"Test that version discovery fetches and caches max_version.\"\"\""},{"line_number":555,"context_line":"        discovery_body \u003d {"},{"line_number":556,"context_line":"            \u0027default_version\u0027: {"},{"line_number":557,"context_line":"                \u0027id\u0027: \u0027v2\u0027, \u0027status\u0027: \u0027CURRENT\u0027,"},{"line_number":558,"context_line":"                \u0027max_version\u0027: \u00272.4\u0027, \u0027min_version\u0027: \u00272.0\u0027,"},{"line_number":559,"context_line":"            }"},{"line_number":560,"context_line":"        }"},{"line_number":561,"context_line":"        mock_resp \u003d mock.Mock()"},{"line_number":562,"context_line":"        mock_resp.status_code \u003d 200"},{"line_number":563,"context_line":"        mock_resp.json.return_value \u003d discovery_body"},{"line_number":564,"context_line":"        mock_requests_get.return_value \u003d mock_resp"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"        result \u003d cyborg._get_cyborg_max_microversion("},{"line_number":567,"context_line":"            \u0027http://example.com/accelerator\u0027, \u0027fake-token\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"61b78f4b_c061bf18","line":564,"range":{"start_line":555,"start_character":1,"end_line":564,"end_character":50},"updated":"2026-07-07 10:28:30.000000000","message":"this is not following the existing pattehr we shoudl use our fake responce objects\n\n```\n        query \u003d {\"instance\": instance_uuid}\n        content \u003d jsonutils.dumps({\u0027arqs\u0027: bound_arqs})\n        resp \u003d fake_requests.FakeResponse(200, content)\n```","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bd86ea3914ed28e08ed372314130d78064b3cdc1","unresolved":false,"context_lines":[{"line_number":552,"context_line":"    @mock.patch(\u0027requests.get\u0027)"},{"line_number":553,"context_line":"    def test_get_cyborg_max_microversion(self, mock_requests_get):"},{"line_number":554,"context_line":"        \"\"\"Test that version discovery fetches and caches max_version.\"\"\""},{"line_number":555,"context_line":"        discovery_body \u003d {"},{"line_number":556,"context_line":"            \u0027default_version\u0027: {"},{"line_number":557,"context_line":"                \u0027id\u0027: \u0027v2\u0027, \u0027status\u0027: \u0027CURRENT\u0027,"},{"line_number":558,"context_line":"                \u0027max_version\u0027: \u00272.4\u0027, \u0027min_version\u0027: \u00272.0\u0027,"},{"line_number":559,"context_line":"            }"},{"line_number":560,"context_line":"        }"},{"line_number":561,"context_line":"        mock_resp \u003d mock.Mock()"},{"line_number":562,"context_line":"        mock_resp.status_code \u003d 200"},{"line_number":563,"context_line":"        mock_resp.json.return_value \u003d discovery_body"},{"line_number":564,"context_line":"        mock_requests_get.return_value \u003d mock_resp"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"        result \u003d cyborg._get_cyborg_max_microversion("},{"line_number":567,"context_line":"            \u0027http://example.com/accelerator\u0027, \u0027fake-token\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"8555215d_a7f03936","line":564,"range":{"start_line":555,"start_character":1,"end_line":564,"end_character":50},"in_reply_to":"61b78f4b_c061bf18","updated":"2026-08-11 17:33:01.000000000","message":"Done","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5e32cd792f62111cc976391550c45e6468594d2d","unresolved":true,"context_lines":[{"line_number":23443,"context_line":""},{"line_number":23444,"context_line":"    def test_guest_add_accel_pci_devices_managed_false(self):"},{"line_number":23445,"context_line":"        \"\"\"Cyborg ARQ with managed\u003dfalse produces managed\u003d\u0027no\u0027 XML.\"\"\""},{"line_number":23446,"context_line":"        self.flags(virt_type\u003d\u0027kvm\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":23447,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":23448,"context_line":"        guest \u003d vconfig.LibvirtConfigGuest()"},{"line_number":23449,"context_line":"        accel_info \u003d [{"}],"source_content_type":"text/x-python","patch_set":1,"id":"a15b09fb_c84c15e0","line":23446,"range":{"start_line":23446,"start_character":6,"end_line":23446,"end_character":52},"updated":"2026-07-07 10:28:30.000000000","message":"this shoudl not actully be reuired\n\ni belive sriov work wiht virt type qemu so this is really just addign noise","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cf795ef319b7c1e863b3dd42d662dd092d167ef9","unresolved":false,"context_lines":[{"line_number":23443,"context_line":""},{"line_number":23444,"context_line":"    def test_guest_add_accel_pci_devices_managed_false(self):"},{"line_number":23445,"context_line":"        \"\"\"Cyborg ARQ with managed\u003dfalse produces managed\u003d\u0027no\u0027 XML.\"\"\""},{"line_number":23446,"context_line":"        self.flags(virt_type\u003d\u0027kvm\u0027, group\u003d\u0027libvirt\u0027)"},{"line_number":23447,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":23448,"context_line":"        guest \u003d vconfig.LibvirtConfigGuest()"},{"line_number":23449,"context_line":"        accel_info \u003d [{"}],"source_content_type":"text/x-python","patch_set":1,"id":"d012fed1_1ab05188","line":23446,"range":{"start_line":23446,"start_character":6,"end_line":23446,"end_character":52},"in_reply_to":"a15b09fb_c84c15e0","updated":"2026-08-12 12:40:35.000000000","message":"Done","commit_id":"aeb5edf2ace71a9769b4c1443274aae10e58b10a"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f571b556540ed6d008e426b715dab2cf803417f","unresolved":true,"context_lines":[{"line_number":6371,"context_line":"                      \"parallels hypervisor settings.\", managed)"},{"line_number":6372,"context_line":"        if CONF.libvirt.virt_type in (\u0027kvm\u0027, \u0027qemu\u0027):"},{"line_number":6373,"context_line":"            pcidev.managed \u003d ("},{"line_number":6374,"context_line":"                \"yes\" if strutils.bool_from_string(managed) else \"no\""},{"line_number":6375,"context_line":"            )"},{"line_number":6376,"context_line":""},{"line_number":6377,"context_line":"    def _get_guest_pci_device(self, pci_device):"}],"source_content_type":"text/x-python","patch_set":3,"id":"aaecd5ae_e125e7af","line":6374,"updated":"2026-08-22 13:13:20.000000000","message":"This was much stricter before. Do we need this change i.e. can this have another \"true\" value besides `\"true\"` in 2.4? If not, can we drop this and stay strict. `bool_from_string` is for human-provided values, IMO","commit_id":"80521b296d997b200acaa1c3e23ba77353fde37c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8860c3dbdd014b45e546592e2c970824f2ab7f54","unresolved":true,"context_lines":[{"line_number":6371,"context_line":"                      \"parallels hypervisor settings.\", managed)"},{"line_number":6372,"context_line":"        if CONF.libvirt.virt_type in (\u0027kvm\u0027, \u0027qemu\u0027):"},{"line_number":6373,"context_line":"            pcidev.managed \u003d ("},{"line_number":6374,"context_line":"                \"yes\" if strutils.bool_from_string(managed) else \"no\""},{"line_number":6375,"context_line":"            )"},{"line_number":6376,"context_line":""},{"line_number":6377,"context_line":"    def _get_guest_pci_device(self, pci_device):"}],"source_content_type":"text/x-python","patch_set":3,"id":"0dbde3dd_1138bea1","line":6374,"in_reply_to":"aaecd5ae_e125e7af","updated":"2026-08-24 18:05:19.000000000","message":"just \"false\"\n\ni debated having the api be an actual json bool but currently the attachment handel is untypes or rater all values for all keys are alwasy strings\n\nso i was hesitent to break that but its proably more correct.\n\nlet em revise this on both ends i am intoducing a new microversion in either case so it can also cover that this may now contain non string data.","commit_id":"80521b296d997b200acaa1c3e23ba77353fde37c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3f571b556540ed6d008e426b715dab2cf803417f","unresolved":true,"context_lines":[{"line_number":8015,"context_line":"            dev.domain, dev.bus, dev.slot, dev.function \u003d ("},{"line_number":8016,"context_line":"                pci_addr[\u0027domain\u0027], pci_addr[\u0027bus\u0027],"},{"line_number":8017,"context_line":"                pci_addr[\u0027device\u0027], pci_addr[\u0027function\u0027])"},{"line_number":8018,"context_line":"            # Cyborg API \u003e\u003d 2.4 includes a \u0027managed\u0027 key in"},{"line_number":8019,"context_line":"            # attach_handle_info for PCI attach handles. When"},{"line_number":8020,"context_line":"            # managed is \u0027false\u0027, the device stays bound to its"},{"line_number":8021,"context_line":"            # host driver (e.g. a VFIO variant driver) and libvirt"}],"source_content_type":"text/x-python","patch_set":3,"id":"3bf70a82_fbc69ccc","line":8018,"updated":"2026-08-22 13:13:20.000000000","message":"nit:\n\n```suggestion\n            # Cyborg microversion 2.4 adds a \u0027managed\u0027 key in\n```\n\n(we can\u0027t be sure this won\u0027t be removed again in a future microversion so \u003e\u003d 2.4 is potentially wrong)","commit_id":"80521b296d997b200acaa1c3e23ba77353fde37c"}]}
