)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4853fd8dd0d18b484fc126f4a94eba479df514d4","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":20,"id":"89bf153b_3b8e417b","line":31,"updated":"2026-08-07 14:08:45.000000000","message":"you should add \n\n  Implements: blueprint cyborg-vgpu-support","commit_id":"c4923e83079c99a32bf0e15a0171ee467d508ab6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d61e190123df408fc371c024e79a4b172fddc132","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"46ce4587_54196dac","line":31,"in_reply_to":"89bf153b_3b8e417b","updated":"2026-08-21 18:52:45.000000000","message":"Done","commit_id":"c4923e83079c99a32bf0e15a0171ee467d508ab6"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"fdfd0f07566a27c67419499340e7affd347e4698","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"6f32f8ba_78a0f226","updated":"2026-07-07 07:34:09.000000000","message":"recheck","commit_id":"770fd4dacc62a943ceb0b6ab28ff868a9027a58a"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"769f374e7520fe4a5dee31133d5954e6e51d6a81","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"b2b5a978_c93c3db0","updated":"2026-07-28 09:16:54.000000000","message":"recheck","commit_id":"a7b6e9b3ebea11fcdf79ed2c71321128993d45fd"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"956b4432868bdc3335fc2d5babcdd2f9ac720025","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"108a21da_b5b46be0","updated":"2026-07-31 12:21:08.000000000","message":"recheck grenade test failure seems unrelated","commit_id":"dec3aaebfb25157f3e6c951081916cf031965198"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6e01edb085c375db1fab1c37fa832ca68b19dfcd","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":18,"id":"6d50c7fb_5b7c4233","updated":"2026-08-04 13:52:48.000000000","message":"this shoudl have a feature release note.\n\nsome other comments inline.\n\nthe mdev cretion shoudl not be done as a sideefect fo the xml generation it shoudl be doen before it at all the point we do it today for nova managed mdevs","commit_id":"bf82b5fb8b367d58f477bc4a2bb452aa3bb45934"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4853fd8dd0d18b484fc126f4a94eba479df514d4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"1f9ad32f_3fd9fc6f","updated":"2026-08-07 14:08:45.000000000","message":"I have serious concerns by the fact we would only raise any configuration issue only when booting a VM using the misconfigured resource.","commit_id":"c4923e83079c99a32bf0e15a0171ee467d508ab6"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"b12c13a49d02d80e698f97f9412b4ec2994e6a90","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"14afba13_72b7105e","updated":"2026-08-17 11:56:25.000000000","message":"Rebasing this patch to test the series.","commit_id":"c4923e83079c99a32bf0e15a0171ee467d508ab6"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d03b9e3690f8561526fff6b12e05df07ea9f531a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"6cda9f80_03b7e290","updated":"2026-08-18 18:13:08.000000000","message":"-1 for a couple of places missing test coverage but I\u0027m thinking adding a startup check for misconfig would be a follow up at most. I lean toward going without it for now given the tradeoff mentioned inline.\n\nCould we also please clean up some unnecessary line wrapping on the respin similar to how you did on the patch below?","commit_id":"d0cd8bbb3ec1c6c1cbfaac75c12dbe6b1484a8a9"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"fd75b26a833b7a6dfb12bc404aaf086387ea6239","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"03859474_6fea1fd3","in_reply_to":"6cda9f80_03b7e290","updated":"2026-08-19 06:03:46.000000000","message":"Thank you Melanie for the review.\n\nI have added two tests:\n- `test_allocate_cyborg_mdevs_reuses_existing_devices` for the successful _allocate_cyborg_mdevs() lookup path \n- `test_allocate_cyborg_mdevs_reraises_lookup_errors` to verify that libvirt errors other than VIR_ERR_NO_NODE_DEVICE are re-raised.\n\nI have also fixed the line wrapping. Do tell me If I missed something.\n\nI agree with you regarding adding a startup check for misconfig as a follow up patch.\n\nI have also not addressed sean\u0027s comment on https://review.opendev.org/c/openstack/nova/+/995840/comment/43ba3402_ec3df118/ , will do a follow up if you are ok with that.","commit_id":"d0cd8bbb3ec1c6c1cbfaac75c12dbe6b1484a8a9"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"67c13ec190b19a1fab296d5fe19d8bc9e4ffc9a9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"a743cb04_3d2bc235","updated":"2026-08-20 18:53:46.000000000","message":"Updates look good to me, thanks","commit_id":"323734dae0d9d4757b498ee66e5d7474ee128b5d"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"ae2376d4dde334679e8ae96ef46c17a618a506fa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"a52d2013_80e31f25","updated":"2026-08-19 08:59:18.000000000","message":"recheck  nova.tests.functional.test_graceful_shutdown.TestComputeGracefulShutdown.test_live_migration_source_compute_graceful_shutdowntest failure","commit_id":"323734dae0d9d4757b498ee66e5d7474ee128b5d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d61e190123df408fc371c024e79a4b172fddc132","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"e7654688_d45b8c8e","updated":"2026-08-21 18:52:45.000000000","message":"this looks correct to me\nim allitel to tired to +w this this evening so i will reviw this again with a clear mind on monday.","commit_id":"323734dae0d9d4757b498ee66e5d7474ee128b5d"}],"nova/tests/fixtures/__init__.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6e01edb085c375db1fab1c37fa832ca68b19dfcd","unresolved":true,"context_lines":[{"line_number":14,"context_line":"from .cinder import CinderFixture  # noqa: F401, H304"},{"line_number":15,"context_line":"from .conf import ConfFixture  # noqa: F401, H304, F403"},{"line_number":16,"context_line":"from .cyborg import CyborgFixture  # noqa: F401, H304"},{"line_number":17,"context_line":"from .cyborg import get_mdev_arqs  # noqa: F401, H304"},{"line_number":18,"context_line":"from .filesystem import SysFileSystemFixture  # noqa: F401, H304"},{"line_number":19,"context_line":"from .filesystem import TempFileSystemFixture  # noqa: F401, H304"},{"line_number":20,"context_line":"from .glance import GlanceFixture  # noqa: F401, H304"}],"source_content_type":"text/x-python","patch_set":6,"id":"77f76bfc_66c827ba","line":17,"updated":"2026-08-04 13:52:48.000000000","message":"we really shoudl not need to do this\n\nyou shoudl jsut use this vai \n\nfrom nova.fixture import cyborg\ncyborg.get_mdev_arqs ...\n\nwe shoudl not need to rexport these but i think this was previosuly done becuase thing were moved?\n\nyou could also just make this a static method on the CyborgFixture","commit_id":"ff3648078fd991ed4d4ebe17befbce93d25d3e56"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"e19bd25a5cecc4e18e59c373657c072baf1c45a3","unresolved":true,"context_lines":[{"line_number":14,"context_line":"from .cinder import CinderFixture  # noqa: F401, H304"},{"line_number":15,"context_line":"from .conf import ConfFixture  # noqa: F401, H304, F403"},{"line_number":16,"context_line":"from .cyborg import CyborgFixture  # noqa: F401, H304"},{"line_number":17,"context_line":"from .cyborg import get_mdev_arqs  # noqa: F401, H304"},{"line_number":18,"context_line":"from .filesystem import SysFileSystemFixture  # noqa: F401, H304"},{"line_number":19,"context_line":"from .filesystem import TempFileSystemFixture  # noqa: F401, H304"},{"line_number":20,"context_line":"from .glance import GlanceFixture  # noqa: F401, H304"}],"source_content_type":"text/x-python","patch_set":6,"id":"3b161a9c_e791ab31","line":17,"in_reply_to":"77f76bfc_66c827ba","updated":"2026-08-04 16:13:14.000000000","message":"right, this is not needed, we can just import the function from the fixtures/cyborg module. Claude just followed the pattern used here and I missed it, my bad","commit_id":"ff3648078fd991ed4d4ebe17befbce93d25d3e56"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"dbe5bd5dfcba98415f82373ac3716547e22e4a3e","unresolved":true,"context_lines":[{"line_number":7968,"context_line":"                ahi[\u0027device\u0027], ahi[\u0027function\u0027])"},{"line_number":7969,"context_line":"            self._warn_if_nova_managed(ahi)"},{"line_number":7970,"context_line":"            asked_type \u003d ahi[\u0027asked_type\u0027]"},{"line_number":7971,"context_line":"            mdev_uuid \u003d arq.get(\u0027attach_handle_uuid\u0027)"},{"line_number":7972,"context_line":"            # On hard reboot the mdev already exists as a persistent"},{"line_number":7973,"context_line":"            # device so we only need to create it on the first spawn."},{"line_number":7974,"context_line":"            dev_name \u003d \"{}_{}_{}_{}_{}\".format("}],"source_content_type":"text/x-python","patch_set":14,"id":"e4c4a086_21805d48","line":7971,"range":{"start_line":7971,"start_character":24,"end_line":7971,"end_character":53},"updated":"2026-07-30 22:21:02.000000000","message":"If we can assume this key is present it\u0027s probably better to go ahead and access it like `arq[\u0027attach_handle_uuid\u0027]` similar to other examples in this file. That way it would fail fast with KeyError if for some reason it isn\u0027t there instead of going farther with None.","commit_id":"c12b44011349d2e8656e630ea23be63f63e22ec3"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"1605958db30f4722a8de09e9c016a1c5c903fcff","unresolved":false,"context_lines":[{"line_number":7968,"context_line":"                ahi[\u0027device\u0027], ahi[\u0027function\u0027])"},{"line_number":7969,"context_line":"            self._warn_if_nova_managed(ahi)"},{"line_number":7970,"context_line":"            asked_type \u003d ahi[\u0027asked_type\u0027]"},{"line_number":7971,"context_line":"            mdev_uuid \u003d arq.get(\u0027attach_handle_uuid\u0027)"},{"line_number":7972,"context_line":"            # On hard reboot the mdev already exists as a persistent"},{"line_number":7973,"context_line":"            # device so we only need to create it on the first spawn."},{"line_number":7974,"context_line":"            dev_name \u003d \"{}_{}_{}_{}_{}\".format("}],"source_content_type":"text/x-python","patch_set":14,"id":"3950cbd8_f04441fe","line":7971,"range":{"start_line":7971,"start_character":24,"end_line":7971,"end_character":53},"in_reply_to":"e4c4a086_21805d48","updated":"2026-07-31 09:31:23.000000000","message":"Done","commit_id":"c12b44011349d2e8656e630ea23be63f63e22ec3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"dbe5bd5dfcba98415f82373ac3716547e22e4a3e","unresolved":true,"context_lines":[{"line_number":7977,"context_line":"                ahi[\u0027device\u0027], ahi[\u0027function\u0027])"},{"line_number":7978,"context_line":"            try:"},{"line_number":7979,"context_line":"                self._host.device_lookup_by_name(dev_name)"},{"line_number":7980,"context_line":"            except libvirt.libvirtError:"},{"line_number":7981,"context_line":"                mdev_uuid \u003d self._create_mdev("},{"line_number":7982,"context_line":"                    parent_dev_name, asked_type, uuid\u003dmdev_uuid)"},{"line_number":7983,"context_line":"            mdev \u003d vconfig.LibvirtConfigGuestHostdevMDEV()"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a3e4f55_6a416e5b","line":7980,"updated":"2026-07-30 22:21:02.000000000","message":"I think we would want to be more specific with the error type here. The libvirt call could fail for any number of reasons that are not just that the device wasn\u0027t found (like a connection error).\n\nSomething like for example:\n```\n  try:\n      self._host.device_lookup_by_name(devname)\n  except libvirt.libvirtError as ex:\n      if ex.get_error_code() !\u003d libvirt.VIR_ERR_NO_NODE_DEVICE:\n          raise\n```","commit_id":"c12b44011349d2e8656e630ea23be63f63e22ec3"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"1605958db30f4722a8de09e9c016a1c5c903fcff","unresolved":false,"context_lines":[{"line_number":7977,"context_line":"                ahi[\u0027device\u0027], ahi[\u0027function\u0027])"},{"line_number":7978,"context_line":"            try:"},{"line_number":7979,"context_line":"                self._host.device_lookup_by_name(dev_name)"},{"line_number":7980,"context_line":"            except libvirt.libvirtError:"},{"line_number":7981,"context_line":"                mdev_uuid \u003d self._create_mdev("},{"line_number":7982,"context_line":"                    parent_dev_name, asked_type, uuid\u003dmdev_uuid)"},{"line_number":7983,"context_line":"            mdev \u003d vconfig.LibvirtConfigGuestHostdevMDEV()"}],"source_content_type":"text/x-python","patch_set":14,"id":"543e2ff5_878dc5ed","line":7980,"in_reply_to":"1a3e4f55_6a416e5b","updated":"2026-07-31 09:31:23.000000000","message":"Done","commit_id":"c12b44011349d2e8656e630ea23be63f63e22ec3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6e01edb085c375db1fab1c37fa832ca68b19dfcd","unresolved":true,"context_lines":[{"line_number":4295,"context_line":"                arq[\u0027attach_handle_uuid\u0027] for arq in accel_info"},{"line_number":4296,"context_line":"                if arq.get(\u0027attach_handle_type\u0027) \u003d\u003d \u0027MDEV\u0027"},{"line_number":4297,"context_line":"            }"},{"line_number":4298,"context_line":"            mdevs \u003d [m for m in mdevs if m not in cyborg_mdev_uuids]"},{"line_number":4299,"context_line":""},{"line_number":4300,"context_line":"        # NOTE(vish): This could generate the wrong device_format if we are"},{"line_number":4301,"context_line":"        #             using the raw backend and the images don\u0027t exist yet."}],"source_content_type":"text/x-python","patch_set":18,"id":"6e76454f_726be42c","line":4298,"updated":"2026-08-04 13:52:48.000000000","message":"+1 use of set comprehension for efficient membership test\nhowever this is where you should be allcoating the cyborg mdevs\ni.e. actully using libvirt to create them just as nova dose for its own above.","commit_id":"bf82b5fb8b367d58f477bc4a2bb452aa3bb45934"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"e19bd25a5cecc4e18e59c373657c072baf1c45a3","unresolved":true,"context_lines":[{"line_number":4295,"context_line":"                arq[\u0027attach_handle_uuid\u0027] for arq in accel_info"},{"line_number":4296,"context_line":"                if arq.get(\u0027attach_handle_type\u0027) \u003d\u003d \u0027MDEV\u0027"},{"line_number":4297,"context_line":"            }"},{"line_number":4298,"context_line":"            mdevs \u003d [m for m in mdevs if m not in cyborg_mdev_uuids]"},{"line_number":4299,"context_line":""},{"line_number":4300,"context_line":"        # NOTE(vish): This could generate the wrong device_format if we are"},{"line_number":4301,"context_line":"        #             using the raw backend and the images don\u0027t exist yet."}],"source_content_type":"text/x-python","patch_set":18,"id":"e114103b_38b572a7","line":4298,"in_reply_to":"6e76454f_726be42c","updated":"2026-08-04 16:13:14.000000000","message":"ack, moved the creation here in the new patchset","commit_id":"bf82b5fb8b367d58f477bc4a2bb452aa3bb45934"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2f439dfa93e2a5fe3e6a7e518743980a6399f969","unresolved":false,"context_lines":[{"line_number":4295,"context_line":"                arq[\u0027attach_handle_uuid\u0027] for arq in accel_info"},{"line_number":4296,"context_line":"                if arq.get(\u0027attach_handle_type\u0027) \u003d\u003d \u0027MDEV\u0027"},{"line_number":4297,"context_line":"            }"},{"line_number":4298,"context_line":"            mdevs \u003d [m for m in mdevs if m not in cyborg_mdev_uuids]"},{"line_number":4299,"context_line":""},{"line_number":4300,"context_line":"        # NOTE(vish): This could generate the wrong device_format if we are"},{"line_number":4301,"context_line":"        #             using the raw backend and the images don\u0027t exist yet."}],"source_content_type":"text/x-python","patch_set":18,"id":"646e10ef_78bbe6cb","line":4298,"in_reply_to":"e114103b_38b572a7","updated":"2026-08-04 17:04:07.000000000","message":"Done","commit_id":"bf82b5fb8b367d58f477bc4a2bb452aa3bb45934"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6e01edb085c375db1fab1c37fa832ca68b19dfcd","unresolved":true,"context_lines":[{"line_number":7826,"context_line":"        self._guest_add_pci_devices(guest, instance)"},{"line_number":7827,"context_line":""},{"line_number":7828,"context_line":"        pci_arq_list \u003d []"},{"line_number":7829,"context_line":"        mdev_arq_list \u003d []"},{"line_number":7830,"context_line":"        if accel_info:"},{"line_number":7831,"context_line":"            unsupported_types \u003d set()"},{"line_number":7832,"context_line":"            for arq in accel_info:"}],"source_content_type":"text/x-python","patch_set":18,"id":"e6674e14_aaf74f3d","line":7829,"range":{"start_line":7829,"start_character":0,"end_line":7829,"end_character":26},"updated":"2026-08-04 13:52:48.000000000","message":"we do not need this","commit_id":"bf82b5fb8b367d58f477bc4a2bb452aa3bb45934"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"e19bd25a5cecc4e18e59c373657c072baf1c45a3","unresolved":false,"context_lines":[{"line_number":7826,"context_line":"        self._guest_add_pci_devices(guest, instance)"},{"line_number":7827,"context_line":""},{"line_number":7828,"context_line":"        pci_arq_list \u003d []"},{"line_number":7829,"context_line":"        mdev_arq_list \u003d []"},{"line_number":7830,"context_line":"        if accel_info:"},{"line_number":7831,"context_line":"            unsupported_types \u003d set()"},{"line_number":7832,"context_line":"            for arq in accel_info:"}],"source_content_type":"text/x-python","patch_set":18,"id":"e691eabb_395eaf1b","line":7829,"range":{"start_line":7829,"start_character":0,"end_line":7829,"end_character":26},"in_reply_to":"e6674e14_aaf74f3d","updated":"2026-08-04 16:13:14.000000000","message":"Done","commit_id":"bf82b5fb8b367d58f477bc4a2bb452aa3bb45934"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6e01edb085c375db1fab1c37fa832ca68b19dfcd","unresolved":true,"context_lines":[{"line_number":7834,"context_line":"                if ah_type \u003d\u003d \u0027PCI\u0027:"},{"line_number":7835,"context_line":"                    pci_arq_list.append(arq)"},{"line_number":7836,"context_line":"                elif ah_type \u003d\u003d \u0027MDEV\u0027:"},{"line_number":7837,"context_line":"                    mdev_arq_list.append(arq)"},{"line_number":7838,"context_line":"                else:"},{"line_number":7839,"context_line":"                    unsupported_types.add(ah_type)"},{"line_number":7840,"context_line":"            if unsupported_types:"}],"source_content_type":"text/x-python","patch_set":18,"id":"45eb874f_d3e0acf0","line":7837,"range":{"start_line":7837,"start_character":20,"end_line":7837,"end_character":45},"updated":"2026-08-04 13:52:48.000000000","message":"we should just append the uuid to mdevs","commit_id":"bf82b5fb8b367d58f477bc4a2bb452aa3bb45934"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"e19bd25a5cecc4e18e59c373657c072baf1c45a3","unresolved":false,"context_lines":[{"line_number":7834,"context_line":"                if ah_type \u003d\u003d \u0027PCI\u0027:"},{"line_number":7835,"context_line":"                    pci_arq_list.append(arq)"},{"line_number":7836,"context_line":"                elif ah_type \u003d\u003d \u0027MDEV\u0027:"},{"line_number":7837,"context_line":"                    mdev_arq_list.append(arq)"},{"line_number":7838,"context_line":"                else:"},{"line_number":7839,"context_line":"                    unsupported_types.add(ah_type)"},{"line_number":7840,"context_line":"            if unsupported_types:"}],"source_content_type":"text/x-python","patch_set":18,"id":"b0c093c8_7d11bf42","line":7837,"range":{"start_line":7837,"start_character":20,"end_line":7837,"end_character":45},"in_reply_to":"45eb874f_d3e0acf0","updated":"2026-08-04 16:13:14.000000000","message":"Done","commit_id":"bf82b5fb8b367d58f477bc4a2bb452aa3bb45934"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6e01edb085c375db1fab1c37fa832ca68b19dfcd","unresolved":true,"context_lines":[{"line_number":7845,"context_line":"                    instance.uuid, unsupported_types)"},{"line_number":7846,"context_line":""},{"line_number":7847,"context_line":"        self._guest_add_accel_pci_devices(guest, pci_arq_list)"},{"line_number":7848,"context_line":"        self._guest_add_cyborg_mdevs(guest, mdev_arq_list)"},{"line_number":7849,"context_line":""},{"line_number":7850,"context_line":"        self._guest_add_virtiofs_for_share(guest, instance, share_info)"},{"line_number":7851,"context_line":""},{"line_number":7852,"context_line":"        self._guest_add_watchdog_action(guest, flavor, image_meta)"},{"line_number":7853,"context_line":""},{"line_number":7854,"context_line":"        self._guest_add_memory_balloon(guest)"},{"line_number":7855,"context_line":""},{"line_number":7856,"context_line":"        if mdevs:"},{"line_number":7857,"context_line":"            self._guest_add_mdevs(guest, mdevs)"},{"line_number":7858,"context_line":""},{"line_number":7859,"context_line":"        if me_config:"},{"line_number":7860,"context_line":"            self._guest_configure_mem_encryption(instance, guest,"}],"source_content_type":"text/x-python","patch_set":18,"id":"eb42a42c_0a44c7d2","line":7857,"range":{"start_line":7848,"start_character":0,"end_line":7857,"end_character":47},"updated":"2026-08-04 13:52:48.000000000","message":"i dont think we need to have two diffenr fucntion here.\n\nthis is the xml generation and for nova managed mevs we create them beofre the xml generation not during it.\n\nso i think we shoudl be following the same pattern for cybrog.","commit_id":"bf82b5fb8b367d58f477bc4a2bb452aa3bb45934"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2f439dfa93e2a5fe3e6a7e518743980a6399f969","unresolved":false,"context_lines":[{"line_number":7845,"context_line":"                    instance.uuid, unsupported_types)"},{"line_number":7846,"context_line":""},{"line_number":7847,"context_line":"        self._guest_add_accel_pci_devices(guest, pci_arq_list)"},{"line_number":7848,"context_line":"        self._guest_add_cyborg_mdevs(guest, mdev_arq_list)"},{"line_number":7849,"context_line":""},{"line_number":7850,"context_line":"        self._guest_add_virtiofs_for_share(guest, instance, share_info)"},{"line_number":7851,"context_line":""},{"line_number":7852,"context_line":"        self._guest_add_watchdog_action(guest, flavor, image_meta)"},{"line_number":7853,"context_line":""},{"line_number":7854,"context_line":"        self._guest_add_memory_balloon(guest)"},{"line_number":7855,"context_line":""},{"line_number":7856,"context_line":"        if mdevs:"},{"line_number":7857,"context_line":"            self._guest_add_mdevs(guest, mdevs)"},{"line_number":7858,"context_line":""},{"line_number":7859,"context_line":"        if me_config:"},{"line_number":7860,"context_line":"            self._guest_configure_mem_encryption(instance, guest,"}],"source_content_type":"text/x-python","patch_set":18,"id":"5bbad78d_e2a8c5b0","line":7857,"range":{"start_line":7848,"start_character":0,"end_line":7857,"end_character":47},"in_reply_to":"ae47c5d4_0d9b2f28","updated":"2026-08-04 17:04:07.000000000","message":"Done","commit_id":"bf82b5fb8b367d58f477bc4a2bb452aa3bb45934"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"e19bd25a5cecc4e18e59c373657c072baf1c45a3","unresolved":true,"context_lines":[{"line_number":7845,"context_line":"                    instance.uuid, unsupported_types)"},{"line_number":7846,"context_line":""},{"line_number":7847,"context_line":"        self._guest_add_accel_pci_devices(guest, pci_arq_list)"},{"line_number":7848,"context_line":"        self._guest_add_cyborg_mdevs(guest, mdev_arq_list)"},{"line_number":7849,"context_line":""},{"line_number":7850,"context_line":"        self._guest_add_virtiofs_for_share(guest, instance, share_info)"},{"line_number":7851,"context_line":""},{"line_number":7852,"context_line":"        self._guest_add_watchdog_action(guest, flavor, image_meta)"},{"line_number":7853,"context_line":""},{"line_number":7854,"context_line":"        self._guest_add_memory_balloon(guest)"},{"line_number":7855,"context_line":""},{"line_number":7856,"context_line":"        if mdevs:"},{"line_number":7857,"context_line":"            self._guest_add_mdevs(guest, mdevs)"},{"line_number":7858,"context_line":""},{"line_number":7859,"context_line":"        if me_config:"},{"line_number":7860,"context_line":"            self._guest_configure_mem_encryption(instance, guest,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ae47c5d4_0d9b2f28","line":7857,"range":{"start_line":7848,"start_character":0,"end_line":7857,"end_character":47},"in_reply_to":"eb42a42c_0a44c7d2","updated":"2026-08-04 16:13:14.000000000","message":"done, the mdev addition to the xml is now the same for Nova and Cyborg","commit_id":"bf82b5fb8b367d58f477bc4a2bb452aa3bb45934"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6e01edb085c375db1fab1c37fa832ca68b19dfcd","unresolved":true,"context_lines":[{"line_number":7969,"context_line":"            self._warn_if_nova_managed(ahi)"},{"line_number":7970,"context_line":"            asked_type \u003d ahi[\u0027asked_type\u0027]"},{"line_number":7971,"context_line":"            mdev_uuid \u003d arq[\u0027attach_handle_uuid\u0027]"},{"line_number":7972,"context_line":"            # On hard reboot the mdev already exists as a persistent"},{"line_number":7973,"context_line":"            # device so we only need to create it on the first spawn."},{"line_number":7974,"context_line":"            dev_name \u003d \"{}_{}_{}_{}_{}\".format("},{"line_number":7975,"context_line":"                libvirt_utils.mdev_uuid2name(mdev_uuid),"},{"line_number":7976,"context_line":"                ahi[\u0027domain\u0027], ahi[\u0027bus\u0027],"},{"line_number":7977,"context_line":"                ahi[\u0027device\u0027], ahi[\u0027function\u0027])"},{"line_number":7978,"context_line":"            try:"},{"line_number":7979,"context_line":"                self._host.device_lookup_by_name(dev_name)"},{"line_number":7980,"context_line":"            except libvirt.libvirtError as ex:"},{"line_number":7981,"context_line":"                if ex.get_error_code() !\u003d libvirt.VIR_ERR_NO_NODE_DEVICE:"},{"line_number":7982,"context_line":"                    raise"},{"line_number":7983,"context_line":"                mdev_uuid \u003d self._create_mdev("},{"line_number":7984,"context_line":"                    parent_dev_name, asked_type, uuid\u003dmdev_uuid)"},{"line_number":7985,"context_line":"            mdev \u003d vconfig.LibvirtConfigGuestHostdevMDEV()"},{"line_number":7986,"context_line":"            mdev.uuid \u003d mdev_uuid"},{"line_number":7987,"context_line":"            guest.add_device(mdev)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3b4521d0_6022a454","line":7984,"range":{"start_line":7972,"start_character":13,"end_line":7984,"end_character":64},"updated":"2026-08-04 13:52:48.000000000","message":"the creation of the mdevs shoudl happen before we call _get_guest_xml or _get_guest_config following the same pattern as nova \n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L4290-L4304\n\ni woudl alos try to create it and catch the excption if one is raised and ignore it instead of this approch but both work\n\nim not actully sure if _create_mdev will raise here\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L9306","commit_id":"bf82b5fb8b367d58f477bc4a2bb452aa3bb45934"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"e19bd25a5cecc4e18e59c373657c072baf1c45a3","unresolved":true,"context_lines":[{"line_number":7969,"context_line":"            self._warn_if_nova_managed(ahi)"},{"line_number":7970,"context_line":"            asked_type \u003d ahi[\u0027asked_type\u0027]"},{"line_number":7971,"context_line":"            mdev_uuid \u003d arq[\u0027attach_handle_uuid\u0027]"},{"line_number":7972,"context_line":"            # On hard reboot the mdev already exists as a persistent"},{"line_number":7973,"context_line":"            # device so we only need to create it on the first spawn."},{"line_number":7974,"context_line":"            dev_name \u003d \"{}_{}_{}_{}_{}\".format("},{"line_number":7975,"context_line":"                libvirt_utils.mdev_uuid2name(mdev_uuid),"},{"line_number":7976,"context_line":"                ahi[\u0027domain\u0027], ahi[\u0027bus\u0027],"},{"line_number":7977,"context_line":"                ahi[\u0027device\u0027], ahi[\u0027function\u0027])"},{"line_number":7978,"context_line":"            try:"},{"line_number":7979,"context_line":"                self._host.device_lookup_by_name(dev_name)"},{"line_number":7980,"context_line":"            except libvirt.libvirtError as ex:"},{"line_number":7981,"context_line":"                if ex.get_error_code() !\u003d libvirt.VIR_ERR_NO_NODE_DEVICE:"},{"line_number":7982,"context_line":"                    raise"},{"line_number":7983,"context_line":"                mdev_uuid \u003d self._create_mdev("},{"line_number":7984,"context_line":"                    parent_dev_name, asked_type, uuid\u003dmdev_uuid)"},{"line_number":7985,"context_line":"            mdev \u003d vconfig.LibvirtConfigGuestHostdevMDEV()"},{"line_number":7986,"context_line":"            mdev.uuid \u003d mdev_uuid"},{"line_number":7987,"context_line":"            guest.add_device(mdev)"}],"source_content_type":"text/x-python","patch_set":18,"id":"a803da90_c281fbcb","line":7984,"range":{"start_line":7972,"start_character":13,"end_line":7984,"end_character":64},"in_reply_to":"3b4521d0_6022a454","updated":"2026-08-04 16:13:14.000000000","message":"got it, I\u0027ve moved the creation earlier in the spawn method","commit_id":"bf82b5fb8b367d58f477bc4a2bb452aa3bb45934"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2f439dfa93e2a5fe3e6a7e518743980a6399f969","unresolved":false,"context_lines":[{"line_number":7969,"context_line":"            self._warn_if_nova_managed(ahi)"},{"line_number":7970,"context_line":"            asked_type \u003d ahi[\u0027asked_type\u0027]"},{"line_number":7971,"context_line":"            mdev_uuid \u003d arq[\u0027attach_handle_uuid\u0027]"},{"line_number":7972,"context_line":"            # On hard reboot the mdev already exists as a persistent"},{"line_number":7973,"context_line":"            # device so we only need to create it on the first spawn."},{"line_number":7974,"context_line":"            dev_name \u003d \"{}_{}_{}_{}_{}\".format("},{"line_number":7975,"context_line":"                libvirt_utils.mdev_uuid2name(mdev_uuid),"},{"line_number":7976,"context_line":"                ahi[\u0027domain\u0027], ahi[\u0027bus\u0027],"},{"line_number":7977,"context_line":"                ahi[\u0027device\u0027], ahi[\u0027function\u0027])"},{"line_number":7978,"context_line":"            try:"},{"line_number":7979,"context_line":"                self._host.device_lookup_by_name(dev_name)"},{"line_number":7980,"context_line":"            except libvirt.libvirtError as ex:"},{"line_number":7981,"context_line":"                if ex.get_error_code() !\u003d libvirt.VIR_ERR_NO_NODE_DEVICE:"},{"line_number":7982,"context_line":"                    raise"},{"line_number":7983,"context_line":"                mdev_uuid \u003d self._create_mdev("},{"line_number":7984,"context_line":"                    parent_dev_name, asked_type, uuid\u003dmdev_uuid)"},{"line_number":7985,"context_line":"            mdev \u003d vconfig.LibvirtConfigGuestHostdevMDEV()"},{"line_number":7986,"context_line":"            mdev.uuid \u003d mdev_uuid"},{"line_number":7987,"context_line":"            guest.add_device(mdev)"}],"source_content_type":"text/x-python","patch_set":18,"id":"8ad3a76f_ba9a83e9","line":7984,"range":{"start_line":7972,"start_character":13,"end_line":7984,"end_character":64},"in_reply_to":"a803da90_c281fbcb","updated":"2026-08-04 17:04:07.000000000","message":"Done","commit_id":"bf82b5fb8b367d58f477bc4a2bb452aa3bb45934"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2f439dfa93e2a5fe3e6a7e518743980a6399f969","unresolved":true,"context_lines":[{"line_number":4976,"context_line":"        self._ensure_console_log_for_instance(instance)"},{"line_number":4977,"context_line":""},{"line_number":4978,"context_line":"        # Does the guest need to be assigned some vGPU mediated devices ?"},{"line_number":4979,"context_line":"        mdevs \u003d self._allocate_mdevs(allocations)"},{"line_number":4980,"context_line":"        if accel_info:"},{"line_number":4981,"context_line":"            mdevs.extend(self._allocate_cyborg_mdevs(accel_info))"},{"line_number":4982,"context_line":""},{"line_number":4983,"context_line":"        # If the guest needs a vTPM, _get_guest_xml needs its secret to exist"},{"line_number":4984,"context_line":"        # and its uuid to be registered in the instance prior to _get_guest_xml"}],"source_content_type":"text/x-python","patch_set":19,"id":"43ba3402_ec3df118","line":4981,"range":{"start_line":4979,"start_character":1,"end_line":4981,"end_character":65},"updated":"2026-08-04 17:04:07.000000000","message":"this shoudl work\n\nim tempeted to move the iff into the function call\n\n\n\n```suggestion\n        mdevs \u003d self._allocate_mdevs(allocations)\n        mdevs.extend(self._allocate_cyborg_mdevs(accel_info))\n```\n\ngiven _allocate_cyborg_mdevs returns [] by defualt \n\n```\n\u003e\u003e\u003e a\u003d[1];\n\u003e\u003e\u003e a.extend([])\n\u003e\u003e\u003e a\n[1]\n\u003e\u003e\u003e a.extend([2])\n\u003e\u003e\u003e a\n[1, 2]\n\u003e\u003e\u003e\n```\n\njust for the symetry of it but that is not worth a respin","commit_id":"51887fcd8e849fe628f9d0db8beffbb40f3fac5e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4853fd8dd0d18b484fc126f4a94eba479df514d4","unresolved":true,"context_lines":[{"line_number":8006,"context_line":"                \u0027GPU %s is managed by both Cyborg and Nova \u0027"},{"line_number":8007,"context_line":"                \u0027(via [mdev_*] configuration). This can lead \u0027"},{"line_number":8008,"context_line":"                \u0027to resource contention. Consider removing this \u0027"},{"line_number":8009,"context_line":"                \u0027device from Nova vGPU configuration.\u0027, pci_id)"},{"line_number":8010,"context_line":""},{"line_number":8011,"context_line":"    @staticmethod"},{"line_number":8012,"context_line":"    def _guest_add_spice_channel(guest):"}],"source_content_type":"text/x-python","patch_set":20,"id":"595f7d33_34d7b363","line":8009,"updated":"2026-08-07 14:08:45.000000000","message":"this exception is raised very late, only when we want to boot a VM using an incorrectly set PCI device being used by both nova and cyborg.\n\nI think we agreed on the spec that this check should be done at compute startup. There is a whole undiscussed question about whether we should leave support for a nova-compute having vGPUs being a mix of Cyborg-managed and nova-managed mdevs, but this leaves a complication where we need to detect any configuration mistake the earlier then.","commit_id":"c4923e83079c99a32bf0e15a0171ee467d508ab6"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d03b9e3690f8561526fff6b12e05df07ea9f531a","unresolved":true,"context_lines":[{"line_number":8006,"context_line":"                \u0027GPU %s is managed by both Cyborg and Nova \u0027"},{"line_number":8007,"context_line":"                \u0027(via [mdev_*] configuration). This can lead \u0027"},{"line_number":8008,"context_line":"                \u0027to resource contention. Consider removing this \u0027"},{"line_number":8009,"context_line":"                \u0027device from Nova vGPU configuration.\u0027, pci_id)"},{"line_number":8010,"context_line":""},{"line_number":8011,"context_line":"    @staticmethod"},{"line_number":8012,"context_line":"    def _guest_add_spice_channel(guest):"}],"source_content_type":"text/x-python","patch_set":20,"id":"2ffb9739_4e92b847","line":8009,"in_reply_to":"3208d7e8_b61f144d","updated":"2026-08-18 18:13:08.000000000","message":"I have been thinking about this and I\u0027m not sure a startup check is practical here. This check compares Nova\u0027s config (pgpu_type_mapping) against information that comes from Cyborg (the ARQ\u0027s attach_handle_info). At startup, Nova doesn\u0027t know which specific devices Cyborg manages without either calling the Cyborg API (which adds a startup dependency on Cyborg being available) or parsing Cyborg\u0027s provider names out of Placement (which couples Nova to Cyborg\u0027s naming convention).\n\nA coarser check to look for any OWNER_CYBORG + VGPU providers in the tree alongside Nova enabled_mdev_types would not be warning material because IIUC it would be pretty normal for there to be some devices managed by Nova and others managed by Cyborg.\n\nThe misconfiguration this catches requires an operator to explicitly put the same PCI address in both Nova\u0027s [mdev_*] config and Cyborg\u0027s device config, which seems fairly low probability. Given the low probability vs the complexity of a startup check, this seems a reasonable tradeoff to have a later check IMHO.\n\nObviously if this becomes a pain point in practice, the tradeoff would change and adding a (complex) startup check would probably be warranted.","commit_id":"c4923e83079c99a32bf0e15a0171ee467d508ab6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3dec0b79e03abbd6703764e731066cc6f63dc8da","unresolved":true,"context_lines":[{"line_number":8006,"context_line":"                \u0027GPU %s is managed by both Cyborg and Nova \u0027"},{"line_number":8007,"context_line":"                \u0027(via [mdev_*] configuration). This can lead \u0027"},{"line_number":8008,"context_line":"                \u0027to resource contention. Consider removing this \u0027"},{"line_number":8009,"context_line":"                \u0027device from Nova vGPU configuration.\u0027, pci_id)"},{"line_number":8010,"context_line":""},{"line_number":8011,"context_line":"    @staticmethod"},{"line_number":8012,"context_line":"    def _guest_add_spice_channel(guest):"}],"source_content_type":"text/x-python","patch_set":20,"id":"fe4bc14e_28c09af1","line":8009,"in_reply_to":"595f7d33_34d7b363","updated":"2026-08-07 16:32:38.000000000","message":"no we did not i explicitly objected to doing this at startup\n\n\nhttps://specs.openstack.org/openstack/nova-specs/specs/2026.2/approved/cyborg-vgpu-support.html#:~:text\u003dAdditionally,services\n```\nAdditionally, we will add a check while composing the xml to ensure the device\nbeing used is not also configured to be used by Nova. In such a case, we will log\na warning to inform the operator that the device is misconfigured and it should be\nused exclusively by Nova or Cyborg, but that it can’t be used by both services.\n```\n\nand yes coeixting wehere you have mdevs provdie by nova and cyborg on the same host or even in the same vm shoudl eb supported. that not a topci that went undicussed we talk about that and added a node about it in the other deperer impact section\n\nhttps://specs.openstack.org/openstack/nova-specs/specs/2026.2/approved/cyborg-vgpu-support.html#other-deployer-impact\n\n```\nWhile Nova-managed vGPUs and Cyborg-managed vGPUs can coexist on the same host, avoid this configuration to minimize the risk of accidental device sharing.\n```\n\nbut fundemtally the rist of that is very low unless you expclity miss cofnigure both service to shrar devices.","commit_id":"c4923e83079c99a32bf0e15a0171ee467d508ab6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a53b5cf74e879af191fff96918f9ee57290a190","unresolved":true,"context_lines":[{"line_number":8006,"context_line":"                \u0027GPU %s is managed by both Cyborg and Nova \u0027"},{"line_number":8007,"context_line":"                \u0027(via [mdev_*] configuration). This can lead \u0027"},{"line_number":8008,"context_line":"                \u0027to resource contention. Consider removing this \u0027"},{"line_number":8009,"context_line":"                \u0027device from Nova vGPU configuration.\u0027, pci_id)"},{"line_number":8010,"context_line":""},{"line_number":8011,"context_line":"    @staticmethod"},{"line_number":8012,"context_line":"    def _guest_add_spice_channel(guest):"}],"source_content_type":"text/x-python","patch_set":20,"id":"3208d7e8_b61f144d","line":8009,"in_reply_to":"e0e3609b_41955297","updated":"2026-08-10 12:55:49.000000000","message":"how woudl that check work in your view?\ni recently added a new virt dirver method to allow virt driver to process instnace on startup in a drvier specirc way\n\nthat provides all of the instance object to the driver during the compute manager init host after we have dont the hsotname/stable uuid checks\n\nare you suggestion the libvirt driver would check each of the domains to see if they refence a nova managed mdev by checkign the mdev uuid in teh doman, compartin gthat to the list of parent devices asigned for nova to mange in its cofnig and then checkign the flavor to see if the domain recived the mdev form the nova flavor rather then cyborg?\n\n\nwhiel that is proably doable it seam quite complex to add and maintian and not very light wight so im wonderign what you had in mind?","commit_id":"c4923e83079c99a32bf0e15a0171ee467d508ab6"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"660c07e7facbd26a25a7c41577fdbdfa668cc32e","unresolved":true,"context_lines":[{"line_number":8006,"context_line":"                \u0027GPU %s is managed by both Cyborg and Nova \u0027"},{"line_number":8007,"context_line":"                \u0027(via [mdev_*] configuration). This can lead \u0027"},{"line_number":8008,"context_line":"                \u0027to resource contention. Consider removing this \u0027"},{"line_number":8009,"context_line":"                \u0027device from Nova vGPU configuration.\u0027, pci_id)"},{"line_number":8010,"context_line":""},{"line_number":8011,"context_line":"    @staticmethod"},{"line_number":8012,"context_line":"    def _guest_add_spice_channel(guest):"}],"source_content_type":"text/x-python","patch_set":20,"id":"e0e3609b_41955297","line":8009,"in_reply_to":"fe4bc14e_28c09af1","updated":"2026-08-10 09:34:46.000000000","message":"My bad then if I forgot to raise this point during the spec review, but I\u0027d appreciate if you could do a more preemptive check at startup. I don\u0027t particularly want to hold that patch as it could be done as a follow-up but I\u0027d appreciate if we could have it now in the same series.","commit_id":"c4923e83079c99a32bf0e15a0171ee467d508ab6"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d03b9e3690f8561526fff6b12e05df07ea9f531a","unresolved":true,"context_lines":[{"line_number":7974,"context_line":"                ahi[\u0027domain\u0027], ahi[\u0027bus\u0027],"},{"line_number":7975,"context_line":"                ahi[\u0027device\u0027], ahi[\u0027function\u0027])"},{"line_number":7976,"context_line":"            try:"},{"line_number":7977,"context_line":"                self._host.device_lookup_by_name(dev_name)"},{"line_number":7978,"context_line":"            except libvirt.libvirtError as ex:"},{"line_number":7979,"context_line":"                if ex.get_error_code() !\u003d libvirt.VIR_ERR_NO_NODE_DEVICE:"},{"line_number":7980,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":21,"id":"9b70d7de_b61124a1","line":7977,"updated":"2026-08-18 18:13:08.000000000","message":"I think we are missing test coverage for the successful _allocate_cyborg_mdevs case where this device lookup succeeds. We would want to verify the right UUID is returned and that we did not create a new mdev.","commit_id":"d0cd8bbb3ec1c6c1cbfaac75c12dbe6b1484a8a9"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"fd75b26a833b7a6dfb12bc404aaf086387ea6239","unresolved":true,"context_lines":[{"line_number":7974,"context_line":"                ahi[\u0027domain\u0027], ahi[\u0027bus\u0027],"},{"line_number":7975,"context_line":"                ahi[\u0027device\u0027], ahi[\u0027function\u0027])"},{"line_number":7976,"context_line":"            try:"},{"line_number":7977,"context_line":"                self._host.device_lookup_by_name(dev_name)"},{"line_number":7978,"context_line":"            except libvirt.libvirtError as ex:"},{"line_number":7979,"context_line":"                if ex.get_error_code() !\u003d libvirt.VIR_ERR_NO_NODE_DEVICE:"},{"line_number":7980,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":21,"id":"56443db1_bb51ee1e","line":7977,"in_reply_to":"9b70d7de_b61124a1","updated":"2026-08-19 06:03:46.000000000","message":"I have added `test_allocate_cyborg_mdevs_reuses_existing_devices` test to cover:\n- successful lookup path\n- verifies the returned UUIDs match the ARQ attach handle UUIDs\n- It also verifies _create_mdev() is not called.","commit_id":"d0cd8bbb3ec1c6c1cbfaac75c12dbe6b1484a8a9"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d03b9e3690f8561526fff6b12e05df07ea9f531a","unresolved":true,"context_lines":[{"line_number":7976,"context_line":"            try:"},{"line_number":7977,"context_line":"                self._host.device_lookup_by_name(dev_name)"},{"line_number":7978,"context_line":"            except libvirt.libvirtError as ex:"},{"line_number":7979,"context_line":"                if ex.get_error_code() !\u003d libvirt.VIR_ERR_NO_NODE_DEVICE:"},{"line_number":7980,"context_line":"                    raise"},{"line_number":7981,"context_line":"                self._create_mdev("},{"line_number":7982,"context_line":"                    parent_dev_name, ahi[\u0027asked_type\u0027],"}],"source_content_type":"text/x-python","patch_set":21,"id":"cc206888_61cbe23d","line":7979,"updated":"2026-08-18 18:13:08.000000000","message":"We should also cover this case to verify that libvirt errors other than VIR_ERR_NO_NODE_DEVICE are re-raised.","commit_id":"d0cd8bbb3ec1c6c1cbfaac75c12dbe6b1484a8a9"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"fd75b26a833b7a6dfb12bc404aaf086387ea6239","unresolved":true,"context_lines":[{"line_number":7976,"context_line":"            try:"},{"line_number":7977,"context_line":"                self._host.device_lookup_by_name(dev_name)"},{"line_number":7978,"context_line":"            except libvirt.libvirtError as ex:"},{"line_number":7979,"context_line":"                if ex.get_error_code() !\u003d libvirt.VIR_ERR_NO_NODE_DEVICE:"},{"line_number":7980,"context_line":"                    raise"},{"line_number":7981,"context_line":"                self._create_mdev("},{"line_number":7982,"context_line":"                    parent_dev_name, ahi[\u0027asked_type\u0027],"}],"source_content_type":"text/x-python","patch_set":21,"id":"51a90ec1_3608d961","line":7979,"in_reply_to":"cc206888_61cbe23d","updated":"2026-08-19 06:03:46.000000000","message":"I have added `test_allocate_cyborg_mdevs_reraises_lookup_errors` test which tests a libvirt lookup failure that is not VIR_ERR_NO_NODE_DEVICE, makes sure the error is raised back, and confirms _create_mdev() is not called.","commit_id":"d0cd8bbb3ec1c6c1cbfaac75c12dbe6b1484a8a9"}]}
