)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"65b496fd440d2ffecbbc210ed2f115bc312a6571","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"0531a545_832714c3","updated":"2026-02-11 10:47:07.000000000","message":"Couple of structural suggestions but the direction looks good to me.","commit_id":"884240c425ddb7717ca5b3978e61fe5fbf454455"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"837bbff070f2308fb8256bb14c34c4d216d45bd1","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7b4e29bc_58f0b257","updated":"2026-02-11 15:46:29.000000000","message":"Soft -1 to highlight a couple of suggestions and a question.\nSome comments need to be removed hence the WIP status I guess.\nOtherwise this patch looks good to me.","commit_id":"884240c425ddb7717ca5b3978e61fe5fbf454455"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7317edfe69f725eaee67ce310014eb96f3b01d0e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"4ae2462a_f40f0dbf","updated":"2026-02-12 19:22:33.000000000","message":"https://termbin.com/91jr ok so it is working for spawn\nand https://termbin.com/5rpk it live migrat correcly and correcly updated the cpu pinning \n\n```\n \u003cvcpu placement\u003d\u0027static\u0027\u003e2\u003c/vcpu\u003e\n  \u003ciothreads\u003e1\u003c/iothreads\u003e\n  \u003ccputune\u003e\n    \u003cvcpupin vcpu\u003d\u00270\u0027 cpuset\u003d\u00276\u0027/\u003e\n    \u003cvcpupin vcpu\u003d\u00271\u0027 cpuset\u003d\u00277\u0027/\u003e\n    \u003cemulatorpin cpuset\u003d\u00270-5\u0027/\u003e\n    \u003ciothreadpin iothread\u003d\u00271\u0027 cpuset\u003d\u00270-5\u0027/\u003e\n  \u003c/cputune\u003e\n```\n\nto\n\n```\n  \u003cvcpu placement\u003d\u0027static\u0027 cpuset\u003d\u00272-7\u0027\u003e2\u003c/vcpu\u003e\n  \u003ciothreads\u003e1\u003c/iothreads\u003e\n  \u003ccputune\u003e\n    \u003cvcpupin vcpu\u003d\u00270\u0027 cpuset\u003d\u00271\u0027/\u003e\n    \u003cvcpupin vcpu\u003d\u00271\u0027 cpuset\u003d\u00270\u0027/\u003e\n    \u003cemulatorpin cpuset\u003d\u00272-7\u0027/\u003e\n    \u003ciothreadpin iothread\u003d\u00271\u0027 cpuset\u003d\u00272-7\u0027/\u003e\n  \u003c/cputune\u003e\n\n```\n\ni have also tested with emulator thread policy \u003d isolate\n\nhttps://termbin.com/qq7j\nhttps://termbin.com/8sfk\nthat also works\n\nand finally cpu_policy\u003ddedicated without \nemulator thread policy set at all\n\nhttps://termbin.com/simz\nhttps://termbin.com/y3yy\n\nthe cpu pinning in all cases are updated correctly and  live migraiton works\n\nso funcitonlly this seamsto work but we need to clean it up a bit","commit_id":"884240c425ddb7717ca5b3978e61fe5fbf454455"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ad707d95bffc271273408cd03b15dd506df60bcd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"26d39804_c0146c9d","updated":"2026-02-12 17:33:46.000000000","message":"i need to dig into this more but with  this patch applied\n\nthe m1.nano flavor in devstack and this config snipit in nova.conf\n\n```\n[compute]\ncpu_shared_set\u003d0-5\ncpu_dedicated_set\u003d6,7\n```\n\ni get this domain xml which does not have iothreads enabeld at all\n\nhttps://termbin.com/6st6\n\n\nit is correctly soft pinning the floating vm\n\n \u003cvcpu placement\u003d\u0027static\u0027 cpuset\u003d\u00270-5\u0027\u003e1\u003c/vcpu\u003e\n \n but iothead are not being enabled proerly","commit_id":"884240c425ddb7717ca5b3978e61fe5fbf454455"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"46fd2fdacb08c09b9740314df74b3a0b7f51e165","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"36d52d81_55c63f94","updated":"2026-02-12 19:00:56.000000000","message":"ok i was using the wrong nova git repo in my devstack so illl test again","commit_id":"884240c425ddb7717ca5b3978e61fe5fbf454455"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d4aa8c4a13609e13a9b618b48b7bbe386651b4d1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"83fb66bd_0373e1eb","updated":"2026-02-13 15:37:29.000000000","message":"just a quick reivew i will try and review it fully on monday and deploy it in my devstack env","commit_id":"221aa80c29172fd0ba45d30570b39a481ef8e81b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"11d1ccc919fcf420e099eca7278b4525f3727763","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f701fe9f_602a14cc","updated":"2026-02-18 10:54:43.000000000","message":"Looks good to me thanks","commit_id":"873aee5e95a06987fc1b6a476ce0e81c4722fb2a"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"8d7afa6afdca478e59d42a4fc3624cec68318f84","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"686c075a_2d461e9b","updated":"2026-02-24 13:11:41.000000000","message":"recheck\ngrenade failure is not related","commit_id":"873aee5e95a06987fc1b6a476ce0e81c4722fb2a"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"4d687e1f33abce16dffeccfa34da2cd2727d9716","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d540b717_becd7542","updated":"2026-02-17 15:42:12.000000000","message":"recheck\nnova-multi-cell failure seems to be not related  (based on opensearch result the failure appears on may patches: https://opensearch.logs.openstack.org/_dashboards/app/data-explorer/discover/?security_tenant\u003dglobal#?_g\u003d(filters:!(),refreshInterval:(pause:!t,value:0),time:(from:now-30d,to:now))\u0026_a\u003d(discover:(columns:!(build_name,build_change,build_status),interval:auto,sort:!()),metadata:(indexPattern:\u002794869730-aea8-11ec-9e6a-83741af3fdcd\u0027,view:discover))\u0026_q\u003d(filters:!(),query:(language:kuery,query:\u0027message:%22line%20391,%20in%20test_instance_boot_after_snapshot_deletion%22\u0027))","commit_id":"873aee5e95a06987fc1b6a476ce0e81c4722fb2a"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1e9ca8204e83ea1bbeed4cdb454f5d5671c18c12","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"0e33938f_523f7893","updated":"2026-02-24 09:08:53.000000000","message":"recheck\nnova-next failure is not related","commit_id":"873aee5e95a06987fc1b6a476ce0e81c4722fb2a"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"e04383918c76c27e6398c48950e8a2372a3b2ef1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"6dadfa39_f2bd0b62","updated":"2026-02-16 09:10:05.000000000","message":"recheck\npost failure is not related","commit_id":"873aee5e95a06987fc1b6a476ce0e81c4722fb2a"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"4b2b8d4eb3d6aa57ed44c69c56ca41a4ccfdf722","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"a09a523d_168c5b34","updated":"2026-02-23 16:04:05.000000000","message":"recheck\npost_failure is not related","commit_id":"873aee5e95a06987fc1b6a476ce0e81c4722fb2a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"831b436eb38c4e7351b2f6ab7ed1d883e617ad30","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"2a6356ca_01d541d4","updated":"2026-02-18 10:54:51.000000000","message":"recheck post failure","commit_id":"873aee5e95a06987fc1b6a476ce0e81c4722fb2a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"81adeedebf59cafb6d1b7d9d1782604bbdd8adaf","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"34a2a6b9_18ff46e6","updated":"2026-02-19 11:11:54.000000000","message":"tested this locally \nwith \n```\n[compute]\ncpu_shared_set\u003d0-5\ncpu_dedicated_set\u003d6,7\n```\non the source host and\n\n```\n[compute]\ncpu_shared_set\u003d2-7\ncpu_dedicated_set\u003d0,1\n```\non the destinations\n\nfloating vm correctly soft pinned\n```\n\u003cvcpu placement\u003d\u0027static\u0027 cpuset\u003d\u00270-5\u0027\u003e1\u003c/vcpu\u003e\n\u003ciothreads\u003e1\u003c/iothreads\u003e\n```\nno iothreadpin element generated as expected and updated correctly on live migration\n```\n  \u003cvcpu placement\u003d\u0027static\u0027 cpuset\u003d\u00272-7\u0027\u003e1\u003c/vcpu\u003e\n  \u003ciothreads\u003e1\u003c/iothreads\u003e\n```\npinned flavor hw:cpu_policy\u003ddedicated and hw:emulator_threads_policy\u003dshare hw:mem_page_size\u003dsmall\n\n```\n \u003cvcpu placement\u003d\u0027static\u0027\u003e2\u003c/vcpu\u003e\n  \u003ciothreads\u003e1\u003c/iothreads\u003e\n  \u003ccputune\u003e\n    \u003cvcpupin vcpu\u003d\u00270\u0027 cpuset\u003d\u00276\u0027/\u003e\n    \u003cvcpupin vcpu\u003d\u00271\u0027 cpuset\u003d\u00277\u0027/\u003e\n    \u003cemulatorpin cpuset\u003d\u00270-5\u0027/\u003e\n    \u003ciothreadpin iothread\u003d\u00271\u0027 cpuset\u003d\u00270-5\u0027/\u003e\n  \u003c/cputune\u003e\n\n```\n-\u003e\n```\n  \u003cvcpu placement\u003d\u0027static\u0027 cpuset\u003d\u00272-7\u0027\u003e2\u003c/vcpu\u003e\n  \u003ciothreads\u003e1\u003c/iothreads\u003e\n  \u003ccputune\u003e\n    \u003cvcpupin vcpu\u003d\u00270\u0027 cpuset\u003d\u00271\u0027/\u003e\n    \u003cvcpupin vcpu\u003d\u00271\u0027 cpuset\u003d\u00270\u0027/\u003e\n    \u003cemulatorpin cpuset\u003d\u00272-7\u0027/\u003e\n    \u003ciothreadpin iothread\u003d\u00271\u0027 cpuset\u003d\u00272-7\u0027/\u003e\n  \u003c/cputune\u003e\n```\n\nall element are correctly updated to accont for the diffent core masks on each host\nemulator threands and iothread are correcly pinned to the cpu_shared_set while vm cores are using the cpu_dedicated_set\n\ntestign without hw:emulator_threads_policy\u003dshare\n\n```\n \u003cvcpu placement\u003d\u0027static\u0027\u003e1\u003c/vcpu\u003e\n  \u003ciothreads\u003e1\u003c/iothreads\u003e\n  \u003ccputune\u003e\n    \u003cvcpupin vcpu\u003d\u00270\u0027 cpuset\u003d\u00276\u0027/\u003e\n    \u003cemulatorpin cpuset\u003d\u00276\u0027/\u003e\n    \u003ciothreadpin iothread\u003d\u00271\u0027 cpuset\u003d\u00276\u0027/\u003e\n  \u003c/cputune\u003e\n```\n-\u003e\n```\n \u003cvcpu placement\u003d\u0027static\u0027 cpuset\u003d\u00272-7\u0027\u003e1\u003c/vcpu\u003e\n  \u003ciothreads\u003e1\u003c/iothreads\u003e\n  \u003ccputune\u003e\n    \u003cvcpupin vcpu\u003d\u00270\u0027 cpuset\u003d\u00271\u0027/\u003e\n    \u003cemulatorpin cpuset\u003d\u00271\u0027/\u003e\n    \u003ciothreadpin iothread\u003d\u00271\u0027 cpuset\u003d\u00271\u0027/\u003e\n  \u003c/cputune\u003e\n```\nas expected iothreads and emulator thread now run on the vcpu cores\n\ntesting with emulator threads policy isolate\n```\n  \u003cvcpu placement\u003d\u0027static\u0027\u003e1\u003c/vcpu\u003e\n  \u003ciothreads\u003e1\u003c/iothreads\u003e\n  \u003ccputune\u003e\n    \u003cvcpupin vcpu\u003d\u00270\u0027 cpuset\u003d\u00276\u0027/\u003e\n    \u003cemulatorpin cpuset\u003d\u00277\u0027/\u003e\n    \u003ciothreadpin iothread\u003d\u00271\u0027 cpuset\u003d\u00277\u0027/\u003e\n  \u003c/cputune\u003e\n```\n-\u003e\n```\n  \u003cvcpu placement\u003d\u0027static\u0027 cpuset\u003d\u00272-7\u0027\u003e1\u003c/vcpu\u003e\n  \u003ciothreads\u003e1\u003c/iothreads\u003e\n  \u003ccputune\u003e\n    \u003cvcpupin vcpu\u003d\u00270\u0027 cpuset\u003d\u00271\u0027/\u003e\n    \u003cemulatorpin cpuset\u003d\u00270\u0027/\u003e\n    \u003ciothreadpin iothread\u003d\u00271\u0027 cpuset\u003d\u00270\u0027/\u003e\n  \u003c/cputune\u003e\n```\nas we expect with isolate teh emulator thread and iothread now run on a dedicated core form the cpu_dedicated_Set that is reseved just for this vm\nthat used ot be quite wasteful but was needed for soem realtime workloads\nwith iothread its now less dumb to use this is you actilly are iobound but\nlong term i think we will evolve to allowing more iothread over the shared pool as\nour recomnedatoin.\n\n\nthis is a long way to say i have now tested all of the relevnet combintions that i think could break and confirmed we are modifying the xml correctly in all cases.\n\nso +2w","commit_id":"873aee5e95a06987fc1b6a476ce0e81c4722fb2a"}],"nova/tests/fixtures/libvirt.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"65b496fd440d2ffecbbc210ed2f115bc312a6571","unresolved":true,"context_lines":[{"line_number":2090,"context_line":"        callback(self, dom, event, detail, opaque)"},{"line_number":2091,"context_line":""},{"line_number":2092,"context_line":"    def defineXML(self, xml):"},{"line_number":2093,"context_line":"        try:"},{"line_number":2094,"context_line":"            xml_doc \u003d etree.fromstring(xml.encode(\u0027utf-8\u0027))"},{"line_number":2095,"context_line":"            iothreadpin \u003d xml_doc.find(\u0027./cputune/iothreadpin\u0027)"},{"line_number":2096,"context_line":""},{"line_number":2097,"context_line":"            if iothreadpin is not None and iothreadpin.get(\u0027iothread\u0027) is None:"},{"line_number":2098,"context_line":"                raise make_libvirtError("},{"line_number":2099,"context_line":"                    libvirtError,"},{"line_number":2100,"context_line":"                    \"XML error: Missing required attribute \u0027iothread\u0027 \""},{"line_number":2101,"context_line":"                    \"in element \u0027iothreadpin\u0027\","},{"line_number":2102,"context_line":"                    error_code\u003dVIR_ERR_XML_ERROR,"},{"line_number":2103,"context_line":"                    error_domain\u003dVIR_FROM_DOMAIN)"},{"line_number":2104,"context_line":"        except etree.XMLSyntaxError:"},{"line_number":2105,"context_line":"            pass"},{"line_number":2106,"context_line":""},{"line_number":2107,"context_line":"        dom \u003d Domain(connection\u003dself, running\u003dFalse, transient\u003dFalse, xml\u003dxml)"},{"line_number":2108,"context_line":"        self._vms[dom.name()] \u003d dom"}],"source_content_type":"text/x-python","patch_set":3,"id":"0f17372a_2996e471","line":2105,"range":{"start_line":2093,"start_character":0,"end_line":2105,"end_character":16},"updated":"2026-02-11 10:47:07.000000000","message":"I would make this a helper to create some structure for potential future checks in the fixture. I think the Domain class\u0027s constructor calls _parse_definition() that already walks the XML so calling a helper like this would be better placed there.","commit_id":"884240c425ddb7717ca5b3978e61fe5fbf454455"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"837bbff070f2308fb8256bb14c34c4d216d45bd1","unresolved":true,"context_lines":[{"line_number":2102,"context_line":"                    error_code\u003dVIR_ERR_XML_ERROR,"},{"line_number":2103,"context_line":"                    error_domain\u003dVIR_FROM_DOMAIN)"},{"line_number":2104,"context_line":"        except etree.XMLSyntaxError:"},{"line_number":2105,"context_line":"            pass"},{"line_number":2106,"context_line":""},{"line_number":2107,"context_line":"        dom \u003d Domain(connection\u003dself, running\u003dFalse, transient\u003dFalse, xml\u003dxml)"},{"line_number":2108,"context_line":"        self._vms[dom.name()] \u003d dom"}],"source_content_type":"text/x-python","patch_set":3,"id":"bd37a848_5bfacdbf","line":2105,"range":{"start_line":2105,"start_character":12,"end_line":2105,"end_character":16},"updated":"2026-02-11 15:46:29.000000000","message":"Why are you ignoring etree.XMLSyntaxError ?\nI think this try / except is probably for debugging purpose and WIP ?","commit_id":"884240c425ddb7717ca5b3978e61fe5fbf454455"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"cde88e1780174915492c8d375bb343275590dd22","unresolved":true,"context_lines":[{"line_number":2090,"context_line":"        callback(self, dom, event, detail, opaque)"},{"line_number":2091,"context_line":""},{"line_number":2092,"context_line":"    def defineXML(self, xml):"},{"line_number":2093,"context_line":"        try:"},{"line_number":2094,"context_line":"            xml_doc \u003d etree.fromstring(xml.encode(\u0027utf-8\u0027))"},{"line_number":2095,"context_line":"            iothreadpin \u003d xml_doc.find(\u0027./cputune/iothreadpin\u0027)"},{"line_number":2096,"context_line":""},{"line_number":2097,"context_line":"            if iothreadpin is not None and iothreadpin.get(\u0027iothread\u0027) is None:"},{"line_number":2098,"context_line":"                raise make_libvirtError("},{"line_number":2099,"context_line":"                    libvirtError,"},{"line_number":2100,"context_line":"                    \"XML error: Missing required attribute \u0027iothread\u0027 \""},{"line_number":2101,"context_line":"                    \"in element \u0027iothreadpin\u0027\","},{"line_number":2102,"context_line":"                    error_code\u003dVIR_ERR_XML_ERROR,"},{"line_number":2103,"context_line":"                    error_domain\u003dVIR_FROM_DOMAIN)"},{"line_number":2104,"context_line":"        except etree.XMLSyntaxError:"},{"line_number":2105,"context_line":"            pass"},{"line_number":2106,"context_line":""},{"line_number":2107,"context_line":"        dom \u003d Domain(connection\u003dself, running\u003dFalse, transient\u003dFalse, xml\u003dxml)"},{"line_number":2108,"context_line":"        self._vms[dom.name()] \u003d dom"}],"source_content_type":"text/x-python","patch_set":3,"id":"d132dc84_82266add","line":2105,"range":{"start_line":2093,"start_character":0,"end_line":2105,"end_character":16},"in_reply_to":"0f17372a_2996e471","updated":"2026-02-13 14:59:55.000000000","message":"thanks, good idea, I moved this logic to Domain._parse_definition.","commit_id":"884240c425ddb7717ca5b3978e61fe5fbf454455"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"cde88e1780174915492c8d375bb343275590dd22","unresolved":true,"context_lines":[{"line_number":2102,"context_line":"                    error_code\u003dVIR_ERR_XML_ERROR,"},{"line_number":2103,"context_line":"                    error_domain\u003dVIR_FROM_DOMAIN)"},{"line_number":2104,"context_line":"        except etree.XMLSyntaxError:"},{"line_number":2105,"context_line":"            pass"},{"line_number":2106,"context_line":""},{"line_number":2107,"context_line":"        dom \u003d Domain(connection\u003dself, running\u003dFalse, transient\u003dFalse, xml\u003dxml)"},{"line_number":2108,"context_line":"        self._vms[dom.name()] \u003d dom"}],"source_content_type":"text/x-python","patch_set":3,"id":"ffd3685a_7e8248a4","line":2105,"range":{"start_line":2105,"start_character":12,"end_line":2105,"end_character":16},"in_reply_to":"bd37a848_5bfacdbf","updated":"2026-02-13 14:59:55.000000000","message":"it was only for debugging at that stage, with moving the logic to Domain._parse_definition it is useless anyway.","commit_id":"884240c425ddb7717ca5b3978e61fe5fbf454455"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"11d1ccc919fcf420e099eca7278b4525f3727763","unresolved":false,"context_lines":[{"line_number":2090,"context_line":"        callback(self, dom, event, detail, opaque)"},{"line_number":2091,"context_line":""},{"line_number":2092,"context_line":"    def defineXML(self, xml):"},{"line_number":2093,"context_line":"        try:"},{"line_number":2094,"context_line":"            xml_doc \u003d etree.fromstring(xml.encode(\u0027utf-8\u0027))"},{"line_number":2095,"context_line":"            iothreadpin \u003d xml_doc.find(\u0027./cputune/iothreadpin\u0027)"},{"line_number":2096,"context_line":""},{"line_number":2097,"context_line":"            if iothreadpin is not None and iothreadpin.get(\u0027iothread\u0027) is None:"},{"line_number":2098,"context_line":"                raise make_libvirtError("},{"line_number":2099,"context_line":"                    libvirtError,"},{"line_number":2100,"context_line":"                    \"XML error: Missing required attribute \u0027iothread\u0027 \""},{"line_number":2101,"context_line":"                    \"in element \u0027iothreadpin\u0027\","},{"line_number":2102,"context_line":"                    error_code\u003dVIR_ERR_XML_ERROR,"},{"line_number":2103,"context_line":"                    error_domain\u003dVIR_FROM_DOMAIN)"},{"line_number":2104,"context_line":"        except etree.XMLSyntaxError:"},{"line_number":2105,"context_line":"            pass"},{"line_number":2106,"context_line":""},{"line_number":2107,"context_line":"        dom \u003d Domain(connection\u003dself, running\u003dFalse, transient\u003dFalse, xml\u003dxml)"},{"line_number":2108,"context_line":"        self._vms[dom.name()] \u003d dom"}],"source_content_type":"text/x-python","patch_set":3,"id":"ecef7f4a_bb1fed60","line":2105,"range":{"start_line":2093,"start_character":0,"end_line":2105,"end_character":16},"in_reply_to":"d132dc84_82266add","updated":"2026-02-18 10:54:43.000000000","message":"Acknowledged","commit_id":"884240c425ddb7717ca5b3978e61fe5fbf454455"}],"nova/tests/functional/regressions/test_bug_2140537.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d4aa8c4a13609e13a9b618b48b7bbe386651b4d1","unresolved":true,"context_lines":[{"line_number":78,"context_line":"        # Create VM with dedicated CPUs"},{"line_number":79,"context_line":"        extra_spec \u003d {\u0027hw:cpu_policy\u0027: \u0027dedicated\u0027}"},{"line_number":80,"context_line":"        flavor \u003d self._create_flavor(vcpu\u003d1, extra_spec\u003dextra_spec)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # BUG: This fails with libvirt error about missing \u0027iothread\u0027 attribute"},{"line_number":83,"context_line":"        # The server creation will fail and go to ERROR state"},{"line_number":84,"context_line":"        # server \u003d self._create_server("},{"line_number":85,"context_line":"        #     flavor_id\u003dflavor, host\u003d\u0027host1\u0027, networks\u003d\u0027none\u0027,"},{"line_number":86,"context_line":"        #     expected_state\u003d\u0027ERROR\u0027)"},{"line_number":87,"context_line":"        server \u003d self._create_server("},{"line_number":88,"context_line":"            flavor_id\u003dflavor, host\u003d\u0027host1\u0027, networks\u003d\u0027none\u0027,"},{"line_number":89,"context_line":"            expected_state\u003d\u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3e4a7993_b97b2038","line":86,"range":{"start_line":81,"start_character":1,"end_line":86,"end_character":37},"updated":"2026-02-13 15:37:29.000000000","message":"this should be remove along with the other commented asserts","commit_id":"221aa80c29172fd0ba45d30570b39a481ef8e81b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"81adeedebf59cafb6d1b7d9d1782604bbdd8adaf","unresolved":true,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # BUG: This fails with libvirt error about missing \u0027iothread\u0027 attribute"},{"line_number":83,"context_line":"        # The server creation will fail and go to ERROR state"},{"line_number":84,"context_line":"        # server \u003d self._create_server("},{"line_number":85,"context_line":"        #     flavor_id\u003dflavor, host\u003d\u0027host1\u0027, networks\u003d\u0027none\u0027,"},{"line_number":86,"context_line":"        #     expected_state\u003d\u0027ERROR\u0027)"},{"line_number":87,"context_line":"        server \u003d self._create_server("}],"source_content_type":"text/x-python","patch_set":5,"id":"62aa5642_6b8872ac","line":84,"updated":"2026-02-19 11:11:54.000000000","message":"i guess we can clena this up later but the fix patch should not leave teh commented out buggy behavior in it.\n\nso thsi should have been deleted.","commit_id":"873aee5e95a06987fc1b6a476ce0e81c4722fb2a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"81adeedebf59cafb6d1b7d9d1782604bbdd8adaf","unresolved":true,"context_lines":[{"line_number":97,"context_line":"        # Check the logs for the exception"},{"line_number":98,"context_line":"        # self.assertIn(\"Missing required attribute \u0027iothread\u0027\","},{"line_number":99,"context_line":"        #               self.stdlog.logger.output)"},{"line_number":100,"context_line":"        # self.assertIn(\"element \u0027iothreadpin\u0027\", self.stdlog.logger.output)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        # Get source XML and verify pinning matches cpu_shared_set"},{"line_number":103,"context_line":"        conn \u003d self.host.driver._host.get_connection()"}],"source_content_type":"text/x-python","patch_set":5,"id":"724415ca_b1144893","line":100,"updated":"2026-02-19 11:11:54.000000000","message":"and all the other cases below","commit_id":"873aee5e95a06987fc1b6a476ce0e81c4722fb2a"}],"nova/virt/libvirt/config.py":[{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"837bbff070f2308fb8256bb14c34c4d216d45bd1","unresolved":true,"context_lines":[{"line_number":2739,"context_line":""},{"line_number":2740,"context_line":"        if self.emulatorpin is not None:"},{"line_number":2741,"context_line":"            root.append(self.emulatorpin.format_dom())"},{"line_number":2742,"context_line":"        if (self.iothreadpin is not None and"},{"line_number":2743,"context_line":"                self.iothreadpin.iothread is not None and"},{"line_number":2744,"context_line":"                self.iothreadpin.cpuset):"},{"line_number":2745,"context_line":"            root.append(self.iothreadpin.format_dom())"}],"source_content_type":"text/x-python","patch_set":3,"id":"65ee0136_126799a0","line":2742,"range":{"start_line":2742,"start_character":8,"end_line":2742,"end_character":44},"updated":"2026-02-11 15:46:29.000000000","message":"I would add a comment before this line, because this is the \"key\" of this patch:\n```\n  # Only render \u003ciothreadpin\u003e if fully configured to avoid bug #2140537:\n  # libvirt requires \u0027iothread\u0027 attribute and non-empty \u0027cpuset\u0027\n```","commit_id":"884240c425ddb7717ca5b3978e61fe5fbf454455"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"cde88e1780174915492c8d375bb343275590dd22","unresolved":false,"context_lines":[{"line_number":2739,"context_line":""},{"line_number":2740,"context_line":"        if self.emulatorpin is not None:"},{"line_number":2741,"context_line":"            root.append(self.emulatorpin.format_dom())"},{"line_number":2742,"context_line":"        if (self.iothreadpin is not None and"},{"line_number":2743,"context_line":"                self.iothreadpin.iothread is not None and"},{"line_number":2744,"context_line":"                self.iothreadpin.cpuset):"},{"line_number":2745,"context_line":"            root.append(self.iothreadpin.format_dom())"}],"source_content_type":"text/x-python","patch_set":3,"id":"141a91b6_5737f735","line":2742,"range":{"start_line":2742,"start_character":8,"end_line":2742,"end_character":44},"in_reply_to":"65ee0136_126799a0","updated":"2026-02-13 14:59:55.000000000","message":"Done","commit_id":"884240c425ddb7717ca5b3978e61fe5fbf454455"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"65b496fd440d2ffecbbc210ed2f115bc312a6571","unresolved":true,"context_lines":[{"line_number":6535,"context_line":"        guest_cpu_tune.iothreadpin \u003d ("},{"line_number":6536,"context_line":"            vconfig.LibvirtConfigGuestCPUTuneIOThreadPin())"},{"line_number":6537,"context_line":"        guest_cpu_tune.iothreadpin.cpuset \u003d set([])"},{"line_number":6538,"context_line":"        guest_cpu_tune.iothreadpin.iothread \u003d 1"},{"line_number":6539,"context_line":""},{"line_number":6540,"context_line":"        # Init NUMATune configuration"},{"line_number":6541,"context_line":"        guest_numa_tune \u003d vconfig.LibvirtConfigGuestNUMATune()"}],"source_content_type":"text/x-python","patch_set":3,"id":"29966c8a_33a578b1","line":6538,"updated":"2026-02-11 10:47:07.000000000","message":"OK so now have two places where we set 1 iothread statically for every VM. If in the future we want to make that configurable then it would be better to have a single place that decides this number and puts it to both parts of the XML. Right now it can be as simple as calling the following in both places:\n```\ndef _get_guest_iothread():\n    return 1\n```","commit_id":"884240c425ddb7717ca5b3978e61fe5fbf454455"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"837bbff070f2308fb8256bb14c34c4d216d45bd1","unresolved":true,"context_lines":[{"line_number":6535,"context_line":"        guest_cpu_tune.iothreadpin \u003d ("},{"line_number":6536,"context_line":"            vconfig.LibvirtConfigGuestCPUTuneIOThreadPin())"},{"line_number":6537,"context_line":"        guest_cpu_tune.iothreadpin.cpuset \u003d set([])"},{"line_number":6538,"context_line":"        guest_cpu_tune.iothreadpin.iothread \u003d 1"},{"line_number":6539,"context_line":""},{"line_number":6540,"context_line":"        # Init NUMATune configuration"},{"line_number":6541,"context_line":"        guest_numa_tune \u003d vconfig.LibvirtConfigGuestNUMATune()"}],"source_content_type":"text/x-python","patch_set":3,"id":"6c70b9e0_5bebf3c1","line":6538,"in_reply_to":"29966c8a_33a578b1","updated":"2026-02-11 15:46:29.000000000","message":"gibi ++","commit_id":"884240c425ddb7717ca5b3978e61fe5fbf454455"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"cde88e1780174915492c8d375bb343275590dd22","unresolved":true,"context_lines":[{"line_number":6535,"context_line":"        guest_cpu_tune.iothreadpin \u003d ("},{"line_number":6536,"context_line":"            vconfig.LibvirtConfigGuestCPUTuneIOThreadPin())"},{"line_number":6537,"context_line":"        guest_cpu_tune.iothreadpin.cpuset \u003d set([])"},{"line_number":6538,"context_line":"        guest_cpu_tune.iothreadpin.iothread \u003d 1"},{"line_number":6539,"context_line":""},{"line_number":6540,"context_line":"        # Init NUMATune configuration"},{"line_number":6541,"context_line":"        guest_numa_tune \u003d vconfig.LibvirtConfigGuestNUMATune()"}],"source_content_type":"text/x-python","patch_set":3,"id":"36439730_d9a91d38","line":6538,"in_reply_to":"666bb3a0_10152787","updated":"2026-02-13 14:59:55.000000000","message":"good idea with a getter like method. I hope I covered all the comments","commit_id":"884240c425ddb7717ca5b3978e61fe5fbf454455"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f872d90b953f7fdd8b58a6d0c80905506ead7d1a","unresolved":true,"context_lines":[{"line_number":6535,"context_line":"        guest_cpu_tune.iothreadpin \u003d ("},{"line_number":6536,"context_line":"            vconfig.LibvirtConfigGuestCPUTuneIOThreadPin())"},{"line_number":6537,"context_line":"        guest_cpu_tune.iothreadpin.cpuset \u003d set([])"},{"line_number":6538,"context_line":"        guest_cpu_tune.iothreadpin.iothread \u003d 1"},{"line_number":6539,"context_line":""},{"line_number":6540,"context_line":"        # Init NUMATune configuration"},{"line_number":6541,"context_line":"        guest_numa_tune \u003d vconfig.LibvirtConfigGuestNUMATune()"}],"source_content_type":"text/x-python","patch_set":3,"id":"666bb3a0_10152787","line":6538,"in_reply_to":"6c70b9e0_5bebf3c1","updated":"2026-02-12 17:44:43.000000000","message":"if we suprpot more in the future this is going to have to be a forloop  that will pin each iothread to the same set of cpus\n\n```\n \u003ciothreadpin iothread\u003d\"1\" cpuset\u003d\"5,6\"/\u003e\n \u003ciothreadpin iothread\u003d\"2\" cpuset\u003d\"5,6\"/\u003e\n\n```\n\nso \n```suggestion\n        for _ in range(_get_guest_iothreads()):\n            guest_cpu_tune.iothreadpin.append(cpuset)\n```\n\nthen in the config generation we need to generate each elemnt in turn.","commit_id":"884240c425ddb7717ca5b3978e61fe5fbf454455"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d4aa8c4a13609e13a9b618b48b7bbe386651b4d1","unresolved":true,"context_lines":[{"line_number":6583,"context_line":"        # Use the same cpuset as emulatorpin"},{"line_number":6584,"context_line":"        for iothread_id in range(self._get_guest_iothread()):"},{"line_number":6585,"context_line":"            iothread_pin \u003d vconfig.LibvirtConfigGuestCPUTuneIOThreadPin()"},{"line_number":6586,"context_line":"            iothread_pin.iothread \u003d self._get_guest_iothread()"},{"line_number":6587,"context_line":"            iothread_pin.cpuset \u003d guest_cpu_tune.emulatorpin.cpuset"},{"line_number":6588,"context_line":"            guest_cpu_tune.iothreadpin.append(iothread_pin)"},{"line_number":6589,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fe5de903_6976c281","line":6586,"range":{"start_line":6586,"start_character":36,"end_line":6586,"end_character":62},"updated":"2026-02-13 15:37:29.000000000","message":"iothread_id","commit_id":"221aa80c29172fd0ba45d30570b39a481ef8e81b"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"ed0555e8bc788197e2bf626017a21f1659fe7184","unresolved":true,"context_lines":[{"line_number":6583,"context_line":"        # Use the same cpuset as emulatorpin"},{"line_number":6584,"context_line":"        for iothread_id in range(self._get_guest_iothread()):"},{"line_number":6585,"context_line":"            iothread_pin \u003d vconfig.LibvirtConfigGuestCPUTuneIOThreadPin()"},{"line_number":6586,"context_line":"            iothread_pin.iothread \u003d self._get_guest_iothread()"},{"line_number":6587,"context_line":"            iothread_pin.cpuset \u003d guest_cpu_tune.emulatorpin.cpuset"},{"line_number":6588,"context_line":"            guest_cpu_tune.iothreadpin.append(iothread_pin)"},{"line_number":6589,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"442b4d51_6d03b2ab","line":6586,"range":{"start_line":6586,"start_character":36,"end_line":6586,"end_character":62},"in_reply_to":"d9f29def_6980a9ef","updated":"2026-02-13 17:18:27.000000000","message":"true, thanks: https://libvirt.org/formatdomain.html#cpu-tuning\nor should be in range(1, _get_guest_iothreads +1) but more overhead, so let\u0027s have this one","commit_id":"221aa80c29172fd0ba45d30570b39a481ef8e81b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8e6e6aba7f586c92c5c4da02e5c15a210d7acccc","unresolved":true,"context_lines":[{"line_number":6583,"context_line":"        # Use the same cpuset as emulatorpin"},{"line_number":6584,"context_line":"        for iothread_id in range(self._get_guest_iothread()):"},{"line_number":6585,"context_line":"            iothread_pin \u003d vconfig.LibvirtConfigGuestCPUTuneIOThreadPin()"},{"line_number":6586,"context_line":"            iothread_pin.iothread \u003d self._get_guest_iothread()"},{"line_number":6587,"context_line":"            iothread_pin.cpuset \u003d guest_cpu_tune.emulatorpin.cpuset"},{"line_number":6588,"context_line":"            guest_cpu_tune.iothreadpin.append(iothread_pin)"},{"line_number":6589,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"d9f29def_6980a9ef","line":6586,"range":{"start_line":6586,"start_character":36,"end_line":6586,"end_character":62},"in_reply_to":"fe5de903_6976c281","updated":"2026-02-13 15:38:44.000000000","message":"maybe `iothread_id +1` i dont know if this should be 0 or 1 indexed we woudl have to check the libvirt docs","commit_id":"221aa80c29172fd0ba45d30570b39a481ef8e81b"}]}
