)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"99adca2512b64b5f04c6f43d45d88dec671d828e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4134bc1c_918a72f2","updated":"2022-07-18 16:46:02.000000000","message":"Billy, can you please update quickly based on our comments ? If not, I can try to respin soon.\nI have some concern by the unnecessary iteration for every single mdev, but that can be solved later.","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a4b611366343667f0781033f14c5694f1deeac4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"9cbfebca_f21809ee","updated":"2022-05-18 11:36:38.000000000","message":"I have some comments inline also I think we need at least unit tests around the driver change.","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"571187f30290d89c49c7a3821d48df6dc66b717b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b9a0fb31_1e34271a","updated":"2022-07-21 16:24:05.000000000","message":"I quickly wrote a reproducer, would be nice if you could rebase your change on top of this https://review.opendev.org/c/openstack/nova/+/850673","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":10910,"name":"Stig Telfer","email":"stig.openstack@telfer.org","username":"stigtelfer"},"change_message_id":"9b72e30e312ded4e14bd50b26f6becf5d36d83ae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"efe3da14_54f90167","updated":"2022-07-15 10:21:47.000000000","message":"I tested a backport of this patch to Wallaby on CentOS Stream 8 with Libvirt 7.9 using Nvidia RTX 6000 GPUs and it resolved the issue for me.","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":16137,"name":"Tobias Urdin","email":"tobias.urdin@binero.com","username":"tobasco"},"change_message_id":"bea0796dcca767d8770c55a6a1a17c056ce53d6c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b3c874db_56112c4f","updated":"2022-05-12 07:40:49.000000000","message":"Thanks for looking at this Billy! We are facing the same issue.","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":8992,"name":"Billy Olsen","email":"billy.olsen@canonical.com","username":"billy-olsen"},"change_message_id":"15581a22af9cb5618fddb49c4bd12a73285bcc82","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"19144a46_74515cfa","updated":"2022-07-20 03:20:42.000000000","message":"Thanks for the reviews all. I will try to address the feedback at the end of this week at the earliest (apologies its been so long already).\n\nI\u0027ve responded in-line to Sylvain\u0027s most recent comment, and gibi is spot on that it needs more unit tests around the driver.\n\nMy primary focus will be on the missing unit tests and the touchups on the mdev uuid \u003c-\u003e name conversion, unless there\u0027s disagreement there.","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9c4aff70bd11e58e53b08116621d56688f470c68","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"64ea4c50_a9c7e682","updated":"2022-07-12 19:00:58.000000000","message":"sylvain im pretty sure this will fix our downtream mdev reuse issue.\ncan you take a look at this when you are back form pto on thursday.","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":16137,"name":"Tobias Urdin","email":"tobias.urdin@binero.com","username":"tobasco"},"change_message_id":"62b5b057eeb941895192ebe45aeca8cb0d1c9798","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"cbc5a436_cfca0ab9","updated":"2022-05-13 19:30:43.000000000","message":"tested in production on xena","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":8992,"name":"Billy Olsen","email":"billy.olsen@canonical.com","username":"billy-olsen"},"change_message_id":"2c00a8c42bf9209ea9c19df35def2784f3358679","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"dfc3d9a0_b2c497ca","in_reply_to":"b9a0fb31_1e34271a","updated":"2022-07-25 16:25:58.000000000","message":"rebased","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"427d61aeb94f8a50d0f4cbdcce625b882bf2a838","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a71b964f_08f7b66b","updated":"2022-07-26 08:44:23.000000000","message":"Heh, you rebased on my regression test, which is nice, but you forgot to amend it in order to prove you fixed the regression :-) \n\nNo worries, I see this expecting correctly in https://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_544/838976/2/check/nova-tox-functional-py39/5443db2/testr_results.html : the second instance becomes ACTIVE instead of going into ERROR.\nWill just amend this change.","commit_id":"6024bc80fb1f4b41d32829830dbf3e6dea9f97ca"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a35186144bd096f3d95e715c783e95f45917ca5c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"f8299efc_ef378167","updated":"2022-07-27 07:41:59.000000000","message":"I have couple of things inline","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"42dadce349e1f2cfa83fc24c70767857fb3c038d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"79d9d6ea_e1160aaf","updated":"2022-07-26 18:56:52.000000000","message":"Works for me, I just rebased for adding the reproducer fix. Thanks for the hard work.","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0f2471181ded86994722f27565e2f41ad31a6621","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3b442aa9_4616dc21","updated":"2022-07-27 09:36:13.000000000","message":"good points for gibi, let me just know if you can provide a new revision soon.","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":8992,"name":"Billy Olsen","email":"billy.olsen@canonical.com","username":"billy-olsen"},"change_message_id":"c2ef419e50d6b607292c56a64e59b082098e24c5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"9c363450_81bb285e","in_reply_to":"79d9d6ea_e1160aaf","updated":"2022-07-26 20:09:16.000000000","message":"Thanks - apologies for not getting this fixed with the rebase.","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":16137,"name":"Tobias Urdin","email":"tobias.urdin@binero.com","username":"tobasco"},"change_message_id":"443038a50327bfb7140910070439484bba9695dd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"20ba9147_0d5c4179","updated":"2022-10-03 18:17:03.000000000","message":"Anybody feel like fixing what is left to get this merged?","commit_id":"caaf4e85d1d2f1c643b8ee2bceac7ddae43a04f5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"32800722869c22071772ad8673a49b8b69755574","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5c9a31e4_2dd4fb96","updated":"2022-08-02 15:30:23.000000000","message":"I will upgrade my vote once the follow up is posted","commit_id":"caaf4e85d1d2f1c643b8ee2bceac7ddae43a04f5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4e08bba5336c253eba795df5c4a44fbc1da0148b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"118a97c1_160fd3b6","updated":"2022-11-23 16:58:49.000000000","message":"recheck again networking issue","commit_id":"a28b907c4f0dbba6e141a8fbea807e6cb0438977"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e60eda6be517545c9c199f7e25f8506d317d4e54","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"735bcd3f_6728fe7c","updated":"2022-11-28 17:21:26.000000000","message":"recheck bug 1940425 seems to be fixed","commit_id":"a28b907c4f0dbba6e141a8fbea807e6cb0438977"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6ce19eea9fddbaff474744aa36850f4928420d4a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"5b11f904_2969d598","updated":"2022-11-29 14:05:30.000000000","message":"recheck bug 1960346 now skipping the failing tests","commit_id":"a28b907c4f0dbba6e141a8fbea807e6cb0438977"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f727031110e0e3864f3eee52996536a2bfd3cffc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"493aa3d1_c42c2908","updated":"2022-11-23 10:50:42.000000000","message":"recheck detach volume issue","commit_id":"a28b907c4f0dbba6e141a8fbea807e6cb0438977"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"94f1dce0a138ff240a28fdbdaf13ef54138e2dc0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"b9177e8f_4da5f429","updated":"2022-11-21 08:55:12.000000000","message":"recheck device tagging networking problems","commit_id":"a28b907c4f0dbba6e141a8fbea807e6cb0438977"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"42377ef83cae655a677b09750fc310893a7c98b8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1de93b37_34be02ed","updated":"2022-11-21 14:54:14.000000000","message":"recheck python segfault and volume attachment failure\n\nwhile not perfect this is a backportable compormise that fixes the incompatiabity without all the refactorign requried to pay donw the techdebt we have in this area.\n\nas such im ok with this as a pragmatic middle ground and we can improve the code in master only in followups.","commit_id":"a28b907c4f0dbba6e141a8fbea807e6cb0438977"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"fc314d66cc6da8b6f33b7a3801a54fd81ee63d2c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"e287c198_ace24ae5","updated":"2022-11-24 10:21:57.000000000","message":"recheck test attachments flakey","commit_id":"a28b907c4f0dbba6e141a8fbea807e6cb0438977"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"55a7723cccb099572ee76a9fbbfc0338bbac66ae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"9a6305cb_cecccb32","updated":"2022-11-26 23:03:54.000000000","message":"recheck timeout","commit_id":"a28b907c4f0dbba6e141a8fbea807e6cb0438977"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"da070e561a9f7b98254a3a5545348cedc20b2701","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"bfe0c04c_3c522f59","updated":"2022-11-27 11:08:29.000000000","message":"recheck timeout","commit_id":"a28b907c4f0dbba6e141a8fbea807e6cb0438977"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4568ec54b2460fa3397a99e3975bc67103d7d99c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"3df37f30_c42da6c9","updated":"2022-11-21 17:38:26.000000000","message":"the unit test failure looks unrelated and it passed in py310 and on arm\n\nthe lvm failure looks like the known issue with detach volumens.","commit_id":"a28b907c4f0dbba6e141a8fbea807e6cb0438977"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"80e2f4a8a9bd16751411f13ca341d38f5d70495d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"a7a84480_d3c40d9b","updated":"2022-11-23 17:15:06.000000000","message":"we have the follow up so as I promised.","commit_id":"a28b907c4f0dbba6e141a8fbea807e6cb0438977"}],"nova/virt/libvirt/config.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a4b611366343667f0781033f14c5694f1deeac4","unresolved":true,"context_lines":[{"line_number":3309,"context_line":"                self.type \u003d c.get(\u0027id\u0027)"},{"line_number":3310,"context_line":"            if c.tag \u003d\u003d \"iommuGroup\":"},{"line_number":3311,"context_line":"                self.iommu_group \u003d int(c.get(\u0027number\u0027))"},{"line_number":3312,"context_line":"            if c.tag \u003d\u003d \"uuid\":"},{"line_number":3313,"context_line":"                self.uuid \u003d c.text"},{"line_number":3314,"context_line":""},{"line_number":3315,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"76530eb5_42526ad7","line":3312,"updated":"2022-05-18 11:36:38.000000000","message":"Could you confirm that this information is present in older than libvirt 7.7 ?\n\n// later\n\nOK, this is explained in https://review.opendev.org/c/openstack/nova/+/838976/1/nova/virt/libvirt/driver.py#8048 So the uuid field might be None in older libvirts.","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0f2471181ded86994722f27565e2f41ad31a6621","unresolved":true,"context_lines":[{"line_number":3309,"context_line":"                self.type \u003d c.get(\u0027id\u0027)"},{"line_number":3310,"context_line":"            if c.tag \u003d\u003d \"iommuGroup\":"},{"line_number":3311,"context_line":"                self.iommu_group \u003d int(c.get(\u0027number\u0027))"},{"line_number":3312,"context_line":"            if c.tag \u003d\u003d \"uuid\":"},{"line_number":3313,"context_line":"                self.uuid \u003d c.text"},{"line_number":3314,"context_line":""},{"line_number":3315,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"cad805d2_dfecd6d3","line":3312,"in_reply_to":"76530eb5_42526ad7","updated":"2022-07-27 09:36:13.000000000","message":"Yes, by default this is None.","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"42377ef83cae655a677b09750fc310893a7c98b8","unresolved":false,"context_lines":[{"line_number":3309,"context_line":"                self.type \u003d c.get(\u0027id\u0027)"},{"line_number":3310,"context_line":"            if c.tag \u003d\u003d \"iommuGroup\":"},{"line_number":3311,"context_line":"                self.iommu_group \u003d int(c.get(\u0027number\u0027))"},{"line_number":3312,"context_line":"            if c.tag \u003d\u003d \"uuid\":"},{"line_number":3313,"context_line":"                self.uuid \u003d c.text"},{"line_number":3314,"context_line":""},{"line_number":3315,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"877ef790_bc551e6a","line":3312,"in_reply_to":"cad805d2_dfecd6d3","updated":"2022-11-21 14:54:14.000000000","message":"Done","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a4b611366343667f0781033f14c5694f1deeac4","unresolved":true,"context_lines":[{"line_number":8013,"context_line":"        \"\"\"Returns a dict of a mediated device.\"\"\""},{"line_number":8014,"context_line":"        # LP #1951656 - In Libvirt 7.7, the mdev name now includes the PCI"},{"line_number":8015,"context_line":"        # address of the parent device (e.g. mdev_\u003cuuid\u003e_\u003cpci_address\u003e) due to"},{"line_number":8016,"context_line":"        # the mdevctl allowing for multiple PCI nodes having the same UUID"},{"line_number":8017,"context_line":"        # defined (only one can be active at a time). Since the guest"},{"line_number":8018,"context_line":"        # information doesn\u0027t have the parent ID, try to lookup which"},{"line_number":8019,"context_line":"        # mediated device is available that matches the UUID. If multiple"},{"line_number":8020,"context_line":"        # devices are found that match the UUID, then this is an error"}],"source_content_type":"text/x-python","patch_set":1,"id":"cefe3297_b1173c12","line":8017,"range":{"start_line":8016,"start_character":35,"end_line":8017,"end_character":52},"updated":"2022-05-18 11:36:38.000000000","message":"could this cause problems in nova too? I mean nova records that a VM uses UUID1 mdev then the hypervisor changes that UUID1 now means a different device (different PCI parent). Will this cause that a totally different mdev ends up being attached to the VM after a hard reboot?\n\nI.e. do nova also needs to start tracking the PCI parent of the mdev?","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"dc246c6d2e6fb3c70cf79150076040ab0b379152","unresolved":false,"context_lines":[{"line_number":8013,"context_line":"        \"\"\"Returns a dict of a mediated device.\"\"\""},{"line_number":8014,"context_line":"        # LP #1951656 - In Libvirt 7.7, the mdev name now includes the PCI"},{"line_number":8015,"context_line":"        # address of the parent device (e.g. mdev_\u003cuuid\u003e_\u003cpci_address\u003e) due to"},{"line_number":8016,"context_line":"        # the mdevctl allowing for multiple PCI nodes having the same UUID"},{"line_number":8017,"context_line":"        # defined (only one can be active at a time). Since the guest"},{"line_number":8018,"context_line":"        # information doesn\u0027t have the parent ID, try to lookup which"},{"line_number":8019,"context_line":"        # mediated device is available that matches the UUID. If multiple"},{"line_number":8020,"context_line":"        # devices are found that match the UUID, then this is an error"}],"source_content_type":"text/x-python","patch_set":1,"id":"6fb804ca_ae4eeeec","line":8017,"range":{"start_line":8016,"start_character":35,"end_line":8017,"end_character":52},"in_reply_to":"46b0526c_482aed0c","updated":"2022-05-18 11:51:27.000000000","message":"Thanks for the explanation. So conflicting UUID is not a realistic problem today.","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"99adca2512b64b5f04c6f43d45d88dec671d828e","unresolved":false,"context_lines":[{"line_number":8013,"context_line":"        \"\"\"Returns a dict of a mediated device.\"\"\""},{"line_number":8014,"context_line":"        # LP #1951656 - In Libvirt 7.7, the mdev name now includes the PCI"},{"line_number":8015,"context_line":"        # address of the parent device (e.g. mdev_\u003cuuid\u003e_\u003cpci_address\u003e) due to"},{"line_number":8016,"context_line":"        # the mdevctl allowing for multiple PCI nodes having the same UUID"},{"line_number":8017,"context_line":"        # defined (only one can be active at a time). Since the guest"},{"line_number":8018,"context_line":"        # information doesn\u0027t have the parent ID, try to lookup which"},{"line_number":8019,"context_line":"        # mediated device is available that matches the UUID. If multiple"},{"line_number":8020,"context_line":"        # devices are found that match the UUID, then this is an error"}],"source_content_type":"text/x-python","patch_set":1,"id":"c12fd897_9b26453d","line":8017,"range":{"start_line":8016,"start_character":35,"end_line":8017,"end_character":52},"in_reply_to":"53a1d54a_578eace3","updated":"2022-07-18 16:46:02.000000000","message":"I don\u0027t think Nova being impacted because we don\u0027t use mdevctl for creating the mdevs and we rather directly call sysfs for creating a mdev, which then provides a specific UUID if we don\u0027t pass one : \nhttps://github.com/openstack/nova/blob/ef18d36bf81755e5cca6e5257355eddfa938b615/nova/virt/libvirt/driver.py#L8182","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":16137,"name":"Tobias Urdin","email":"tobias.urdin@binero.com","username":"tobasco"},"change_message_id":"335eda905e8a724d0965d38ffc43ed7c3b4108b6","unresolved":false,"context_lines":[{"line_number":8013,"context_line":"        \"\"\"Returns a dict of a mediated device.\"\"\""},{"line_number":8014,"context_line":"        # LP #1951656 - In Libvirt 7.7, the mdev name now includes the PCI"},{"line_number":8015,"context_line":"        # address of the parent device (e.g. mdev_\u003cuuid\u003e_\u003cpci_address\u003e) due to"},{"line_number":8016,"context_line":"        # the mdevctl allowing for multiple PCI nodes having the same UUID"},{"line_number":8017,"context_line":"        # defined (only one can be active at a time). Since the guest"},{"line_number":8018,"context_line":"        # information doesn\u0027t have the parent ID, try to lookup which"},{"line_number":8019,"context_line":"        # mediated device is available that matches the UUID. If multiple"},{"line_number":8020,"context_line":"        # devices are found that match the UUID, then this is an error"}],"source_content_type":"text/x-python","patch_set":1,"id":"53a1d54a_578eace3","line":8017,"range":{"start_line":8016,"start_character":35,"end_line":8017,"end_character":52},"in_reply_to":"6fb804ca_ae4eeeec","updated":"2022-05-18 12:52:44.000000000","message":"I agree that it\u0027s fragile, I\u0027ve witnessed it first hand when I broke stuff trying to regenerate the domain XMLs 🔥 Atleast I learned that\u0027s how it\u0027s tracked for now.\n\nShould also note that we have a lot of custom code to pre-populate the mdevs before nova-compute even starts, which is painful, hopefully that will change in the future as well now that libvirt has support for autostart in \u003e\u003d 7.8.0","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fb8a0ef216979af29fae2231e1e5a23303d1f997","unresolved":true,"context_lines":[{"line_number":8013,"context_line":"        \"\"\"Returns a dict of a mediated device.\"\"\""},{"line_number":8014,"context_line":"        # LP #1951656 - In Libvirt 7.7, the mdev name now includes the PCI"},{"line_number":8015,"context_line":"        # address of the parent device (e.g. mdev_\u003cuuid\u003e_\u003cpci_address\u003e) due to"},{"line_number":8016,"context_line":"        # the mdevctl allowing for multiple PCI nodes having the same UUID"},{"line_number":8017,"context_line":"        # defined (only one can be active at a time). Since the guest"},{"line_number":8018,"context_line":"        # information doesn\u0027t have the parent ID, try to lookup which"},{"line_number":8019,"context_line":"        # mediated device is available that matches the UUID. If multiple"},{"line_number":8020,"context_line":"        # devices are found that match the UUID, then this is an error"}],"source_content_type":"text/x-python","patch_set":1,"id":"46b0526c_482aed0c","line":8017,"range":{"start_line":8016,"start_character":35,"end_line":8017,"end_character":52},"in_reply_to":"cefe3297_b1173c12","updated":"2022-05-18 11:47:23.000000000","message":"nova has always needed to do that but sylvain has resited it for some reason.\n\nour current code is fragile espacallly after host reboots.\ncurrently we use the instance domain xml to persit the uuid across host reboot but\nbecause we dont have the parent infomation we cant ensure we recarete the mdev properly after the reboot without trying to rebuild the mdev to parent mapping via inspecting the placement allcoations\n\nsylvian and other have tried to write code to do that but it still a problem today it has not been fixed.\n\npersonally i would like to start tacking mdevs in either the pci_tracker or resources table.\n\nif we trackted them in the pci_tracker or resouce table we would not have the reboot problem.\n\nnova currenly choose the uuid not the host or operator so we should not get conflicts like this today.","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a4b611366343667f0781033f14c5694f1deeac4","unresolved":true,"context_lines":[{"line_number":8024,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":8025,"context_line":"            if ex.get_error_code() !\u003d libvirt.VIR_ERR_NO_NODE_DEVICE:"},{"line_number":8026,"context_line":"                raise"},{"line_number":8027,"context_line":"            mdevs \u003d [dev for dev in self._host.list_mediated_devices()"},{"line_number":8028,"context_line":"                     if dev.startswith(devname)]"},{"line_number":8029,"context_line":"            # If no matching devices are found, simply raise the original"},{"line_number":8030,"context_line":"            # exception indicating that no devices are found."},{"line_number":8031,"context_line":"            if not mdevs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5278b269_d8791943","line":8028,"range":{"start_line":8027,"start_character":12,"end_line":8028,"end_character":48},"updated":"2022-05-18 11:36:38.000000000","message":"Does this call return a list of devnames? Based on the doc it returns virNodeDevice objects. I\u0027m wondering how then dev.startswith(devname) works in this context","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"99adca2512b64b5f04c6f43d45d88dec671d828e","unresolved":true,"context_lines":[{"line_number":8025,"context_line":"            if ex.get_error_code() !\u003d libvirt.VIR_ERR_NO_NODE_DEVICE:"},{"line_number":8026,"context_line":"                raise"},{"line_number":8027,"context_line":"            mdevs \u003d [dev for dev in self._host.list_mediated_devices()"},{"line_number":8028,"context_line":"                     if dev.startswith(devname)]"},{"line_number":8029,"context_line":"            # If no matching devices are found, simply raise the original"},{"line_number":8030,"context_line":"            # exception indicating that no devices are found."},{"line_number":8031,"context_line":"            if not mdevs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fa5b50c_a44109a8","line":8028,"updated":"2022-07-18 16:46:02.000000000","message":"we could optimize this call by checking the libvirt version in https://github.com/openstack/nova/blob/ef18d36bf81755e5cca6e5257355eddfa938b615/nova/virt/libvirt/driver.py#L8058 and passing a virtdev instead of a devname to _get_mediated_device_information there https://github.com/openstack/nova/blob/ef18d36bf81755e5cca6e5257355eddfa938b615/nova/virt/libvirt/driver.py#L8069\n\nThis would prevent iterating over all the mdevs for each of the mdevs... \nHere, you create a O(N2) complexity instead of a single O(N) loop.\n\nFortunately, even with large GPUs, this shouldn\u0027t be a performance impact as we could have only 128 mdevs or less per host.","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fb8a0ef216979af29fae2231e1e5a23303d1f997","unresolved":true,"context_lines":[{"line_number":8024,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":8025,"context_line":"            if ex.get_error_code() !\u003d libvirt.VIR_ERR_NO_NODE_DEVICE:"},{"line_number":8026,"context_line":"                raise"},{"line_number":8027,"context_line":"            mdevs \u003d [dev for dev in self._host.list_mediated_devices()"},{"line_number":8028,"context_line":"                     if dev.startswith(devname)]"},{"line_number":8029,"context_line":"            # If no matching devices are found, simply raise the original"},{"line_number":8030,"context_line":"            # exception indicating that no devices are found."},{"line_number":8031,"context_line":"            if not mdevs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"e019073b_6cc64932","line":8028,"range":{"start_line":8027,"start_character":12,"end_line":8028,"end_character":48},"in_reply_to":"5278b269_d8791943","updated":"2022-05-18 11:47:23.000000000","message":"i think and i would have to check that this is returnign a list of libvirt nodedev names\n\nso we are using startrs with to ignore the parent pci info at the end of the node dev name.","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"99adca2512b64b5f04c6f43d45d88dec671d828e","unresolved":true,"context_lines":[{"line_number":8024,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":8025,"context_line":"            if ex.get_error_code() !\u003d libvirt.VIR_ERR_NO_NODE_DEVICE:"},{"line_number":8026,"context_line":"                raise"},{"line_number":8027,"context_line":"            mdevs \u003d [dev for dev in self._host.list_mediated_devices()"},{"line_number":8028,"context_line":"                     if dev.startswith(devname)]"},{"line_number":8029,"context_line":"            # If no matching devices are found, simply raise the original"},{"line_number":8030,"context_line":"            # exception indicating that no devices are found."},{"line_number":8031,"context_line":"            if not mdevs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"f986923b_73e6d4d5","line":8028,"range":{"start_line":8027,"start_character":12,"end_line":8028,"end_character":48},"in_reply_to":"931d82fc_9f8f9e80","updated":"2022-07-18 16:46:02.000000000","message":"We always get a list of devnames by calling this libvirt API and we already use this python binding elsewhere : \nhttps://github.com/openstack/nova/blob/ef18d36bf81755e5cca6e5257355eddfa938b615/nova/virt/libvirt/driver.py#L8066-L8069","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":8992,"name":"Billy Olsen","email":"billy.olsen@canonical.com","username":"billy-olsen"},"change_message_id":"15581a22af9cb5618fddb49c4bd12a73285bcc82","unresolved":true,"context_lines":[{"line_number":8025,"context_line":"            if ex.get_error_code() !\u003d libvirt.VIR_ERR_NO_NODE_DEVICE:"},{"line_number":8026,"context_line":"                raise"},{"line_number":8027,"context_line":"            mdevs \u003d [dev for dev in self._host.list_mediated_devices()"},{"line_number":8028,"context_line":"                     if dev.startswith(devname)]"},{"line_number":8029,"context_line":"            # If no matching devices are found, simply raise the original"},{"line_number":8030,"context_line":"            # exception indicating that no devices are found."},{"line_number":8031,"context_line":"            if not mdevs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ae64fa4b_8432a2af","line":8028,"in_reply_to":"9fa5b50c_a44109a8","updated":"2022-07-20 03:20:42.000000000","message":"I don\u0027t think the optimization makes sense for the _get_mediated_devices() method, as the mdev names in the _get_mediated_devices() are returned directly from the underlying libvirt API itself and thus they should return the host\u0027s/libvirt\u0027s name for the mdev and should not fail the lookup (at least not with a VIR_ERR_NO_NODE_DEVICE).\n\nThe worst case scenario does indeed come up when the mdevs are assigned to a domain and that domain is lacking the pci suffix. I believe that scenario arises when the driver is recreating mediated devices on restart. I think it would make sense to change that code by fetching all the mediated devices on the host and attempting to reconcile the naming differences (iirc, the domains do not see the pci suffix that was added so the reconciliation is necessary anyways).","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"42377ef83cae655a677b09750fc310893a7c98b8","unresolved":false,"context_lines":[{"line_number":8025,"context_line":"            if ex.get_error_code() !\u003d libvirt.VIR_ERR_NO_NODE_DEVICE:"},{"line_number":8026,"context_line":"                raise"},{"line_number":8027,"context_line":"            mdevs \u003d [dev for dev in self._host.list_mediated_devices()"},{"line_number":8028,"context_line":"                     if dev.startswith(devname)]"},{"line_number":8029,"context_line":"            # If no matching devices are found, simply raise the original"},{"line_number":8030,"context_line":"            # exception indicating that no devices are found."},{"line_number":8031,"context_line":"            if not mdevs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ca3162f1_264d3ace","line":8028,"in_reply_to":"ae64fa4b_8432a2af","updated":"2022-11-21 14:54:14.000000000","message":"the optimisation is out of scope of this patch but can be adressed later if needed.","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"dc246c6d2e6fb3c70cf79150076040ab0b379152","unresolved":true,"context_lines":[{"line_number":8024,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":8025,"context_line":"            if ex.get_error_code() !\u003d libvirt.VIR_ERR_NO_NODE_DEVICE:"},{"line_number":8026,"context_line":"                raise"},{"line_number":8027,"context_line":"            mdevs \u003d [dev for dev in self._host.list_mediated_devices()"},{"line_number":8028,"context_line":"                     if dev.startswith(devname)]"},{"line_number":8029,"context_line":"            # If no matching devices are found, simply raise the original"},{"line_number":8030,"context_line":"            # exception indicating that no devices are found."},{"line_number":8031,"context_line":"            if not mdevs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"931d82fc_9f8f9e80","line":8028,"range":{"start_line":8027,"start_character":12,"end_line":8028,"end_character":48},"in_reply_to":"e019073b_6cc64932","updated":"2022-05-18 11:51:27.000000000","message":"Hm, I have to look up the C API [1] according to that it is a list of names. So this code works. But then please update the doc of nova.virt.libvirt.host.Host.list_mediated_devices as it talks about virNodeDevice objects intead of simply names.\n\n[1] https://libvirt.org/html/libvirt-libvirt-nodedev.html#virNodeListDevices","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"42377ef83cae655a677b09750fc310893a7c98b8","unresolved":false,"context_lines":[{"line_number":8024,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":8025,"context_line":"            if ex.get_error_code() !\u003d libvirt.VIR_ERR_NO_NODE_DEVICE:"},{"line_number":8026,"context_line":"                raise"},{"line_number":8027,"context_line":"            mdevs \u003d [dev for dev in self._host.list_mediated_devices()"},{"line_number":8028,"context_line":"                     if dev.startswith(devname)]"},{"line_number":8029,"context_line":"            # If no matching devices are found, simply raise the original"},{"line_number":8030,"context_line":"            # exception indicating that no devices are found."},{"line_number":8031,"context_line":"            if not mdevs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9e7a3884_8b1e9502","line":8028,"range":{"start_line":8027,"start_character":12,"end_line":8028,"end_character":48},"in_reply_to":"f986923b_73e6d4d5","updated":"2022-11-21 14:54:14.000000000","message":"Ack","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a35186144bd096f3d95e715c783e95f45917ca5c","unresolved":true,"context_lines":[{"line_number":8033,"context_line":"        \"\"\"Returns a dict of a mediated device.\"\"\""},{"line_number":8034,"context_line":"        # LP #1951656 - In Libvirt 7.7, the mdev name now includes the PCI"},{"line_number":8035,"context_line":"        # address of the parent device (e.g. mdev_\u003cuuid\u003e_\u003cpci_address\u003e) due to"},{"line_number":8036,"context_line":"        # the mdevctl allowing for multiple PCI nodes having the same UUID"},{"line_number":8037,"context_line":"        # defined (only one can be active at a time). Since the guest"},{"line_number":8038,"context_line":"        # information doesn\u0027t have the parent ID, try to lookup which"},{"line_number":8039,"context_line":"        # mediated device is available that matches the UUID. If multiple"}],"source_content_type":"text/x-python","patch_set":3,"id":"d7f99761_c532e9e9","line":8036,"range":{"start_line":8036,"start_character":35,"end_line":8036,"end_character":74},"updated":"2022-07-27 07:41:59.000000000","message":"Are these MDEV nodes not PCI having the same UUID?","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5eb8f4a371ea445bd163753385c686ac96e854a8","unresolved":false,"context_lines":[{"line_number":8033,"context_line":"        \"\"\"Returns a dict of a mediated device.\"\"\""},{"line_number":8034,"context_line":"        # LP #1951656 - In Libvirt 7.7, the mdev name now includes the PCI"},{"line_number":8035,"context_line":"        # address of the parent device (e.g. mdev_\u003cuuid\u003e_\u003cpci_address\u003e) due to"},{"line_number":8036,"context_line":"        # the mdevctl allowing for multiple PCI nodes having the same UUID"},{"line_number":8037,"context_line":"        # defined (only one can be active at a time). Since the guest"},{"line_number":8038,"context_line":"        # information doesn\u0027t have the parent ID, try to lookup which"},{"line_number":8039,"context_line":"        # mediated device is available that matches the UUID. If multiple"}],"source_content_type":"text/x-python","patch_set":3,"id":"acad209b_1671907a","line":8036,"range":{"start_line":8036,"start_character":35,"end_line":8036,"end_character":74},"in_reply_to":"8bcbbc79_542ec799","updated":"2022-08-02 08:58:59.000000000","message":"Ack","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0f2471181ded86994722f27565e2f41ad31a6621","unresolved":true,"context_lines":[{"line_number":8033,"context_line":"        \"\"\"Returns a dict of a mediated device.\"\"\""},{"line_number":8034,"context_line":"        # LP #1951656 - In Libvirt 7.7, the mdev name now includes the PCI"},{"line_number":8035,"context_line":"        # address of the parent device (e.g. mdev_\u003cuuid\u003e_\u003cpci_address\u003e) due to"},{"line_number":8036,"context_line":"        # the mdevctl allowing for multiple PCI nodes having the same UUID"},{"line_number":8037,"context_line":"        # defined (only one can be active at a time). Since the guest"},{"line_number":8038,"context_line":"        # information doesn\u0027t have the parent ID, try to lookup which"},{"line_number":8039,"context_line":"        # mediated device is available that matches the UUID. If multiple"}],"source_content_type":"text/x-python","patch_set":3,"id":"f6d0c881_d43c595f","line":8036,"range":{"start_line":8036,"start_character":35,"end_line":8036,"end_character":74},"in_reply_to":"d7f99761_c532e9e9","updated":"2022-07-27 09:36:13.000000000","message":"It was at least the concern for modifying the name, as they were saying that with mdevctl, it can create the same UUID.\n\nNova doesn\u0027t use mdevctl so we wouldn\u0027t have this problem (we use uuid4() for creating a mdev) tho.","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e558c8e6d2dd8718d6ca9761f65fc48c87ffba6c","unresolved":true,"context_lines":[{"line_number":8033,"context_line":"        \"\"\"Returns a dict of a mediated device.\"\"\""},{"line_number":8034,"context_line":"        # LP #1951656 - In Libvirt 7.7, the mdev name now includes the PCI"},{"line_number":8035,"context_line":"        # address of the parent device (e.g. mdev_\u003cuuid\u003e_\u003cpci_address\u003e) due to"},{"line_number":8036,"context_line":"        # the mdevctl allowing for multiple PCI nodes having the same UUID"},{"line_number":8037,"context_line":"        # defined (only one can be active at a time). Since the guest"},{"line_number":8038,"context_line":"        # information doesn\u0027t have the parent ID, try to lookup which"},{"line_number":8039,"context_line":"        # mediated device is available that matches the UUID. If multiple"}],"source_content_type":"text/x-python","patch_set":3,"id":"8bcbbc79_542ec799","line":8036,"range":{"start_line":8036,"start_character":35,"end_line":8036,"end_character":74},"in_reply_to":"f6d0c881_d43c595f","updated":"2022-07-27 11:27:23.000000000","message":"My comment is about the wording here. The code comment says \"PCI nodes\", and I\u0027m wondering if these are really MDEV nodes with UUID and not PCI nodes.","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a35186144bd096f3d95e715c783e95f45917ca5c","unresolved":true,"context_lines":[{"line_number":8075,"context_line":"            mdev_uuid \u003d libvirt_utils.mdev_name2uuid(cfgdev.name)"},{"line_number":8076,"context_line":""},{"line_number":8077,"context_line":"        device \u003d {"},{"line_number":8078,"context_line":"            \"dev_id\": cfgdev.name,"},{"line_number":8079,"context_line":"            # name is like mdev_00ead764_fdc0_46b6_8db9_2963f5c815b4"},{"line_number":8080,"context_line":"            \"uuid\": mdev_uuid,"},{"line_number":8081,"context_line":"            # the physical GPU PCI device"}],"source_content_type":"text/x-python","patch_set":3,"id":"f7ad8849_ca6be9f8","line":8078,"updated":"2022-07-27 07:41:59.000000000","message":"As we take the name from the cfgdev this means will start using the new naming format for dev_id internally too.\n\n//later\n\nlooking at the code I don\u0027t see any usage of dev_id in nova so having the name changing here does not effect any caller. (This also questions why we ever need to pass dev_id back to the caller)","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"42377ef83cae655a677b09750fc310893a7c98b8","unresolved":false,"context_lines":[{"line_number":8075,"context_line":"            mdev_uuid \u003d libvirt_utils.mdev_name2uuid(cfgdev.name)"},{"line_number":8076,"context_line":""},{"line_number":8077,"context_line":"        device \u003d {"},{"line_number":8078,"context_line":"            \"dev_id\": cfgdev.name,"},{"line_number":8079,"context_line":"            # name is like mdev_00ead764_fdc0_46b6_8db9_2963f5c815b4"},{"line_number":8080,"context_line":"            \"uuid\": mdev_uuid,"},{"line_number":8081,"context_line":"            # the physical GPU PCI device"}],"source_content_type":"text/x-python","patch_set":3,"id":"6385b2a7_3a2a7fb5","line":8078,"in_reply_to":"d9a6c7be_8895536a","updated":"2022-11-21 14:54:14.000000000","message":"Ack","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0f2471181ded86994722f27565e2f41ad31a6621","unresolved":true,"context_lines":[{"line_number":8075,"context_line":"            mdev_uuid \u003d libvirt_utils.mdev_name2uuid(cfgdev.name)"},{"line_number":8076,"context_line":""},{"line_number":8077,"context_line":"        device \u003d {"},{"line_number":8078,"context_line":"            \"dev_id\": cfgdev.name,"},{"line_number":8079,"context_line":"            # name is like mdev_00ead764_fdc0_46b6_8db9_2963f5c815b4"},{"line_number":8080,"context_line":"            \"uuid\": mdev_uuid,"},{"line_number":8081,"context_line":"            # the physical GPU PCI device"}],"source_content_type":"text/x-python","patch_set":3,"id":"d9a6c7be_8895536a","line":8078,"in_reply_to":"f7ad8849_ca6be9f8","updated":"2022-07-27 09:36:13.000000000","message":"agreed, this isn\u0027t needed but we already pass in, so that\u0027s fine, it\u0027s not a problem.","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a35186144bd096f3d95e715c783e95f45917ca5c","unresolved":true,"context_lines":[{"line_number":8076,"context_line":""},{"line_number":8077,"context_line":"        device \u003d {"},{"line_number":8078,"context_line":"            \"dev_id\": cfgdev.name,"},{"line_number":8079,"context_line":"            # name is like mdev_00ead764_fdc0_46b6_8db9_2963f5c815b4"},{"line_number":8080,"context_line":"            \"uuid\": mdev_uuid,"},{"line_number":8081,"context_line":"            # the physical GPU PCI device"},{"line_number":8082,"context_line":"            \"parent\": cfgdev.parent,"}],"source_content_type":"text/x-python","patch_set":3,"id":"2bf16e5d_0d8fae54","line":8079,"updated":"2022-07-27 07:41:59.000000000","message":"this comment seems to be not valid any more as the code is not converting the name to uuid here any more","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0f2471181ded86994722f27565e2f41ad31a6621","unresolved":true,"context_lines":[{"line_number":8076,"context_line":""},{"line_number":8077,"context_line":"        device \u003d {"},{"line_number":8078,"context_line":"            \"dev_id\": cfgdev.name,"},{"line_number":8079,"context_line":"            # name is like mdev_00ead764_fdc0_46b6_8db9_2963f5c815b4"},{"line_number":8080,"context_line":"            \"uuid\": mdev_uuid,"},{"line_number":8081,"context_line":"            # the physical GPU PCI device"},{"line_number":8082,"context_line":"            \"parent\": cfgdev.parent,"}],"source_content_type":"text/x-python","patch_set":3,"id":"cd071679_a1af82ba","line":8079,"in_reply_to":"2bf16e5d_0d8fae54","updated":"2022-07-27 09:36:13.000000000","message":"correct, you need to remove this comment","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5eb8f4a371ea445bd163753385c686ac96e854a8","unresolved":false,"context_lines":[{"line_number":8076,"context_line":""},{"line_number":8077,"context_line":"        device \u003d {"},{"line_number":8078,"context_line":"            \"dev_id\": cfgdev.name,"},{"line_number":8079,"context_line":"            # name is like mdev_00ead764_fdc0_46b6_8db9_2963f5c815b4"},{"line_number":8080,"context_line":"            \"uuid\": mdev_uuid,"},{"line_number":8081,"context_line":"            # the physical GPU PCI device"},{"line_number":8082,"context_line":"            \"parent\": cfgdev.parent,"}],"source_content_type":"text/x-python","patch_set":3,"id":"faca0b6f_1e34d032","line":8079,"in_reply_to":"cd071679_a1af82ba","updated":"2022-08-02 08:58:59.000000000","message":"Ack","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"}],"nova/virt/libvirt/host.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a35186144bd096f3d95e715c783e95f45917ca5c","unresolved":true,"context_lines":[{"line_number":1566,"context_line":"    def list_mediated_devices(self, flags\u003d0):"},{"line_number":1567,"context_line":"        \"\"\"Lookup mediated devices."},{"line_number":1568,"context_line":""},{"line_number":1569,"context_line":"        :returns: a list of virNodeDevice instance"},{"line_number":1570,"context_line":"        \"\"\""},{"line_number":1571,"context_line":"        return self._list_devices(\"mdev\", flags\u003dflags)"},{"line_number":1572,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"4bf01299_74da795f","line":1569,"updated":"2022-07-27 07:41:59.000000000","message":"I asked this in PS1 before but I ask this again. This is highly misleading as the actual call below return a list of strings with the _name_ of the devices. Could you please update this doc accordingly.","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5eb8f4a371ea445bd163753385c686ac96e854a8","unresolved":false,"context_lines":[{"line_number":1566,"context_line":"    def list_mediated_devices(self, flags\u003d0):"},{"line_number":1567,"context_line":"        \"\"\"Lookup mediated devices."},{"line_number":1568,"context_line":""},{"line_number":1569,"context_line":"        :returns: a list of virNodeDevice instance"},{"line_number":1570,"context_line":"        \"\"\""},{"line_number":1571,"context_line":"        return self._list_devices(\"mdev\", flags\u003dflags)"},{"line_number":1572,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"a716fa33_4f456d5f","line":1569,"in_reply_to":"490fd1c0_bfbccc17","updated":"2022-08-02 08:58:59.000000000","message":"Ack","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0f2471181ded86994722f27565e2f41ad31a6621","unresolved":true,"context_lines":[{"line_number":1566,"context_line":"    def list_mediated_devices(self, flags\u003d0):"},{"line_number":1567,"context_line":"        \"\"\"Lookup mediated devices."},{"line_number":1568,"context_line":""},{"line_number":1569,"context_line":"        :returns: a list of virNodeDevice instance"},{"line_number":1570,"context_line":"        \"\"\""},{"line_number":1571,"context_line":"        return self._list_devices(\"mdev\", flags\u003dflags)"},{"line_number":1572,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"490fd1c0_bfbccc17","line":1569,"in_reply_to":"4bf01299_74da795f","updated":"2022-07-27 09:36:13.000000000","message":"please do so","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"}],"nova/virt/libvirt/utils.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a4b611366343667f0781033f14c5694f1deeac4","unresolved":true,"context_lines":[{"line_number":581,"context_line":""},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"def mdev_name2uuid(mdev_name: str) -\u003e str:"},{"line_number":584,"context_line":"    \"\"\"Convert an mdev name (of the form mdev_\u003cuuid_with_underscores\u003e) to a"},{"line_number":585,"context_line":"    uuid (of the form 8-4-4-4-12)."},{"line_number":586,"context_line":"    \"\"\""},{"line_number":587,"context_line":"    mdev_uuid \u003d mdev_name[5:].replace(\u0027_\u0027, \u0027-\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffec50cb_c36bab00","line":584,"updated":"2022-05-18 11:36:38.000000000","message":"please mention taht it now accepts a longer name too","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":8992,"name":"Billy Olsen","email":"billy.olsen@canonical.com","username":"billy-olsen"},"change_message_id":"2c00a8c42bf9209ea9c19df35def2784f3358679","unresolved":false,"context_lines":[{"line_number":581,"context_line":""},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"def mdev_name2uuid(mdev_name: str) -\u003e str:"},{"line_number":584,"context_line":"    \"\"\"Convert an mdev name (of the form mdev_\u003cuuid_with_underscores\u003e) to a"},{"line_number":585,"context_line":"    uuid (of the form 8-4-4-4-12)."},{"line_number":586,"context_line":"    \"\"\""},{"line_number":587,"context_line":"    mdev_uuid \u003d mdev_name[5:].replace(\u0027_\u0027, \u0027-\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"8e6bb052_e7740245","line":584,"in_reply_to":"48fe7b16_dca4fc99","updated":"2022-07-25 16:25:58.000000000","message":"Done","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"99adca2512b64b5f04c6f43d45d88dec671d828e","unresolved":true,"context_lines":[{"line_number":581,"context_line":""},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"def mdev_name2uuid(mdev_name: str) -\u003e str:"},{"line_number":584,"context_line":"    \"\"\"Convert an mdev name (of the form mdev_\u003cuuid_with_underscores\u003e) to a"},{"line_number":585,"context_line":"    uuid (of the form 8-4-4-4-12)."},{"line_number":586,"context_line":"    \"\"\""},{"line_number":587,"context_line":"    mdev_uuid \u003d mdev_name[5:].replace(\u0027_\u0027, \u0027-\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"48fe7b16_dca4fc99","line":584,"in_reply_to":"ffec50cb_c36bab00","updated":"2022-07-18 16:46:02.000000000","message":"+1","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"99adca2512b64b5f04c6f43d45d88dec671d828e","unresolved":true,"context_lines":[{"line_number":594,"context_line":"    \"\"\"Convert an mdev uuid (of the form 8-4-4-4-12) to a name (of the form"},{"line_number":595,"context_line":"    mdev_\u003cuuid_with_underscores\u003e)."},{"line_number":596,"context_line":"    \"\"\""},{"line_number":597,"context_line":"    return \"mdev_\" + mdev_uuid.replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"def get_flags_by_flavor_specs(flavor: \u0027objects.Flavor\u0027) -\u003e ty.Set[str]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"0d5c214e_67a72363","line":597,"updated":"2022-07-18 16:46:02.000000000","message":"this method is now borked, as we need to pass the parent ID. This isn\u0027t needed for fixing the bug itself, but we\u0027ll need it for fixing the reboot issue.","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":8992,"name":"Billy Olsen","email":"billy.olsen@canonical.com","username":"billy-olsen"},"change_message_id":"2c00a8c42bf9209ea9c19df35def2784f3358679","unresolved":false,"context_lines":[{"line_number":594,"context_line":"    \"\"\"Convert an mdev uuid (of the form 8-4-4-4-12) to a name (of the form"},{"line_number":595,"context_line":"    mdev_\u003cuuid_with_underscores\u003e)."},{"line_number":596,"context_line":"    \"\"\""},{"line_number":597,"context_line":"    return \"mdev_\" + mdev_uuid.replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"def get_flags_by_flavor_specs(flavor: \u0027objects.Flavor\u0027) -\u003e ty.Set[str]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"54316abf_6a2c7298","line":597,"in_reply_to":"0d5c214e_67a72363","updated":"2022-07-25 16:25:58.000000000","message":"Done","commit_id":"2b142b53fbac3f0776e94718cba38539b26c9c42"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a35186144bd096f3d95e715c783e95f45917ca5c","unresolved":true,"context_lines":[{"line_number":585,"context_line":"    mdev_\u003cuuid_with_underscores\u003e_\u003cpciaddress\u003e) to a uuid"},{"line_number":586,"context_line":"    (of the form 8-4-4-4-12)."},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"    :param mdev_name: the name of the mdev to parse the URL from"},{"line_number":589,"context_line":"    :returns: string containing the uuid"},{"line_number":590,"context_line":"    \"\"\""},{"line_number":591,"context_line":"    mdev_uuid \u003d mdev_name[5:].replace(\u0027_\u0027, \u0027-\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"54582342_ea59a57b","line":588,"range":{"start_line":588,"start_character":56,"end_line":588,"end_character":59},"updated":"2022-07-27 07:41:59.000000000","message":"UUID","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0f2471181ded86994722f27565e2f41ad31a6621","unresolved":true,"context_lines":[{"line_number":585,"context_line":"    mdev_\u003cuuid_with_underscores\u003e_\u003cpciaddress\u003e) to a uuid"},{"line_number":586,"context_line":"    (of the form 8-4-4-4-12)."},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"    :param mdev_name: the name of the mdev to parse the URL from"},{"line_number":589,"context_line":"    :returns: string containing the uuid"},{"line_number":590,"context_line":"    \"\"\""},{"line_number":591,"context_line":"    mdev_uuid \u003d mdev_name[5:].replace(\u0027_\u0027, \u0027-\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"a5b2eb0d_9e8202e6","line":588,"range":{"start_line":588,"start_character":56,"end_line":588,"end_character":59},"in_reply_to":"54582342_ea59a57b","updated":"2022-07-27 09:36:13.000000000","message":"yeah bad copy/paste I guess","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5eb8f4a371ea445bd163753385c686ac96e854a8","unresolved":false,"context_lines":[{"line_number":585,"context_line":"    mdev_\u003cuuid_with_underscores\u003e_\u003cpciaddress\u003e) to a uuid"},{"line_number":586,"context_line":"    (of the form 8-4-4-4-12)."},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"    :param mdev_name: the name of the mdev to parse the URL from"},{"line_number":589,"context_line":"    :returns: string containing the uuid"},{"line_number":590,"context_line":"    \"\"\""},{"line_number":591,"context_line":"    mdev_uuid \u003d mdev_name[5:].replace(\u0027_\u0027, \u0027-\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"154dbc4d_23936d29","line":588,"range":{"start_line":588,"start_character":56,"end_line":588,"end_character":59},"in_reply_to":"a5b2eb0d_9e8202e6","updated":"2022-08-02 08:58:59.000000000","message":"Ack","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a35186144bd096f3d95e715c783e95f45917ca5c","unresolved":true,"context_lines":[{"line_number":589,"context_line":"    :returns: string containing the uuid"},{"line_number":590,"context_line":"    \"\"\""},{"line_number":591,"context_line":"    mdev_uuid \u003d mdev_name[5:].replace(\u0027_\u0027, \u0027-\u0027)"},{"line_number":592,"context_line":"    if len(mdev_uuid) \u003e 36:"},{"line_number":593,"context_line":"        mdev_uuid \u003d mdev_uuid[:36]"},{"line_number":594,"context_line":"    return str(uuid.UUID(mdev_uuid))"},{"line_number":595,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7ad517fe_1d390b2d","line":592,"range":{"start_line":592,"start_character":1,"end_line":592,"end_character":27},"updated":"2022-07-27 07:41:59.000000000","message":"you don\u0027t need the if, cutting the first 36 chars works even if the string is sorter\n\n  \u003e\u003e\u003e \"foo\"[:10]\n  \u0027foo\u0027","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5eb8f4a371ea445bd163753385c686ac96e854a8","unresolved":false,"context_lines":[{"line_number":589,"context_line":"    :returns: string containing the uuid"},{"line_number":590,"context_line":"    \"\"\""},{"line_number":591,"context_line":"    mdev_uuid \u003d mdev_name[5:].replace(\u0027_\u0027, \u0027-\u0027)"},{"line_number":592,"context_line":"    if len(mdev_uuid) \u003e 36:"},{"line_number":593,"context_line":"        mdev_uuid \u003d mdev_uuid[:36]"},{"line_number":594,"context_line":"    return str(uuid.UUID(mdev_uuid))"},{"line_number":595,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"83427ed1_43f9a1e0","line":592,"range":{"start_line":592,"start_character":1,"end_line":592,"end_character":27},"in_reply_to":"4a175bbd_3ee50fae","updated":"2022-08-02 08:58:59.000000000","message":"Ack","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0f2471181ded86994722f27565e2f41ad31a6621","unresolved":true,"context_lines":[{"line_number":589,"context_line":"    :returns: string containing the uuid"},{"line_number":590,"context_line":"    \"\"\""},{"line_number":591,"context_line":"    mdev_uuid \u003d mdev_name[5:].replace(\u0027_\u0027, \u0027-\u0027)"},{"line_number":592,"context_line":"    if len(mdev_uuid) \u003e 36:"},{"line_number":593,"context_line":"        mdev_uuid \u003d mdev_uuid[:36]"},{"line_number":594,"context_line":"    return str(uuid.UUID(mdev_uuid))"},{"line_number":595,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"4a175bbd_3ee50fae","line":592,"range":{"start_line":592,"start_character":1,"end_line":592,"end_character":27},"in_reply_to":"7ad517fe_1d390b2d","updated":"2022-07-27 09:36:13.000000000","message":"good point","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a35186144bd096f3d95e715c783e95f45917ca5c","unresolved":true,"context_lines":[{"line_number":594,"context_line":"    return str(uuid.UUID(mdev_uuid))"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"def mdev_uuid2name(mdev_uuid: str, parent: str \u003d None) -\u003e str:"},{"line_number":598,"context_line":"    \"\"\"Convert an mdev uuid (of the form 8-4-4-4-12) and optionally its parent"},{"line_number":599,"context_line":"    device to a name (of the form mdev_\u003cuuid_with_underscores\u003e[_\u003cpciid\u003e])."},{"line_number":600,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"d31f1d8a_78127001","line":597,"updated":"2022-07-27 07:41:59.000000000","message":"The change of this function OK, but the callers are not updated to provide the parent parameter. Actullay the parent parameter is not used by any caller. So when nova generates a devname from uuid it will generate it without parent postfix. I guess libvirt 7.7 will not accept those names any more.\n\nSo I suggest to either:\nA) pass the parent param from all caller if we are on libvirt 7.7 or newer\nB) start using the dev_id as devname instead of regenerating the devname here. We already put the name of the mdev into the mdev dict at https://review.opendev.org/c/openstack/nova/+/838976/3/nova/virt/libvirt/driver.py#8078","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"42377ef83cae655a677b09750fc310893a7c98b8","unresolved":false,"context_lines":[{"line_number":594,"context_line":"    return str(uuid.UUID(mdev_uuid))"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"def mdev_uuid2name(mdev_uuid: str, parent: str \u003d None) -\u003e str:"},{"line_number":598,"context_line":"    \"\"\"Convert an mdev uuid (of the form 8-4-4-4-12) and optionally its parent"},{"line_number":599,"context_line":"    device to a name (of the form mdev_\u003cuuid_with_underscores\u003e[_\u003cpciid\u003e])."},{"line_number":600,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5c978b34_10960bd7","line":597,"in_reply_to":"9e2521d8_61cc61bd","updated":"2022-11-21 14:54:14.000000000","message":"ack we will defer this to a followup","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5eb8f4a371ea445bd163753385c686ac96e854a8","unresolved":true,"context_lines":[{"line_number":594,"context_line":"    return str(uuid.UUID(mdev_uuid))"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"def mdev_uuid2name(mdev_uuid: str, parent: str \u003d None) -\u003e str:"},{"line_number":598,"context_line":"    \"\"\"Convert an mdev uuid (of the form 8-4-4-4-12) and optionally its parent"},{"line_number":599,"context_line":"    device to a name (of the form mdev_\u003cuuid_with_underscores\u003e[_\u003cpciid\u003e])."},{"line_number":600,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dfe689ea_285610a5","line":597,"in_reply_to":"afafd0f9_59b933f1","updated":"2022-08-02 08:58:59.000000000","message":"Actually, trying to see how to fix this would mean we would need to modify the callers to either pass the parent ID or using the dev_id as you told.\n\nThis would be a large modification, but I verified which callers are pinging mdev_uuid2name() and those are :\n- the reshape method when allocations are still on root RP, which would only happen with a \u003cStein compute. In Stein, we have the reshape but also the VGPU allocations are in the pGPU RP. So, this reshape may be impacted if and only if Stein to now computes are using libvirt 7.7, which is low-risk.\n- the mdev recreation method we have in libvirt when you reboot, but we also have a open bug report https://bugs.launchpad.net/nova/+bug/1900800 for this. \n\nWhat I consequently propose is to accept this change for now and write a follow-up patch that would fix both callers (and eventually fixing the other bug report I mentioned).","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0f2471181ded86994722f27565e2f41ad31a6621","unresolved":true,"context_lines":[{"line_number":594,"context_line":"    return str(uuid.UUID(mdev_uuid))"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"def mdev_uuid2name(mdev_uuid: str, parent: str \u003d None) -\u003e str:"},{"line_number":598,"context_line":"    \"\"\"Convert an mdev uuid (of the form 8-4-4-4-12) and optionally its parent"},{"line_number":599,"context_line":"    device to a name (of the form mdev_\u003cuuid_with_underscores\u003e[_\u003cpciid\u003e])."},{"line_number":600,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"afafd0f9_59b933f1","line":597,"in_reply_to":"d31f1d8a_78127001","updated":"2022-07-27 09:36:13.000000000","message":"I prefer option B, I think","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"32800722869c22071772ad8673a49b8b69755574","unresolved":true,"context_lines":[{"line_number":594,"context_line":"    return str(uuid.UUID(mdev_uuid))"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"def mdev_uuid2name(mdev_uuid: str, parent: str \u003d None) -\u003e str:"},{"line_number":598,"context_line":"    \"\"\"Convert an mdev uuid (of the form 8-4-4-4-12) and optionally its parent"},{"line_number":599,"context_line":"    device to a name (of the form mdev_\u003cuuid_with_underscores\u003e[_\u003cpciid\u003e])."},{"line_number":600,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9e2521d8_61cc61bd","line":597,"in_reply_to":"dfe689ea_285610a5","updated":"2022-08-02 15:30:23.000000000","message":"I\u0027m OK with a follow up","commit_id":"e5994693b3811f6762f5a174259ae2cf93fe26ce"}]}
