)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"95b4a12f63a591951059f2c7729c408477142918","unresolved":true,"context_lines":[{"line_number":12,"context_line":"when the guest was suspended."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This behavior is due to libvirt not supporting the hot-unplug of"},{"line_number":15,"context_line":"mediated devices at the time the feature was being developed. The"},{"line_number":16,"context_line":"limitation has been lifted since then, and now we have to amend the"},{"line_number":17,"context_line":"resume function so it will reattach the mediated devices that were"},{"line_number":18,"context_line":"detached on suspension."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"4846d45e_153034b0","line":16,"range":{"start_line":15,"start_character":62,"end_line":16,"end_character":38},"updated":"2021-10-28 09:44:35.000000000","message":"Do you know what libvirt version provided the new functionality? Does our minimum libvirt version new enough to use this feature unconditionally?\n\nCurrent nova min libvirt version:\nMIN_LIBVIRT_VERSION \u003d (6, 0, 0)\nMIN_QEMU_VERSION \u003d (4, 2, 0)","commit_id":"f69b203c7c7952554a46141841f1a3ca8ab3e5ec"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"0359775093f6bd55feaf1a0f0c0bccc8216a0fc6","unresolved":true,"context_lines":[{"line_number":12,"context_line":"when the guest was suspended."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This behavior is due to libvirt not supporting the hot-unplug of"},{"line_number":15,"context_line":"mediated devices at the time the feature was being developed. The"},{"line_number":16,"context_line":"limitation has been lifted since then, and now we have to amend the"},{"line_number":17,"context_line":"resume function so it will reattach the mediated devices that were"},{"line_number":18,"context_line":"detached on suspension."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"d1ada034_e30cba34","line":16,"range":{"start_line":15,"start_character":62,"end_line":16,"end_character":38},"in_reply_to":"4846d45e_153034b0","updated":"2021-10-28 13:58:38.000000000","message":"The limitation was lifted in libvirt v4.3.0 [1]. Our deployment of OpenStack, which is on top of StarlingX, uses libvirt v4.7.0, and suspending a guest already works in it, so v6.0 should be very safe.","commit_id":"f69b203c7c7952554a46141841f1a3ca8ab3e5ec"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"09741218e1757d3ba05a2b5e5690712bec168f91","unresolved":true,"context_lines":[{"line_number":12,"context_line":"when the guest was suspended."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This behavior is due to libvirt not supporting the hot-unplug of"},{"line_number":15,"context_line":"mediated devices at the time the feature was being developed. The"},{"line_number":16,"context_line":"limitation has been lifted since then, and now we have to amend the"},{"line_number":17,"context_line":"resume function so it will reattach the mediated devices that were"},{"line_number":18,"context_line":"detached on suspension."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"f96dee35_79be92b1","line":16,"range":{"start_line":15,"start_character":62,"end_line":16,"end_character":38},"in_reply_to":"d1ada034_e30cba34","updated":"2021-10-28 13:59:13.000000000","message":"Missed the ref link: [1] https://libvirt.org/news.html#v4-3-0-2018-05-02","commit_id":"f69b203c7c7952554a46141841f1a3ca8ab3e5ec"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a539f7eb545fae484fa0a3f3af6b35fb53af1ac4","unresolved":false,"context_lines":[{"line_number":12,"context_line":"when the guest was suspended."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This behavior is due to libvirt not supporting the hot-unplug of"},{"line_number":15,"context_line":"mediated devices at the time the feature was being developed. The"},{"line_number":16,"context_line":"limitation has been lifted since then, and now we have to amend the"},{"line_number":17,"context_line":"resume function so it will reattach the mediated devices that were"},{"line_number":18,"context_line":"detached on suspension."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"2aca6a2a_32da91fa","line":16,"range":{"start_line":15,"start_character":62,"end_line":16,"end_character":38},"in_reply_to":"f96dee35_79be92b1","updated":"2021-11-04 16:57:52.000000000","message":"Sounds good. Thanks.","commit_id":"f69b203c7c7952554a46141841f1a3ca8ab3e5ec"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"118694b667a183b91f065dba8ec325229da95c9a","unresolved":true,"context_lines":[{"line_number":11,"context_line":"operation. This patch makes Nova reattach the mdevs that were detached"},{"line_number":12,"context_line":"when the guest was suspended."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This behavior is due to libvirt not supporting the hot-unplug of"},{"line_number":15,"context_line":"mediated devices at the time the feature was being developed. The"},{"line_number":16,"context_line":"limitation has been lifted since then, and now we have to amend the"},{"line_number":17,"context_line":"resume function so it will reattach the mediated devices that were"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"766bac4e_c5ce1d95","line":14,"range":{"start_line":14,"start_character":51,"end_line":14,"end_character":61},"updated":"2021-11-08 11:47:44.000000000","message":"hot-plug? We specifically want to plug them back in here right?","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"c4605e6f0ac5a162fed345c7dc77ab2b4cdef8ec","unresolved":true,"context_lines":[{"line_number":11,"context_line":"operation. This patch makes Nova reattach the mdevs that were detached"},{"line_number":12,"context_line":"when the guest was suspended."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This behavior is due to libvirt not supporting the hot-unplug of"},{"line_number":15,"context_line":"mediated devices at the time the feature was being developed. The"},{"line_number":16,"context_line":"limitation has been lifted since then, and now we have to amend the"},{"line_number":17,"context_line":"resume function so it will reattach the mediated devices that were"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"4d4cf628_2b3187b7","line":14,"range":{"start_line":14,"start_character":51,"end_line":14,"end_character":61},"in_reply_to":"766bac4e_c5ce1d95","updated":"2021-11-08 15:48:48.000000000","message":"Yes, correct. What I meant is that when mediated devices support was being implemented in Nova, libvirt didn\u0027t support the hot-unplug of those, so the suspend operation would try to do that, fail and rollback the suspension [1]. Since that failure does not occur anymore, the mdevs are now unplugged on suspension, and what we\u0027re doing here is plugging them back in when resuming.\n\n[1] https://opendev.org/openstack/nova/src/branch/master/nova/virt/libvirt/driver.py#L8003","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"118694b667a183b91f065dba8ec325229da95c9a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"operation. This patch makes Nova reattach the mdevs that were detached"},{"line_number":12,"context_line":"when the guest was suspended."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This behavior is due to libvirt not supporting the hot-unplug of"},{"line_number":15,"context_line":"mediated devices at the time the feature was being developed. The"},{"line_number":16,"context_line":"limitation has been lifted since then, and now we have to amend the"},{"line_number":17,"context_line":"resume function so it will reattach the mediated devices that were"},{"line_number":18,"context_line":"detached on suspension."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"663c600d_9d17edab","line":15,"range":{"start_line":14,"start_character":0,"end_line":15,"end_character":61},"updated":"2021-11-08 11:47:44.000000000","message":"supernit - This was introduced in v4.3.0 and kernel 4.10, MIN_LIBVIRT is currently v6.0.0.","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c3782a8d379c73eaf429bc3c0515750dd547b09e","unresolved":true,"context_lines":[{"line_number":11,"context_line":"operation. This patch makes Nova reattach the mdevs that were detached"},{"line_number":12,"context_line":"when the guest was suspended."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This behavior is due to libvirt not supporting the hot-unplug of"},{"line_number":15,"context_line":"mediated devices at the time the feature was being developed. The"},{"line_number":16,"context_line":"limitation has been lifted since then, and now we have to amend the"},{"line_number":17,"context_line":"resume function so it will reattach the mediated devices that were"},{"line_number":18,"context_line":"detached on suspension."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"8f475e7b_24139f25","line":15,"range":{"start_line":14,"start_character":0,"end_line":15,"end_character":61},"in_reply_to":"663c600d_9d17edab","updated":"2021-11-19 10:15:23.000000000","message":"This is not a supernit, we should somehow explain this in a release note.","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"a2b0617e5eb6236d80c0933d270030c58e05d6a1","unresolved":true,"context_lines":[{"line_number":11,"context_line":"operation. This patch makes Nova reattach the mdevs that were detached"},{"line_number":12,"context_line":"when the guest was suspended."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This behavior is due to libvirt not supporting the hot-unplug of"},{"line_number":15,"context_line":"mediated devices at the time the feature was being developed. The"},{"line_number":16,"context_line":"limitation has been lifted since then, and now we have to amend the"},{"line_number":17,"context_line":"resume function so it will reattach the mediated devices that were"},{"line_number":18,"context_line":"detached on suspension."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"dec9d1db_152804a1","line":15,"range":{"start_line":14,"start_character":0,"end_line":15,"end_character":61},"in_reply_to":"8f475e7b_24139f25","updated":"2021-11-19 16:07:19.000000000","message":"Is there something I should do regarding this?","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"fd6c1fbea8976a23c5f094eb6bd79cae00168a2a","unresolved":true,"context_lines":[{"line_number":11,"context_line":"operation. This patch makes Nova reattach the mdevs that were detached"},{"line_number":12,"context_line":"when the guest was suspended."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This behavior is due to libvirt not supporting the hot-unplug of"},{"line_number":15,"context_line":"mediated devices at the time the feature was being developed. The"},{"line_number":16,"context_line":"limitation has been lifted since then, and now we have to amend the"},{"line_number":17,"context_line":"resume function so it will reattach the mediated devices that were"},{"line_number":18,"context_line":"detached on suspension."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"b3dc89af_2487e586","line":15,"range":{"start_line":14,"start_character":0,"end_line":15,"end_character":61},"in_reply_to":"dec9d1db_152804a1","updated":"2021-11-19 18:07:38.000000000","message":"I wasn\u0027t aware of the release note process; just added one.","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":32349,"name":"Thiago Paiva Brito","email":"thiago.brito@windriver.com","username":"outbrito"},"change_message_id":"f62e87e49b10e68be71dd415d6178d2f63c933e3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"197b40cf_ec7fc0e4","updated":"2021-10-25 19:40:11.000000000","message":"+1 with a request to backport this to stable versions","commit_id":"dc9140ad307a3b7b9d9910be815c882263b7f586"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"279d342c5c43c2dfff639ba0dbf31fe634ffe574","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"80441bbe_2fa03123","updated":"2021-10-25 22:15:10.000000000","message":"recheck","commit_id":"dc9140ad307a3b7b9d9910be815c882263b7f586"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"c4605e6f0ac5a162fed345c7dc77ab2b4cdef8ec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1f039907_0d67641a","in_reply_to":"80441bbe_2fa03123","updated":"2021-11-08 15:48:48.000000000","message":"Marking as resolved.","commit_id":"dc9140ad307a3b7b9d9910be815c882263b7f586"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"95b4a12f63a591951059f2c7729c408477142918","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e1faf0be_5e17bfa7","updated":"2021-10-28 09:44:35.000000000","message":"I have a question inline","commit_id":"f69b203c7c7952554a46141841f1a3ca8ab3e5ec"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"0359775093f6bd55feaf1a0f0c0bccc8216a0fc6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"abc749f5_fdb3c043","updated":"2021-10-28 13:58:38.000000000","message":"Thank you for reviewing! Reply is inline.","commit_id":"f69b203c7c7952554a46141841f1a3ca8ab3e5ec"},{"author":{"_account_id":32618,"name":"Daniel de Oliveira Pereira","display_name":"Daniel Pereira","email":"Daniel.Pereira@windriver.com","username":"danielpereira01"},"change_message_id":"ea987d16a1238c6ef209c38ca10bf0d039661c69","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"93f63934_0a0b8ead","updated":"2021-10-26 16:55:49.000000000","message":"Thanks Gustavo, LGTM.","commit_id":"f69b203c7c7952554a46141841f1a3ca8ab3e5ec"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a539f7eb545fae484fa0a3f3af6b35fb53af1ac4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f3bf230a_649650c7","updated":"2021-11-04 16:57:52.000000000","message":"Thanks for the response, I have some further comments inline.","commit_id":"f69b203c7c7952554a46141841f1a3ca8ab3e5ec"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"118694b667a183b91f065dba8ec325229da95c9a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1dd436c4_d433df23","updated":"2021-11-08 11:47:44.000000000","message":"I\u0027m likely missing something but why are these devices not attached with the launch of the domain if they are already present in the XML?","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c3782a8d379c73eaf429bc3c0515750dd547b09e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"cf0520ac_18f60c20","updated":"2021-11-19 10:15:23.000000000","message":"Just a -1 because of a few nits, but thanks for working on it !","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"36aceddc4aa3ae72f1c291129251d79848944b59","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"d2c13034_f124de67","updated":"2021-11-05 12:19:37.000000000","message":"Looks good to me. Thanks Gustavo!","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"c4605e6f0ac5a162fed345c7dc77ab2b4cdef8ec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"5e982047_5ad041a9","updated":"2021-11-08 15:48:48.000000000","message":"Thank you for reviewing! Replies inline.","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"88f8a023c611694bf340695e6e94f2176176a07e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"2f2023e7_162e42c9","updated":"2021-11-11 16:55:46.000000000","message":"Thank you for your time. Reply is inline.","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"2c7e0777523d424a883a2236dcbe5a7beccbe7ac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"bba07d4a_f7ddb795","updated":"2021-11-04 20:32:24.000000000","message":"Thanks for your attention. Replies inline.","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"a2b0617e5eb6236d80c0933d270030c58e05d6a1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f85a8775_44686099","updated":"2021-11-19 16:07:19.000000000","message":"Thank you for reviewing! New patchset uploaded, fixed some nits.","commit_id":"d4a795ceaa0dc935f677e8419162a7957a3a262b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9ffd1247cdd2d7b1edf13942a76f98945b547cb0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"6f5976a3_4c8579f8","updated":"2021-12-03 09:53:24.000000000","message":"I\u0027m OK with the direction but I\u0027d very appreciate if you could just respin for the doc addition as we want to know which SHA1 fixed the issue by looking at the git blame for the doc.\n\nFor the resume for snapshot, as you want, either you modify it now as Sean asked or you can provide a follow-up, I\u0027m OK.","commit_id":"217f7e79f866077c4f317700d7591eaf3ea1a543"},{"author":{"_account_id":14675,"name":"Hugo Nicodemos","email":"hugo.brito@windriver.com","username":"nicodemos"},"change_message_id":"5923b81dc8a073840902dca1433ee9246a0e8300","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"9340b4a4_3d1e492d","updated":"2021-11-25 19:11:51.000000000","message":"LGTM, thanks Gustavo.","commit_id":"217f7e79f866077c4f317700d7591eaf3ea1a543"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"e2a4099fe390ad3db3ed57e1e9ea54a94ced0204","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"77917419_7b27e3e0","updated":"2021-11-26 11:02:06.000000000","message":"This is an awkward one, I think I understand how we are able to find these devices in the persistent XML and how they are missing from the active domain after the call to virDomainCreateWithFlags essentially resumes the saved state of the domain from the previous virDomainManagedSave call.\n\nI\u0027d appreciate it if someone could follow up with some TODOs here to detach the device from the persistent domain as well and rely on some other method to reattach these devices that doesn\u0027t rely on the XML.\n\nAnyway, I\u0027m +2 for now.","commit_id":"217f7e79f866077c4f317700d7591eaf3ea1a543"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"d116aa9329a46cf20706af548a92e673048a3875","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d10a3b7c_a08d5e68","updated":"2021-11-19 19:54:25.000000000","message":"recheck","commit_id":"217f7e79f866077c4f317700d7591eaf3ea1a543"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"f106fb8fc7274693e3c0ae049a73a6ea299eb3de","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1cc24c81_d54bc772","in_reply_to":"6f5976a3_4c8579f8","updated":"2021-12-03 18:21:41.000000000","message":"Opened a new LP for it: https://bugs.launchpad.net/nova/+bug/1953190","commit_id":"217f7e79f866077c4f317700d7591eaf3ea1a543"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"f106fb8fc7274693e3c0ae049a73a6ea299eb3de","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d1e8eaa1_2c3db040","updated":"2021-12-03 18:21:41.000000000","message":"Thanks for reviewing! Replies inline.","commit_id":"98388de748c3d42703c14b049b2004dd0fee3184"},{"author":{"_account_id":32349,"name":"Thiago Paiva Brito","email":"thiago.brito@windriver.com","username":"outbrito"},"change_message_id":"2496fded9ad205096cf0e3f014772c7bc94d6b9a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"6953224e_b17dc8a6","updated":"2021-12-03 22:52:51.000000000","message":"recheck","commit_id":"98388de748c3d42703c14b049b2004dd0fee3184"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e049ee33f729344082f4b6a46f321bf3b03b9db4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"d8e070f6_ee336077","updated":"2021-12-08 14:12:05.000000000","message":"Fix makes sense to me. Thanks!","commit_id":"16f7c601b63bd1e7ca13917261300a7064ec72bc"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"79b34413e2520736d6fbb8e82ff428b740e0f698","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c396b7f8_b70b042c","updated":"2021-12-07 14:53:20.000000000","message":"Thanks, this is very helpful for the community and I really appreciate your patience for letting us to review your change.","commit_id":"16f7c601b63bd1e7ca13917261300a7064ec72bc"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a539f7eb545fae484fa0a3f3af6b35fb53af1ac4","unresolved":true,"context_lines":[{"line_number":16586,"context_line":"            self.assertTrue(mock_sync_time.called)"},{"line_number":16587,"context_line":"            _attach_pci_devices.assert_has_calls([mock.call(guest,"},{"line_number":16588,"context_line":"                                                 \u0027fake_pci_devs\u0027)])"},{"line_number":16589,"context_line":"            _attach_mediated_devices.assert_has_calls([mock.call(guest,"},{"line_number":16590,"context_line":"                                                 \u0027fake_mdevs\u0027)])"},{"line_number":16591,"context_line":""},{"line_number":16592,"context_line":"    @mock.patch.object(host.Host, \u0027_get_domain\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3424d3f5_d2e037de","line":16589,"range":{"start_line":16589,"start_character":53,"end_line":16589,"end_character":55},"updated":"2021-11-04 16:57:52.000000000","message":"nit: I would wrap the line between \"(\" and \"[\"","commit_id":"f69b203c7c7952554a46141841f1a3ca8ab3e5ec"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"2c7e0777523d424a883a2236dcbe5a7beccbe7ac","unresolved":false,"context_lines":[{"line_number":16586,"context_line":"            self.assertTrue(mock_sync_time.called)"},{"line_number":16587,"context_line":"            _attach_pci_devices.assert_has_calls([mock.call(guest,"},{"line_number":16588,"context_line":"                                                 \u0027fake_pci_devs\u0027)])"},{"line_number":16589,"context_line":"            _attach_mediated_devices.assert_has_calls([mock.call(guest,"},{"line_number":16590,"context_line":"                                                 \u0027fake_mdevs\u0027)])"},{"line_number":16591,"context_line":""},{"line_number":16592,"context_line":"    @mock.patch.object(host.Host, \u0027_get_domain\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c53b5109_d1a4db39","line":16589,"range":{"start_line":16589,"start_character":53,"end_line":16589,"end_character":55},"in_reply_to":"3424d3f5_d2e037de","updated":"2021-11-04 20:32:24.000000000","message":"Done","commit_id":"f69b203c7c7952554a46141841f1a3ca8ab3e5ec"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":32618,"name":"Daniel de Oliveira Pereira","display_name":"Daniel Pereira","email":"Daniel.Pereira@windriver.com","username":"danielpereira01"},"change_message_id":"e7f8d9ec6334f7006d1a7527879c97498f8728d1","unresolved":true,"context_lines":[{"line_number":8026,"context_line":"            except libvirt.libvirtError as ex:"},{"line_number":8027,"context_line":"                error_code \u003d ex.get_error_code()"},{"line_number":8028,"context_line":"                if error_code \u003d\u003d libvirt.VIR_ERR_DEVICE_MISSING:"},{"line_number":8029,"context_line":"                    LOG.warning(\"The vGPU previously allocated for this \""},{"line_number":8030,"context_line":"                                \"instance does not exist anymore. Resuming \""},{"line_number":8031,"context_line":"                                \"without a vGPU...\")"},{"line_number":8032,"context_line":"                else:"},{"line_number":8033,"context_line":"                    raise"},{"line_number":8034,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dcf1035d_c70b2f0b","line":8031,"range":{"start_line":8029,"start_character":20,"end_line":8031,"end_character":52},"updated":"2021-10-26 13:58:48.000000000","message":"Does this only apply to GPU devices? Shouldn\u0027t we use a more generic log message here?","commit_id":"dc9140ad307a3b7b9d9910be815c882263b7f586"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"680b30e5eee8e9c246da717b851c2e0dbf5f1a3d","unresolved":false,"context_lines":[{"line_number":8026,"context_line":"            except libvirt.libvirtError as ex:"},{"line_number":8027,"context_line":"                error_code \u003d ex.get_error_code()"},{"line_number":8028,"context_line":"                if error_code \u003d\u003d libvirt.VIR_ERR_DEVICE_MISSING:"},{"line_number":8029,"context_line":"                    LOG.warning(\"The vGPU previously allocated for this \""},{"line_number":8030,"context_line":"                                \"instance does not exist anymore. Resuming \""},{"line_number":8031,"context_line":"                                \"without a vGPU...\")"},{"line_number":8032,"context_line":"                else:"},{"line_number":8033,"context_line":"                    raise"},{"line_number":8034,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"121d1658_28372b19","line":8031,"range":{"start_line":8029,"start_character":20,"end_line":8031,"end_character":52},"in_reply_to":"dcf1035d_c70b2f0b","updated":"2021-10-26 15:27:03.000000000","message":"Done","commit_id":"dc9140ad307a3b7b9d9910be815c882263b7f586"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a539f7eb545fae484fa0a3f3af6b35fb53af1ac4","unresolved":true,"context_lines":[{"line_number":8022,"context_line":"    def _attach_mediated_devices(self, guest, devs):"},{"line_number":8023,"context_line":"        for mdev_cfg in devs:"},{"line_number":8024,"context_line":"            try:"},{"line_number":8025,"context_line":"                guest.attach_device(mdev_cfg, live\u003dTrue)"},{"line_number":8026,"context_line":"            except libvirt.libvirtError as ex:"},{"line_number":8027,"context_line":"                error_code \u003d ex.get_error_code()"},{"line_number":8028,"context_line":"                if error_code \u003d\u003d libvirt.VIR_ERR_DEVICE_MISSING:"}],"source_content_type":"text/x-python","patch_set":2,"id":"f658f023_161c4aba","line":8025,"updated":"2021-11-04 16:57:52.000000000","message":"I\u0027m wondering if we want to make this persistent\u003dTrue, live\u003dTrue so that we don\u0027t loose the mdevs during a subsequent soft reboot","commit_id":"f69b203c7c7952554a46141841f1a3ca8ab3e5ec"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"36aceddc4aa3ae72f1c291129251d79848944b59","unresolved":false,"context_lines":[{"line_number":8022,"context_line":"    def _attach_mediated_devices(self, guest, devs):"},{"line_number":8023,"context_line":"        for mdev_cfg in devs:"},{"line_number":8024,"context_line":"            try:"},{"line_number":8025,"context_line":"                guest.attach_device(mdev_cfg, live\u003dTrue)"},{"line_number":8026,"context_line":"            except libvirt.libvirtError as ex:"},{"line_number":8027,"context_line":"                error_code \u003d ex.get_error_code()"},{"line_number":8028,"context_line":"                if error_code \u003d\u003d libvirt.VIR_ERR_DEVICE_MISSING:"}],"source_content_type":"text/x-python","patch_set":2,"id":"e3b8ad5a_83140a6d","line":8025,"in_reply_to":"4375d74c_541a432e","updated":"2021-11-05 12:19:37.000000000","message":"Ohh, good, then we are symmetric. Thanks for the explanation.","commit_id":"f69b203c7c7952554a46141841f1a3ca8ab3e5ec"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"2c7e0777523d424a883a2236dcbe5a7beccbe7ac","unresolved":true,"context_lines":[{"line_number":8022,"context_line":"    def _attach_mediated_devices(self, guest, devs):"},{"line_number":8023,"context_line":"        for mdev_cfg in devs:"},{"line_number":8024,"context_line":"            try:"},{"line_number":8025,"context_line":"                guest.attach_device(mdev_cfg, live\u003dTrue)"},{"line_number":8026,"context_line":"            except libvirt.libvirtError as ex:"},{"line_number":8027,"context_line":"                error_code \u003d ex.get_error_code()"},{"line_number":8028,"context_line":"                if error_code \u003d\u003d libvirt.VIR_ERR_DEVICE_MISSING:"}],"source_content_type":"text/x-python","patch_set":2,"id":"4375d74c_541a432e","line":8025,"in_reply_to":"f658f023_161c4aba","updated":"2021-11-04 20:32:24.000000000","message":"I don\u0027t think we do, as the suspend function calls detach_device with persistent\u003dFalse. Trying to call this here with persistent\u003dTrue returns an error saying that the device is already in the domain config.","commit_id":"f69b203c7c7952554a46141841f1a3ca8ab3e5ec"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"118694b667a183b91f065dba8ec325229da95c9a","unresolved":true,"context_lines":[{"line_number":3972,"context_line":"        mdevs \u003d self._recover_attached_mdevs_from_guest_config(xml)"},{"line_number":3973,"context_line":"        # NOTE(efried): The instance should already have a vtpm_secret_uuid"},{"line_number":3974,"context_line":"        # registered if appropriate."},{"line_number":3975,"context_line":"        guest \u003d self._create_guest_with_network("},{"line_number":3976,"context_line":"            context, xml, instance, network_info, block_device_info,"},{"line_number":3977,"context_line":"            vifs_already_plugged\u003dTrue)"},{"line_number":3978,"context_line":"        self._attach_pci_devices(guest,"},{"line_number":3979,"context_line":"            pci_manager.get_instance_pci_devs(instance))"},{"line_number":3980,"context_line":"        self._attach_direct_passthrough_ports("}],"source_content_type":"text/x-python","patch_set":3,"id":"e75457fb_63f41ff4","line":3977,"range":{"start_line":3975,"start_character":0,"end_line":3977,"end_character":38},"updated":"2021-11-08 11:47:44.000000000","message":"My PCI/mdev foo is pretty weak but why doesn\u0027t libvirtd reattach things for us during domain creation here if the devices are already in the XML?","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"ef91bd1edd41146b6662891b5c3b40f69584dcc4","unresolved":true,"context_lines":[{"line_number":3972,"context_line":"        mdevs \u003d self._recover_attached_mdevs_from_guest_config(xml)"},{"line_number":3973,"context_line":"        # NOTE(efried): The instance should already have a vtpm_secret_uuid"},{"line_number":3974,"context_line":"        # registered if appropriate."},{"line_number":3975,"context_line":"        guest \u003d self._create_guest_with_network("},{"line_number":3976,"context_line":"            context, xml, instance, network_info, block_device_info,"},{"line_number":3977,"context_line":"            vifs_already_plugged\u003dTrue)"},{"line_number":3978,"context_line":"        self._attach_pci_devices(guest,"},{"line_number":3979,"context_line":"            pci_manager.get_instance_pci_devs(instance))"},{"line_number":3980,"context_line":"        self._attach_direct_passthrough_ports("}],"source_content_type":"text/x-python","patch_set":3,"id":"af6730a8_3c15909a","line":3977,"range":{"start_line":3975,"start_character":0,"end_line":3977,"end_character":38},"in_reply_to":"7f8e60b4_00a8a421","updated":"2021-11-10 14:19:47.000000000","message":"I really don\u0027t think we should see these devices still in the domains XML if they had actually been detached correctly.\n\nLooking at _detach_mediated_devices it\u0027s calling guest.detach_device that only calls libvirt once to detach the device and doesn\u0027t wait. What you could be seeing here is a race between that call and the managedSave that follows but AFAIK cause the managedSave call to fail?\n\nEither way I think we really need to use nova.virt.libvirt.guest.Guest.detach_device_with_retry to detach these devices from the domain.","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"88f8a023c611694bf340695e6e94f2176176a07e","unresolved":true,"context_lines":[{"line_number":3972,"context_line":"        mdevs \u003d self._recover_attached_mdevs_from_guest_config(xml)"},{"line_number":3973,"context_line":"        # NOTE(efried): The instance should already have a vtpm_secret_uuid"},{"line_number":3974,"context_line":"        # registered if appropriate."},{"line_number":3975,"context_line":"        guest \u003d self._create_guest_with_network("},{"line_number":3976,"context_line":"            context, xml, instance, network_info, block_device_info,"},{"line_number":3977,"context_line":"            vifs_already_plugged\u003dTrue)"},{"line_number":3978,"context_line":"        self._attach_pci_devices(guest,"},{"line_number":3979,"context_line":"            pci_manager.get_instance_pci_devs(instance))"},{"line_number":3980,"context_line":"        self._attach_direct_passthrough_ports("}],"source_content_type":"text/x-python","patch_set":3,"id":"f27cb103_acc89a89","line":3977,"range":{"start_line":3975,"start_character":0,"end_line":3977,"end_character":38},"in_reply_to":"af6730a8_3c15909a","updated":"2021-11-11 16:55:46.000000000","message":"I have tested the detach function with a 10 second sleep after the libvirt call and the result is the same... There seems to be no race condition here. The device was still in the xml.\n\nThe detach_device_with_retry function you mentioned does not seem to exist. Maybe it was removed?","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"c4605e6f0ac5a162fed345c7dc77ab2b4cdef8ec","unresolved":true,"context_lines":[{"line_number":3972,"context_line":"        mdevs \u003d self._recover_attached_mdevs_from_guest_config(xml)"},{"line_number":3973,"context_line":"        # NOTE(efried): The instance should already have a vtpm_secret_uuid"},{"line_number":3974,"context_line":"        # registered if appropriate."},{"line_number":3975,"context_line":"        guest \u003d self._create_guest_with_network("},{"line_number":3976,"context_line":"            context, xml, instance, network_info, block_device_info,"},{"line_number":3977,"context_line":"            vifs_already_plugged\u003dTrue)"},{"line_number":3978,"context_line":"        self._attach_pci_devices(guest,"},{"line_number":3979,"context_line":"            pci_manager.get_instance_pci_devs(instance))"},{"line_number":3980,"context_line":"        self._attach_direct_passthrough_ports("}],"source_content_type":"text/x-python","patch_set":3,"id":"7f8e60b4_00a8a421","line":3977,"range":{"start_line":3975,"start_character":0,"end_line":3977,"end_character":38},"in_reply_to":"e75457fb_63f41ff4","updated":"2021-11-08 15:48:48.000000000","message":"This is uncertain for me as well, but since the mdev exists in the XML at this moment but is not in the guest when it comes up, my guess is that libvirt persists the unplug somewhere and \"remembers\" this when recreating the domain. After the guest comes back up, the mdev is gone from the XML.","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e049ee33f729344082f4b6a46f321bf3b03b9db4","unresolved":true,"context_lines":[{"line_number":3972,"context_line":"        mdevs \u003d self._recover_attached_mdevs_from_guest_config(xml)"},{"line_number":3973,"context_line":"        # NOTE(efried): The instance should already have a vtpm_secret_uuid"},{"line_number":3974,"context_line":"        # registered if appropriate."},{"line_number":3975,"context_line":"        guest \u003d self._create_guest_with_network("},{"line_number":3976,"context_line":"            context, xml, instance, network_info, block_device_info,"},{"line_number":3977,"context_line":"            vifs_already_plugged\u003dTrue)"},{"line_number":3978,"context_line":"        self._attach_pci_devices(guest,"},{"line_number":3979,"context_line":"            pci_manager.get_instance_pci_devs(instance))"},{"line_number":3980,"context_line":"        self._attach_direct_passthrough_ports("}],"source_content_type":"text/x-python","patch_set":3,"id":"971e0da7_bcaa679a","line":3977,"range":{"start_line":3975,"start_character":0,"end_line":3977,"end_character":38},"in_reply_to":"f27cb103_acc89a89","updated":"2021-12-08 14:12:05.000000000","message":"I think Lee tries to refer to nova.virt.libvirt.driver.LibvirtDriver._detach_with_retry()\n\nThe _detach_mediated_devices only detach the device from the live domain so the device remains in the persistent domain (XML)\n\nIn general the LibvirtDriver.suspend() does not use the LibvirtDriver._detach_with_retry() with pci devices either but calling guest.detach_device() directly and also calls it a way that only detach the device from the live domain not from the persistent one.","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"ef91bd1edd41146b6662891b5c3b40f69584dcc4","unresolved":true,"context_lines":[{"line_number":8002,"context_line":"            devtype\u003dvconfig.LibvirtConfigGuestHostdevMDEV)"},{"line_number":8003,"context_line":"        for mdev_cfg in mdevs:"},{"line_number":8004,"context_line":"            try:"},{"line_number":8005,"context_line":"                guest.detach_device(mdev_cfg, live\u003dTrue)"},{"line_number":8006,"context_line":"            except libvirt.libvirtError as ex:"},{"line_number":8007,"context_line":"                error_code \u003d ex.get_error_code()"},{"line_number":8008,"context_line":"                # NOTE(sbauza): There is a pending issue with libvirt that"}],"source_content_type":"text/x-python","patch_set":3,"id":"59473cde_d2d67251","line":8005,"range":{"start_line":8005,"start_character":22,"end_line":8005,"end_character":35},"updated":"2021-11-10 14:19:47.000000000","message":"As below this doesn\u0027t look right at first glance.","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"88f8a023c611694bf340695e6e94f2176176a07e","unresolved":true,"context_lines":[{"line_number":8002,"context_line":"            devtype\u003dvconfig.LibvirtConfigGuestHostdevMDEV)"},{"line_number":8003,"context_line":"        for mdev_cfg in mdevs:"},{"line_number":8004,"context_line":"            try:"},{"line_number":8005,"context_line":"                guest.detach_device(mdev_cfg, live\u003dTrue)"},{"line_number":8006,"context_line":"            except libvirt.libvirtError as ex:"},{"line_number":8007,"context_line":"                error_code \u003d ex.get_error_code()"},{"line_number":8008,"context_line":"                # NOTE(sbauza): There is a pending issue with libvirt that"}],"source_content_type":"text/x-python","patch_set":3,"id":"1e3a1557_224b86a2","line":8005,"range":{"start_line":8005,"start_character":22,"end_line":8005,"end_character":35},"in_reply_to":"59473cde_d2d67251","updated":"2021-11-11 16:55:46.000000000","message":"Ack","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"ef91bd1edd41146b6662891b5c3b40f69584dcc4","unresolved":true,"context_lines":[{"line_number":8009,"context_line":"                # doesn\u0027t allow to hot-unplug mediated devices. Let\u0027s"},{"line_number":8010,"context_line":"                # short-circuit the suspend action and set the instance back"},{"line_number":8011,"context_line":"                # to ACTIVE."},{"line_number":8012,"context_line":"                # TODO(sbauza): Once libvirt supports this, amend the resume()"},{"line_number":8013,"context_line":"                # operation to support reallocating mediated devices."},{"line_number":8014,"context_line":"                if error_code \u003d\u003d libvirt.VIR_ERR_CONFIG_UNSUPPORTED:"},{"line_number":8015,"context_line":"                    reason \u003d _(\"Suspend is not supported for instances having \""},{"line_number":8016,"context_line":"                               \"attached mediated devices.\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"4e0d0998_f508428f","line":8013,"range":{"start_line":8012,"start_character":0,"end_line":8013,"end_character":69},"updated":"2021-11-10 14:19:47.000000000","message":"nit - You can remove this.","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"88f8a023c611694bf340695e6e94f2176176a07e","unresolved":true,"context_lines":[{"line_number":8009,"context_line":"                # doesn\u0027t allow to hot-unplug mediated devices. Let\u0027s"},{"line_number":8010,"context_line":"                # short-circuit the suspend action and set the instance back"},{"line_number":8011,"context_line":"                # to ACTIVE."},{"line_number":8012,"context_line":"                # TODO(sbauza): Once libvirt supports this, amend the resume()"},{"line_number":8013,"context_line":"                # operation to support reallocating mediated devices."},{"line_number":8014,"context_line":"                if error_code \u003d\u003d libvirt.VIR_ERR_CONFIG_UNSUPPORTED:"},{"line_number":8015,"context_line":"                    reason \u003d _(\"Suspend is not supported for instances having \""},{"line_number":8016,"context_line":"                               \"attached mediated devices.\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"b3ba76a9_3fcdaaea","line":8013,"range":{"start_line":8012,"start_character":0,"end_line":8013,"end_character":69},"in_reply_to":"4e0d0998_f508428f","updated":"2021-11-11 16:55:46.000000000","message":"Ack","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c3782a8d379c73eaf429bc3c0515750dd547b09e","unresolved":true,"context_lines":[{"line_number":8031,"context_line":"                else:"},{"line_number":8032,"context_line":"                    raise"},{"line_number":8033,"context_line":""},{"line_number":8034,"context_line":"    def _recover_attached_mdevs_from_guest_config(self, xml):"},{"line_number":8035,"context_line":"        config \u003d vconfig.LibvirtConfigGuest()"},{"line_number":8036,"context_line":"        config.parse_str(xml)"},{"line_number":8037,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"b4bc0590_ac841d85","line":8034,"updated":"2021-11-19 10:15:23.000000000","message":"Fortunately, this works because a suspended guest continues to have the mdevs in its XML, so when we look at which mdevs are not used (for providing them to a new instance), we find them :\n\nhttps://github.com/openstack/nova/blob/69b0d31/nova/virt/libvirt/driver.py#L7850\n\nI think you should explain this here in a comment as we are sure that the returned mdevs for this method are no used now by other instances.","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c3782a8d379c73eaf429bc3c0515750dd547b09e","unresolved":true,"context_lines":[{"line_number":8031,"context_line":"                else:"},{"line_number":8032,"context_line":"                    raise"},{"line_number":8033,"context_line":""},{"line_number":8034,"context_line":"    def _recover_attached_mdevs_from_guest_config(self, xml):"},{"line_number":8035,"context_line":"        config \u003d vconfig.LibvirtConfigGuest()"},{"line_number":8036,"context_line":"        config.parse_str(xml)"},{"line_number":8037,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"e417b780_f96406ea","line":8034,"range":{"start_line":8034,"start_character":8,"end_line":8034,"end_character":49},"updated":"2021-11-19 10:15:23.000000000","message":"nit : the method name could be \u0027get_mdevs_from_guest_config(self, xml)\u0027","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"a2b0617e5eb6236d80c0933d270030c58e05d6a1","unresolved":false,"context_lines":[{"line_number":8031,"context_line":"                else:"},{"line_number":8032,"context_line":"                    raise"},{"line_number":8033,"context_line":""},{"line_number":8034,"context_line":"    def _recover_attached_mdevs_from_guest_config(self, xml):"},{"line_number":8035,"context_line":"        config \u003d vconfig.LibvirtConfigGuest()"},{"line_number":8036,"context_line":"        config.parse_str(xml)"},{"line_number":8037,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fff23651_cc953b8b","line":8034,"in_reply_to":"b4bc0590_ac841d85","updated":"2021-11-19 16:07:19.000000000","message":"Done","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"a2b0617e5eb6236d80c0933d270030c58e05d6a1","unresolved":false,"context_lines":[{"line_number":8031,"context_line":"                else:"},{"line_number":8032,"context_line":"                    raise"},{"line_number":8033,"context_line":""},{"line_number":8034,"context_line":"    def _recover_attached_mdevs_from_guest_config(self, xml):"},{"line_number":8035,"context_line":"        config \u003d vconfig.LibvirtConfigGuest()"},{"line_number":8036,"context_line":"        config.parse_str(xml)"},{"line_number":8037,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"2a1e2be3_79fc6a17","line":8034,"range":{"start_line":8034,"start_character":8,"end_line":8034,"end_character":49},"in_reply_to":"e417b780_f96406ea","updated":"2021-11-19 16:07:19.000000000","message":"Done","commit_id":"3635551db0e53f47cbbd9ba10c8ce3698d303216"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c10d233f402fa39ae9f7bb57db9335057dc97906","unresolved":true,"context_lines":[{"line_number":3027,"context_line":"        # ...and neither does a non-running domain"},{"line_number":3028,"context_line":"        return current_power_state in (power_state.RUNNING, power_state.PAUSED)"},{"line_number":3029,"context_line":""},{"line_number":3030,"context_line":"    def _suspend_guest_for_snapshot("},{"line_number":3031,"context_line":"        self,"},{"line_number":3032,"context_line":"        context: nova_context.RequestContext,"},{"line_number":3033,"context_line":"        live_snapshot: bool,"},{"line_number":3034,"context_line":"        current_power_state: int,"},{"line_number":3035,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":3036,"context_line":"    ):"},{"line_number":3037,"context_line":"        if self._needs_suspend_resume_for_snapshot("},{"line_number":3038,"context_line":"            live_snapshot, current_power_state,"},{"line_number":3039,"context_line":"        ):"},{"line_number":3040,"context_line":"            self.suspend(context, instance)"},{"line_number":3041,"context_line":""},{"line_number":3042,"context_line":"    def _resume_guest_after_snapshot("},{"line_number":3043,"context_line":"        self,"},{"line_number":3044,"context_line":"        context: nova_context.RequestContext,"},{"line_number":3045,"context_line":"        live_snapshot: bool,"},{"line_number":3046,"context_line":"        original_power_state: int,"},{"line_number":3047,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":3048,"context_line":"        guest: libvirt_guest.Guest,"},{"line_number":3049,"context_line":"    ):"},{"line_number":3050,"context_line":"        if not self._needs_suspend_resume_for_snapshot("},{"line_number":3051,"context_line":"            live_snapshot, original_power_state,"},{"line_number":3052,"context_line":"        ):"},{"line_number":3053,"context_line":"            return"},{"line_number":3054,"context_line":""},{"line_number":3055,"context_line":"        current_power_state \u003d guest.get_power_state(self._host)"},{"line_number":3056,"context_line":""},{"line_number":3057,"context_line":"        # TODO(stephenfin): Any reason we couldn\u0027t use \u0027self.resume\u0027 here?"},{"line_number":3058,"context_line":"        guest.launch(pause\u003dcurrent_power_state \u003d\u003d power_state.PAUSED)"},{"line_number":3059,"context_line":""},{"line_number":3060,"context_line":"        self._attach_pci_devices("},{"line_number":3061,"context_line":"            guest, pci_manager.get_instance_pci_devs(instance))"},{"line_number":3062,"context_line":"        self._attach_direct_passthrough_ports(context, instance, guest)"},{"line_number":3063,"context_line":""},{"line_number":3064,"context_line":"    def _can_set_admin_password(self, image_meta):"},{"line_number":3065,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"486b9aed_20c52757","line":3062,"range":{"start_line":3030,"start_character":4,"end_line":3062,"end_character":71},"updated":"2021-11-26 11:40:35.000000000","message":"so suspend guest for snapshot just calls suspend but resume guest for snap shot does not.\nse we either need to also reattach the mdevs here or just follow stephens todo and call resume here\n\n\n    def resume(self, context, instance, network_info, block_device_info\u003dNone):\n        \"\"\"resume the specified instance.\"\"\"\n        xml \u003d self._get_existing_domain_xml(instance, network_info,\n                                            block_device_info)\n        # NOTE(gsantos): The mediated devices that were removed on suspension\n        # are still present in the xml. Let\u0027s take their references from it\n        # and re-attach them.\n        mdevs \u003d self._get_mdevs_from_guest_config(xml)\n        # NOTE(efried): The instance should already have a vtpm_secret_uuid\n        # registered if appropriate.\n        guest \u003d self._create_guest_with_network(\n            context, xml, instance, network_info, block_device_info,\n            vifs_already_plugged\u003dTrue)\n        self._attach_pci_devices(guest,\n            pci_manager.get_instance_pci_devs(instance))\n        self._attach_direct_passthrough_ports(\n            context, instance, guest, network_info)\n        self._attach_mediated_devices(guest, mdevs)\n        timer \u003d loopingcall.FixedIntervalLoopingCall(self._wait_for_running,\n                                                     instance)\n        timer.start(interval\u003d0.5).wait()\n        guest.sync_guest_time()\n\n\nresume does a tiny bit more then  this does but i think that is ok\n\nwe can either factor out the common code into an _resume fucntion and have both call _resume or likely just repalce this with a direct call to resume.\n\n\nfor this patch i would suggest just adding\nmdevs \u003d self._get_mdevs_from_guest_config(xml)\nand \nself._attach_mediated_devices(guest, mdevs)\nand then a followup patch to jsut use resume.","commit_id":"217f7e79f866077c4f317700d7591eaf3ea1a543"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"2d72bcb47439ab44bce0127f3c955e16017614b1","unresolved":true,"context_lines":[{"line_number":3027,"context_line":"        # ...and neither does a non-running domain"},{"line_number":3028,"context_line":"        return current_power_state in (power_state.RUNNING, power_state.PAUSED)"},{"line_number":3029,"context_line":""},{"line_number":3030,"context_line":"    def _suspend_guest_for_snapshot("},{"line_number":3031,"context_line":"        self,"},{"line_number":3032,"context_line":"        context: nova_context.RequestContext,"},{"line_number":3033,"context_line":"        live_snapshot: bool,"},{"line_number":3034,"context_line":"        current_power_state: int,"},{"line_number":3035,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":3036,"context_line":"    ):"},{"line_number":3037,"context_line":"        if self._needs_suspend_resume_for_snapshot("},{"line_number":3038,"context_line":"            live_snapshot, current_power_state,"},{"line_number":3039,"context_line":"        ):"},{"line_number":3040,"context_line":"            self.suspend(context, instance)"},{"line_number":3041,"context_line":""},{"line_number":3042,"context_line":"    def _resume_guest_after_snapshot("},{"line_number":3043,"context_line":"        self,"},{"line_number":3044,"context_line":"        context: nova_context.RequestContext,"},{"line_number":3045,"context_line":"        live_snapshot: bool,"},{"line_number":3046,"context_line":"        original_power_state: int,"},{"line_number":3047,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":3048,"context_line":"        guest: libvirt_guest.Guest,"},{"line_number":3049,"context_line":"    ):"},{"line_number":3050,"context_line":"        if not self._needs_suspend_resume_for_snapshot("},{"line_number":3051,"context_line":"            live_snapshot, original_power_state,"},{"line_number":3052,"context_line":"        ):"},{"line_number":3053,"context_line":"            return"},{"line_number":3054,"context_line":""},{"line_number":3055,"context_line":"        current_power_state \u003d guest.get_power_state(self._host)"},{"line_number":3056,"context_line":""},{"line_number":3057,"context_line":"        # TODO(stephenfin): Any reason we couldn\u0027t use \u0027self.resume\u0027 here?"},{"line_number":3058,"context_line":"        guest.launch(pause\u003dcurrent_power_state \u003d\u003d power_state.PAUSED)"},{"line_number":3059,"context_line":""},{"line_number":3060,"context_line":"        self._attach_pci_devices("},{"line_number":3061,"context_line":"            guest, pci_manager.get_instance_pci_devs(instance))"},{"line_number":3062,"context_line":"        self._attach_direct_passthrough_ports(context, instance, guest)"},{"line_number":3063,"context_line":""},{"line_number":3064,"context_line":"    def _can_set_admin_password(self, image_meta):"},{"line_number":3065,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"21276bb1_cd1e0764","line":3062,"range":{"start_line":3030,"start_character":4,"end_line":3062,"end_character":71},"in_reply_to":"1e915860_ea30d7fc","updated":"2021-11-30 14:40:38.000000000","message":"Do you agree, @sean?","commit_id":"217f7e79f866077c4f317700d7591eaf3ea1a543"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9ffd1247cdd2d7b1edf13942a76f98945b547cb0","unresolved":true,"context_lines":[{"line_number":3027,"context_line":"        # ...and neither does a non-running domain"},{"line_number":3028,"context_line":"        return current_power_state in (power_state.RUNNING, power_state.PAUSED)"},{"line_number":3029,"context_line":""},{"line_number":3030,"context_line":"    def _suspend_guest_for_snapshot("},{"line_number":3031,"context_line":"        self,"},{"line_number":3032,"context_line":"        context: nova_context.RequestContext,"},{"line_number":3033,"context_line":"        live_snapshot: bool,"},{"line_number":3034,"context_line":"        current_power_state: int,"},{"line_number":3035,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":3036,"context_line":"    ):"},{"line_number":3037,"context_line":"        if self._needs_suspend_resume_for_snapshot("},{"line_number":3038,"context_line":"            live_snapshot, current_power_state,"},{"line_number":3039,"context_line":"        ):"},{"line_number":3040,"context_line":"            self.suspend(context, instance)"},{"line_number":3041,"context_line":""},{"line_number":3042,"context_line":"    def _resume_guest_after_snapshot("},{"line_number":3043,"context_line":"        self,"},{"line_number":3044,"context_line":"        context: nova_context.RequestContext,"},{"line_number":3045,"context_line":"        live_snapshot: bool,"},{"line_number":3046,"context_line":"        original_power_state: int,"},{"line_number":3047,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":3048,"context_line":"        guest: libvirt_guest.Guest,"},{"line_number":3049,"context_line":"    ):"},{"line_number":3050,"context_line":"        if not self._needs_suspend_resume_for_snapshot("},{"line_number":3051,"context_line":"            live_snapshot, original_power_state,"},{"line_number":3052,"context_line":"        ):"},{"line_number":3053,"context_line":"            return"},{"line_number":3054,"context_line":""},{"line_number":3055,"context_line":"        current_power_state \u003d guest.get_power_state(self._host)"},{"line_number":3056,"context_line":""},{"line_number":3057,"context_line":"        # TODO(stephenfin): Any reason we couldn\u0027t use \u0027self.resume\u0027 here?"},{"line_number":3058,"context_line":"        guest.launch(pause\u003dcurrent_power_state \u003d\u003d power_state.PAUSED)"},{"line_number":3059,"context_line":""},{"line_number":3060,"context_line":"        self._attach_pci_devices("},{"line_number":3061,"context_line":"            guest, pci_manager.get_instance_pci_devs(instance))"},{"line_number":3062,"context_line":"        self._attach_direct_passthrough_ports(context, instance, guest)"},{"line_number":3063,"context_line":""},{"line_number":3064,"context_line":"    def _can_set_admin_password(self, image_meta):"},{"line_number":3065,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"caef5ad7_932a9626","line":3062,"range":{"start_line":3030,"start_character":4,"end_line":3062,"end_character":71},"in_reply_to":"21276bb1_cd1e0764","updated":"2021-12-03 09:53:24.000000000","message":"I\u0027m OK with fixing the method call in a separate patch.","commit_id":"217f7e79f866077c4f317700d7591eaf3ea1a543"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"2a04e8f03fd06633413a1b5aaa638ad3deab68a5","unresolved":true,"context_lines":[{"line_number":3027,"context_line":"        # ...and neither does a non-running domain"},{"line_number":3028,"context_line":"        return current_power_state in (power_state.RUNNING, power_state.PAUSED)"},{"line_number":3029,"context_line":""},{"line_number":3030,"context_line":"    def _suspend_guest_for_snapshot("},{"line_number":3031,"context_line":"        self,"},{"line_number":3032,"context_line":"        context: nova_context.RequestContext,"},{"line_number":3033,"context_line":"        live_snapshot: bool,"},{"line_number":3034,"context_line":"        current_power_state: int,"},{"line_number":3035,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":3036,"context_line":"    ):"},{"line_number":3037,"context_line":"        if self._needs_suspend_resume_for_snapshot("},{"line_number":3038,"context_line":"            live_snapshot, current_power_state,"},{"line_number":3039,"context_line":"        ):"},{"line_number":3040,"context_line":"            self.suspend(context, instance)"},{"line_number":3041,"context_line":""},{"line_number":3042,"context_line":"    def _resume_guest_after_snapshot("},{"line_number":3043,"context_line":"        self,"},{"line_number":3044,"context_line":"        context: nova_context.RequestContext,"},{"line_number":3045,"context_line":"        live_snapshot: bool,"},{"line_number":3046,"context_line":"        original_power_state: int,"},{"line_number":3047,"context_line":"        instance: \u0027objects.Instance\u0027,"},{"line_number":3048,"context_line":"        guest: libvirt_guest.Guest,"},{"line_number":3049,"context_line":"    ):"},{"line_number":3050,"context_line":"        if not self._needs_suspend_resume_for_snapshot("},{"line_number":3051,"context_line":"            live_snapshot, original_power_state,"},{"line_number":3052,"context_line":"        ):"},{"line_number":3053,"context_line":"            return"},{"line_number":3054,"context_line":""},{"line_number":3055,"context_line":"        current_power_state \u003d guest.get_power_state(self._host)"},{"line_number":3056,"context_line":""},{"line_number":3057,"context_line":"        # TODO(stephenfin): Any reason we couldn\u0027t use \u0027self.resume\u0027 here?"},{"line_number":3058,"context_line":"        guest.launch(pause\u003dcurrent_power_state \u003d\u003d power_state.PAUSED)"},{"line_number":3059,"context_line":""},{"line_number":3060,"context_line":"        self._attach_pci_devices("},{"line_number":3061,"context_line":"            guest, pci_manager.get_instance_pci_devs(instance))"},{"line_number":3062,"context_line":"        self._attach_direct_passthrough_ports(context, instance, guest)"},{"line_number":3063,"context_line":""},{"line_number":3064,"context_line":"    def _can_set_admin_password(self, image_meta):"},{"line_number":3065,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1e915860_ea30d7fc","line":3062,"range":{"start_line":3030,"start_character":4,"end_line":3062,"end_character":71},"in_reply_to":"486b9aed_20c52757","updated":"2021-11-26 11:50:06.000000000","message":"As discussed in IRC I\u0027d treat the above as a separate bug and bugfix entirely.","commit_id":"217f7e79f866077c4f317700d7591eaf3ea1a543"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"e2a4099fe390ad3db3ed57e1e9ea54a94ced0204","unresolved":false,"context_lines":[{"line_number":3964,"context_line":""},{"line_number":3965,"context_line":"    def resume(self, context, instance, network_info, block_device_info\u003dNone):"},{"line_number":3966,"context_line":"        \"\"\"resume the specified instance.\"\"\""},{"line_number":3967,"context_line":"        xml \u003d self._get_existing_domain_xml(instance, network_info,"},{"line_number":3968,"context_line":"                                            block_device_info)"},{"line_number":3969,"context_line":"        # NOTE(gsantos): The mediated devices that were removed on suspension"},{"line_number":3970,"context_line":"        # are still present in the xml. Let\u0027s take their references from it"},{"line_number":3971,"context_line":"        # and re-attach them."}],"source_content_type":"text/x-python","patch_set":6,"id":"81f5a059_01371a9b","line":3968,"range":{"start_line":3967,"start_character":0,"end_line":3968,"end_character":62},"updated":"2021-11-26 11:02:06.000000000","message":"This pulls down the persistent domain XML and not the XML from the now virDomainManagedSave [1] domain that had the mdevs detached.\n\n[1] https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainManagedSave","commit_id":"217f7e79f866077c4f317700d7591eaf3ea1a543"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"e2a4099fe390ad3db3ed57e1e9ea54a94ced0204","unresolved":false,"context_lines":[{"line_number":3972,"context_line":"        mdevs \u003d self._get_mdevs_from_guest_config(xml)"},{"line_number":3973,"context_line":"        # NOTE(efried): The instance should already have a vtpm_secret_uuid"},{"line_number":3974,"context_line":"        # registered if appropriate."},{"line_number":3975,"context_line":"        guest \u003d self._create_guest_with_network("},{"line_number":3976,"context_line":"            context, xml, instance, network_info, block_device_info,"},{"line_number":3977,"context_line":"            vifs_already_plugged\u003dTrue)"},{"line_number":3978,"context_line":"        self._attach_pci_devices(guest,"},{"line_number":3979,"context_line":"            pci_manager.get_instance_pci_devs(instance))"},{"line_number":3980,"context_line":"        self._attach_direct_passthrough_ports("}],"source_content_type":"text/x-python","patch_set":6,"id":"e20c8695_e2f5dfbe","line":3977,"range":{"start_line":3975,"start_character":0,"end_line":3977,"end_character":38},"updated":"2021-11-26 11:02:06.000000000","message":"This eventually calls virDomainCreateWithFlags [1] against the domain and as noted there will restore the previously running state of the domain without the mdevs attached. That\u0027s causing the previous behaviour of things going AWOL now that hot-unplug isn\u0027t failing.\n\n[1] https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainCreateWithFlags","commit_id":"217f7e79f866077c4f317700d7591eaf3ea1a543"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"e2a4099fe390ad3db3ed57e1e9ea54a94ced0204","unresolved":false,"context_lines":[{"line_number":3979,"context_line":"            pci_manager.get_instance_pci_devs(instance))"},{"line_number":3980,"context_line":"        self._attach_direct_passthrough_ports("},{"line_number":3981,"context_line":"            context, instance, guest, network_info)"},{"line_number":3982,"context_line":"        self._attach_mediated_devices(guest, mdevs)"},{"line_number":3983,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall(self._wait_for_running,"},{"line_number":3984,"context_line":"                                                     instance)"},{"line_number":3985,"context_line":"        timer.start(interval\u003d0.5).wait()"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f19d54d_093585d6","line":3982,"range":{"start_line":3982,"start_character":0,"end_line":3982,"end_character":51},"updated":"2021-11-26 11:02:06.000000000","message":"So at this point the devices aren\u0027t actually attached to the running domain, they are however attached to the persistent domain that\u0027s just confusing the hell out of me.","commit_id":"217f7e79f866077c4f317700d7591eaf3ea1a543"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"e2a4099fe390ad3db3ed57e1e9ea54a94ced0204","unresolved":false,"context_lines":[{"line_number":8002,"context_line":"            devtype\u003dvconfig.LibvirtConfigGuestHostdevMDEV)"},{"line_number":8003,"context_line":"        for mdev_cfg in mdevs:"},{"line_number":8004,"context_line":"            try:"},{"line_number":8005,"context_line":"                guest.detach_device(mdev_cfg, live\u003dTrue)"},{"line_number":8006,"context_line":"            except libvirt.libvirtError as ex:"},{"line_number":8007,"context_line":"                error_code \u003d ex.get_error_code()"},{"line_number":8008,"context_line":"                if error_code \u003d\u003d libvirt.VIR_ERR_CONFIG_UNSUPPORTED:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1fddfe63_d88534ec","line":8005,"range":{"start_line":8005,"start_character":16,"end_line":8005,"end_character":56},"updated":"2021-11-26 11:02:06.000000000","message":"Ah! This is being called with persistent\u003dFalse and so libvirt.VIR_DOMAIN_AFFECT_CONFIG is dropped from the request:\n\nhttps://github.com/openstack/nova/blob/4a359d576ddbc4b104116515c7e8b4176ac511f7/nova/virt/libvirt/guest.py#L424-L441\n\n_detach_pci_devices is also making the same call here:\n\nhttps://github.com/openstack/nova/blob/4a359d576ddbc4b104116515c7e8b4176ac511f7/nova/virt/libvirt/driver.py#L4909\n\nSo that\u0027s why the devices are still found in the XML of the persistent domain when we try to resume.","commit_id":"217f7e79f866077c4f317700d7591eaf3ea1a543"}],"releasenotes/notes/bug-1948705-ff80ae392c525475.yaml":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9ffd1247cdd2d7b1edf13942a76f98945b547cb0","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Amended the guest resume operation to support mediated devices, as"},{"line_number":5,"context_line":"    libvirt\u0027s minimum required version (v6.0.0) supports the hot-plug/unplug of"},{"line_number":6,"context_line":"    mediated devices, which was addressed in v4.3.0."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"cfe0a911_d57e19d8","line":6,"updated":"2021-12-03 09:53:24.000000000","message":"you need also to update the docs here : https://docs.openstack.org/nova/latest/admin/virtual-gpu.html#caveats","commit_id":"217f7e79f866077c4f317700d7591eaf3ea1a543"},{"author":{"_account_id":33006,"name":"Gustavo Santos","email":"gufsnts@gmail.com","username":"gooshtavow"},"change_message_id":"f106fb8fc7274693e3c0ae049a73a6ea299eb3de","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Amended the guest resume operation to support mediated devices, as"},{"line_number":5,"context_line":"    libvirt\u0027s minimum required version (v6.0.0) supports the hot-plug/unplug of"},{"line_number":6,"context_line":"    mediated devices, which was addressed in v4.3.0."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3f5c3b32_2683abb6","line":6,"in_reply_to":"cfe0a911_d57e19d8","updated":"2021-12-03 18:21:41.000000000","message":"Done","commit_id":"217f7e79f866077c4f317700d7591eaf3ea1a543"}]}
