)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"11cf93cde17d0dd14ea37780b22eed67ab412be5","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"62b0ad5a_0c0d9ab0","updated":"2026-10-13 05:00:34.000000000","message":"Please could you reply to each comments in native gerrit interface so that we can easily understand which comments are actually addressed ?\n\nAlso the change includes unreated changes. Maybe you need to first rebase this on top of the latest master.","commit_id":"0051e1a1cc0a2aa0d3edfd47857853a88c7c82c7"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"77863c4163c03cc338d8f7dfe4d17b7bc0806e61","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"1e427cfa_9ce7531a","updated":"2026-10-13 09:53:11.000000000","message":"Thanks for the update.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"7e96d71bc3c67b5938671d6ff630a6316319d5ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"24396dfb_26f9f2d9","in_reply_to":"62b0ad5a_0c0d9ab0","updated":"2026-10-13 06:22:21.000000000","message":"Addressed in patch set 5. Rebased on latest master; removed unrelated changes. Posted threaded native Gerrit replies for each Takashi comment.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"}],"nova/tests/unit/virt/libvirt/test_config.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"8f19b8d570d6d07d30a8df56e3133de554c15dd9","unresolved":true,"context_lines":[{"line_number":770,"context_line":"@ddt.ddt"},{"line_number":771,"context_line":"class LibvirtConfigGuestDiskTest(LibvirtConfigBaseTest):"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    def test_config_virtio_disk_iothread(self):"},{"line_number":774,"context_line":"        obj \u003d config.LibvirtConfigGuestDisk()"},{"line_number":775,"context_line":"        obj.driver_name \u003d \u0027qemu\u0027"},{"line_number":776,"context_line":"        obj.driver_iothread \u003d 1"}],"source_content_type":"text/x-python","patch_set":3,"id":"366434a2_e65fdaa2","line":773,"range":{"start_line":773,"start_character":8,"end_line":773,"end_character":40},"updated":"2026-10-12 18:50:17.000000000","message":"Can we name this test_config_file_iothread and put this at the bottom of this class, to follow how we test parameter customization.","commit_id":"d573b1e67c64b46f04ad5917a3ba824c31186e0a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"8f19b8d570d6d07d30a8df56e3133de554c15dd9","unresolved":true,"context_lines":[{"line_number":781,"context_line":"        xml \u003d obj.to_xml()"},{"line_number":782,"context_line":"        self.assertXmlEqual(xml, \"\"\""},{"line_number":783,"context_line":"            \u003cdisk type\u003d\u0027file\u0027 device\u003d\u0027disk\u0027\u003e"},{"line_number":784,"context_line":"              \u003cdriver name\u003d\u0027qemu\u0027 iothread\u003d\u00271\u0027/\u003e"},{"line_number":785,"context_line":"              \u003csource file\u003d\u0027/tmp/disk\u0027/\u003e"},{"line_number":786,"context_line":"              \u003ctarget dev\u003d\u0027vda\u0027 bus\u003d\u0027virtio\u0027/\u003e"},{"line_number":787,"context_line":"            \u003c/disk\u003e\"\"\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"778b990c_de347003","line":784,"range":{"start_line":784,"start_character":34,"end_line":784,"end_character":46},"updated":"2026-10-12 18:50:17.000000000","message":"Could you point a documentation describing this syntax ?\nI checked libvirt doc but it shows the following format instead.\n\n\n```\n\u003cdriver name\u003d\u0027qemu\u0027 queues\u003d\u00274\u0027\u003e\n  \u003ciothreads\u003e\n    \u003ciothread id\u003d\u00272\u0027/\u003e\n    \u003ciothread id\u003d\u00273\u0027/\u003e\n  \u003c/iothreads\u003e\n\u003c/driver\u003e\n```\n\nAlso the above element requires libvirt\u003e\u003d 10.0.0 which is not aligned with the current min libvirt version (8.0.0). We should check the local libvirt version.","commit_id":"d573b1e67c64b46f04ad5917a3ba824c31186e0a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"11cf93cde17d0dd14ea37780b22eed67ab412be5","unresolved":true,"context_lines":[{"line_number":781,"context_line":"        xml \u003d obj.to_xml()"},{"line_number":782,"context_line":"        self.assertXmlEqual(xml, \"\"\""},{"line_number":783,"context_line":"            \u003cdisk type\u003d\u0027file\u0027 device\u003d\u0027disk\u0027\u003e"},{"line_number":784,"context_line":"              \u003cdriver name\u003d\u0027qemu\u0027 iothread\u003d\u00271\u0027/\u003e"},{"line_number":785,"context_line":"              \u003csource file\u003d\u0027/tmp/disk\u0027/\u003e"},{"line_number":786,"context_line":"              \u003ctarget dev\u003d\u0027vda\u0027 bus\u003d\u0027virtio\u0027/\u003e"},{"line_number":787,"context_line":"            \u003c/disk\u003e\"\"\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"d86fe0b6_67b82ce0","line":784,"range":{"start_line":784,"start_character":34,"end_line":784,"end_character":46},"in_reply_to":"778b990c_de347003","updated":"2026-10-13 05:00:34.000000000","message":"I don\u0027t think this has been answered. The logic touches not scsi controller but virtio-blk device. You mentioned only scsi controller in your reply.","commit_id":"d573b1e67c64b46f04ad5917a3ba824c31186e0a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"8f19b8d570d6d07d30a8df56e3133de554c15dd9","unresolved":true,"context_lines":[{"line_number":4035,"context_line":""},{"line_number":4036,"context_line":"class LibvirtConfigGuestControllerTest(LibvirtConfigBaseTest):"},{"line_number":4037,"context_line":""},{"line_number":4038,"context_line":"    def test_config_virtio_scsi_iothread(self):"},{"line_number":4039,"context_line":"        obj \u003d config.LibvirtConfigGuestController()"},{"line_number":4040,"context_line":"        obj.type \u003d \u0027scsi\u0027"},{"line_number":4041,"context_line":"        obj.index \u003d 0"}],"source_content_type":"text/x-python","patch_set":3,"id":"044b3263_4e11b1de","line":4038,"range":{"start_line":4038,"start_character":8,"end_line":4038,"end_character":40},"updated":"2026-10-12 18:50:17.000000000","message":"Can we name this test_config_guest_contoller_iothread and put this right after test_config_guest_contoller ?","commit_id":"d573b1e67c64b46f04ad5917a3ba824c31186e0a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"11cf93cde17d0dd14ea37780b22eed67ab412be5","unresolved":false,"context_lines":[{"line_number":4035,"context_line":""},{"line_number":4036,"context_line":"class LibvirtConfigGuestControllerTest(LibvirtConfigBaseTest):"},{"line_number":4037,"context_line":""},{"line_number":4038,"context_line":"    def test_config_virtio_scsi_iothread(self):"},{"line_number":4039,"context_line":"        obj \u003d config.LibvirtConfigGuestController()"},{"line_number":4040,"context_line":"        obj.type \u003d \u0027scsi\u0027"},{"line_number":4041,"context_line":"        obj.index \u003d 0"}],"source_content_type":"text/x-python","patch_set":3,"id":"ca60fd27_559faa26","line":4038,"range":{"start_line":4038,"start_character":8,"end_line":4038,"end_character":40},"in_reply_to":"044b3263_4e11b1de","updated":"2026-10-13 05:00:34.000000000","message":"Done","commit_id":"d573b1e67c64b46f04ad5917a3ba824c31186e0a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"11cf93cde17d0dd14ea37780b22eed67ab412be5","unresolved":true,"context_lines":[{"line_number":4036,"context_line":""},{"line_number":4037,"context_line":"class LibvirtConfigGuestControllerTest(LibvirtConfigBaseTest):"},{"line_number":4038,"context_line":""},{"line_number":4039,"context_line":"    def test_config_guest_controller_iothread(self):"},{"line_number":4040,"context_line":"        obj \u003d config.LibvirtConfigGuestScsiHostController()"},{"line_number":4041,"context_line":"        obj.type \u003d \u0027scsi\u0027"},{"line_number":4042,"context_line":"        obj.index \u003d 0"}],"source_content_type":"text/x-python","patch_set":4,"id":"8dafa550_4a0e9887","line":4039,"range":{"start_line":4039,"start_character":8,"end_line":4039,"end_character":45},"updated":"2026-10-13 05:00:34.000000000","message":"Please put this AFTER test_config_guest_contoller , as I requested earlier.","commit_id":"0051e1a1cc0a2aa0d3edfd47857853a88c7c82c7"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"20ff0a46a55043eea7a9211e902225c75cf48408","unresolved":false,"context_lines":[{"line_number":770,"context_line":"@ddt.ddt"},{"line_number":771,"context_line":"class LibvirtConfigGuestDiskTest(LibvirtConfigBaseTest):"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    def test_config_file(self):"},{"line_number":774,"context_line":"        obj \u003d config.LibvirtConfigGuestDisk()"},{"line_number":775,"context_line":"        obj.source_type \u003d \"file\""},{"line_number":776,"context_line":"        obj.source_path \u003d \"/tmp/hello\""}],"source_content_type":"text/x-python","patch_set":5,"id":"b9863219_a0d935e8","line":773,"in_reply_to":"366434a2_e65fdaa2","updated":"2026-10-13 06:17:14.000000000","message":"Addressed in patch set 5: renamed to test_config_file_iothread and moved to bottom of LibvirtConfigGuestDiskTest.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"af1e56244e64f73c54299d751f5c077149d3ea31","unresolved":false,"context_lines":[{"line_number":781,"context_line":"        self.assertXmlEqual(xml, \"\"\""},{"line_number":782,"context_line":"            \u003cdisk type\u003d\"file\" device\u003d\"disk\"\u003e"},{"line_number":783,"context_line":"              \u003csource file\u003d\"/tmp/hello\"/\u003e"},{"line_number":784,"context_line":"              \u003ctarget bus\u003d\"ide\" dev\u003d\"/dev/hda\"/\u003e"},{"line_number":785,"context_line":"            \u003c/disk\u003e\"\"\")"},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"    def test_config_file_parse(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"2365c385_357f4423","line":784,"updated":"2026-10-13 06:06:28.000000000","message":"Addressed: libvirt formatdomain documents disk driver iothread as supported since 1.2.8 (QEMU 2.1) for virtio disks. The quoted nested iothreads form is the newer multi-queue feature (since 11.2.0 / QEMU 10.0) and is not used here. Nova minimum libvirt 8.0 supports the attribute.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"77863c4163c03cc338d8f7dfe4d17b7bc0806e61","unresolved":false,"context_lines":[{"line_number":781,"context_line":"        self.assertXmlEqual(xml, \"\"\""},{"line_number":782,"context_line":"            \u003cdisk type\u003d\"file\" device\u003d\"disk\"\u003e"},{"line_number":783,"context_line":"              \u003csource file\u003d\"/tmp/hello\"/\u003e"},{"line_number":784,"context_line":"              \u003ctarget bus\u003d\"ide\" dev\u003d\"/dev/hda\"/\u003e"},{"line_number":785,"context_line":"            \u003c/disk\u003e\"\"\")"},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"    def test_config_file_parse(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"d7de742b_cff55cad","line":784,"range":{"start_line":784,"start_character":34,"end_line":784,"end_character":46},"in_reply_to":"49cda8a4_53b421f2","updated":"2026-10-13 09:53:11.000000000","message":"OK it\u0027s not documented as an example but is actually supported.\n\n```\n  \u003cdefine name\u003d\"diskDriver\"\u003e\n    \u003celement name\u003d\"driver\"\u003e\n      ...\n      \u003coptional\u003e\n        \u003cref name\u003d\"driverIOThread\"/\u003e\n      \u003c/optional\u003e\n```\n\n```\n  \u003cdefine name\u003d\"driverIOThread\"\u003e\n    \u003cattribute name\u003d\"iothread\"\u003e\n      \u003cref name\u003d\"unsignedInt\"/\u003e\n    \u003c/attribute\u003e\n  \u003c/define\u003e \n```","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"20ff0a46a55043eea7a9211e902225c75cf48408","unresolved":false,"context_lines":[{"line_number":781,"context_line":"        self.assertXmlEqual(xml, \"\"\""},{"line_number":782,"context_line":"            \u003cdisk type\u003d\"file\" device\u003d\"disk\"\u003e"},{"line_number":783,"context_line":"              \u003csource file\u003d\"/tmp/hello\"/\u003e"},{"line_number":784,"context_line":"              \u003ctarget bus\u003d\"ide\" dev\u003d\"/dev/hda\"/\u003e"},{"line_number":785,"context_line":"            \u003c/disk\u003e\"\"\")"},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"    def test_config_file_parse(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"73138051_56ea830b","line":784,"in_reply_to":"778b990c_de347003","updated":"2026-10-13 06:17:14.000000000","message":"Addressed in patch set 5: libvirt formatdomain documents disk driver iothread since 1.2.8 (QEMU 2.1) for virtio disks. The quoted nested iothreads form is newer multi-queue functionality (since 11.2.0 / QEMU 10.0), not used here. Nova minimum libvirt 8.0 supports this attribute.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"524f20c79e97a6f10f3a3074219aedf6d26fff00","unresolved":false,"context_lines":[{"line_number":781,"context_line":"        self.assertXmlEqual(xml, \"\"\""},{"line_number":782,"context_line":"            \u003cdisk type\u003d\"file\" device\u003d\"disk\"\u003e"},{"line_number":783,"context_line":"              \u003csource file\u003d\"/tmp/hello\"/\u003e"},{"line_number":784,"context_line":"              \u003ctarget bus\u003d\"ide\" dev\u003d\"/dev/hda\"/\u003e"},{"line_number":785,"context_line":"            \u003c/disk\u003e\"\"\")"},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"    def test_config_file_parse(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"49cda8a4_53b421f2","line":784,"in_reply_to":"d86fe0b6_67b82ce0","updated":"2026-10-13 06:18:31.000000000","message":"You are right; this line is for virtio-blk disks, not the SCSI controller. Libvirt formatdomain\u0027s Disk section documents the disk driver\u0027s optional iothread attribute: it assigns a virtio disk to a domain IOThread, supported since libvirt 1.2.8 (QEMU 2.1). The newer nested \u003ciothreads\u003e\u003ciothread id\u003d\u0027...\u0027/\u003e\u003c/iothreads\u003e syntax you quoted is the multi-queue form, documented as since libvirt 11.2.0 / QEMU 10.0, and is not used here. Nova minimum libvirt 8.0 supports \u003cdriver name\u003d\u0027qemu\u0027 iothread\u003d\u00271\u0027/\u003e.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"25767b69007cbadf1f412cd745cba82b93da0f2f","unresolved":false,"context_lines":[{"line_number":1510,"context_line":"        self.assertNotIsInstance(obj.device_addr,"},{"line_number":1511,"context_line":"                                 config.LibvirtConfigGuestDeviceAddressDrive)"},{"line_number":1512,"context_line":""},{"line_number":1513,"context_line":"    def test_config_file_iothread(self):"},{"line_number":1514,"context_line":"        obj \u003d config.LibvirtConfigGuestDisk()"},{"line_number":1515,"context_line":"        obj.driver_name \u003d \u0027qemu\u0027"},{"line_number":1516,"context_line":"        obj.driver_iothread \u003d 1"}],"source_content_type":"text/x-python","patch_set":5,"id":"4e8070b0_aac984f0","line":1513,"updated":"2026-10-13 06:11:15.000000000","message":"Addressed. Renamed to test_config_file_iothread and moved to bottom of LibvirtConfigGuestDiskTest, after the parameter-customization tests.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"20ff0a46a55043eea7a9211e902225c75cf48408","unresolved":false,"context_lines":[{"line_number":4036,"context_line":""},{"line_number":4037,"context_line":"class LibvirtConfigGuestControllerTest(LibvirtConfigBaseTest):"},{"line_number":4038,"context_line":""},{"line_number":4039,"context_line":"    def test_config_guest_contoller(self):"},{"line_number":4040,"context_line":"        obj \u003d config.LibvirtConfigGuestController()"},{"line_number":4041,"context_line":"        obj.type \u003d \u0027scsi\u0027"},{"line_number":4042,"context_line":"        obj.index \u003d 0"}],"source_content_type":"text/x-python","patch_set":5,"id":"c0ad0289_e8c15662","line":4039,"in_reply_to":"8dafa550_4a0e9887","updated":"2026-10-13 06:17:14.000000000","message":"Addressed in patch set 5: placed test_config_guest_contoller_iothread immediately after test_config_guest_contoller.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"25767b69007cbadf1f412cd745cba82b93da0f2f","unresolved":false,"context_lines":[{"line_number":4047,"context_line":"            xml, \"\u003ccontroller type\u003d\u0027scsi\u0027 index\u003d\u00270\u0027 model\u003d\u0027virtio-scsi\u0027/\u003e\")"},{"line_number":4048,"context_line":""},{"line_number":4049,"context_line":"    def test_config_guest_contoller_iothread(self):"},{"line_number":4050,"context_line":"        obj \u003d config.LibvirtConfigGuestScsiHostController()"},{"line_number":4051,"context_line":"        obj.type \u003d \u0027scsi\u0027"},{"line_number":4052,"context_line":"        obj.index \u003d 0"},{"line_number":4053,"context_line":"        obj.model \u003d \u0027virtio-scsi\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"d746020d_2ee9b1a1","line":4050,"updated":"2026-10-13 06:11:15.000000000","message":"Addressed. Renamed to test_config_guest_contoller_iothread and placed immediately after test_config_guest_contoller. The spelling follows the existing test name.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"8f19b8d570d6d07d30a8df56e3133de554c15dd9","unresolved":true,"context_lines":[{"line_number":6594,"context_line":"        self.assertEqual(cfg.devices[2].model, \u0027virtio-scsi\u0027)"},{"line_number":6595,"context_line":"        self.assertEqual(1, cfg.devices[2].driver_iothread)"},{"line_number":6596,"context_line":""},{"line_number":6597,"context_line":"    def test_get_guest_config_with_virtio_blk_iothread(self):"},{"line_number":6598,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":6599,"context_line":"        image_meta \u003d objects.ImageMeta.from_dict({"},{"line_number":6600,"context_line":"            \u0027disk_format\u0027: \u0027raw\u0027, \u0027properties\u0027: {\u0027hw_disk_bus\u0027: \u0027virtio\u0027}})"}],"source_content_type":"text/x-python","patch_set":3,"id":"5e6b25b9_8ea529b1","line":6597,"range":{"start_line":6597,"start_character":8,"end_line":6597,"end_character":54},"updated":"2026-10-12 18:50:17.000000000","message":"Please do not put in the middle of tests with virtio scsi for readability.","commit_id":"d573b1e67c64b46f04ad5917a3ba824c31186e0a"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"25767b69007cbadf1f412cd745cba82b93da0f2f","unresolved":false,"context_lines":[{"line_number":6554,"context_line":"                cfg.devices[2], vconfig.LibvirtConfigGuestDisk)"},{"line_number":6555,"context_line":"            self.assertEqual(cfg.devices[2].target_dev, disk)"},{"line_number":6556,"context_line":""},{"line_number":6557,"context_line":"    def test_get_guest_config_with_virtio_blk_iothread(self):"},{"line_number":6558,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":6559,"context_line":"        image_meta \u003d objects.ImageMeta.from_dict({"},{"line_number":6560,"context_line":"            \u0027disk_format\u0027: \u0027raw\u0027, \u0027properties\u0027: {\u0027hw_disk_bus\u0027: \u0027virtio\u0027}})"}],"source_content_type":"text/x-python","patch_set":5,"id":"cfba837f_d4c83b27","line":6557,"updated":"2026-10-13 06:11:15.000000000","message":"Addressed. Moved virtio-blk IOThread coverage before the virtio-scsi test block.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"20ff0a46a55043eea7a9211e902225c75cf48408","unresolved":false,"context_lines":[{"line_number":6594,"context_line":"                                            image_meta,"},{"line_number":6595,"context_line":"                                            [])"},{"line_number":6596,"context_line":"        cfg \u003d drvr._get_guest_config(instance_ref, [], image_meta, disk_info)"},{"line_number":6597,"context_line":"        self.assertIsInstance(cfg.devices[0],"},{"line_number":6598,"context_line":"                         vconfig.LibvirtConfigGuestDisk)"},{"line_number":6599,"context_line":"        self.assertEqual(0, cfg.devices[0].device_addr.unit)"},{"line_number":6600,"context_line":"        self.assertIsInstance(cfg.devices[1],"}],"source_content_type":"text/x-python","patch_set":5,"id":"68a5f8aa_47e5e876","line":6597,"in_reply_to":"5e6b25b9_8ea529b1","updated":"2026-10-13 06:17:14.000000000","message":"Addressed in patch set 5: moved virtio-blk IOThread coverage before the virtio-scsi test block.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"}],"nova/virt/libvirt/config.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"8f19b8d570d6d07d30a8df56e3133de554c15dd9","unresolved":true,"context_lines":[{"line_number":2323,"context_line":"        self.type \u003d None"},{"line_number":2324,"context_line":"        self.index \u003d None"},{"line_number":2325,"context_line":"        self.model \u003d None"},{"line_number":2326,"context_line":"        self.driver_iothread \u003d None"},{"line_number":2327,"context_line":""},{"line_number":2328,"context_line":"    def format_dom(self):"},{"line_number":2329,"context_line":"        controller \u003d super(LibvirtConfigGuestController, self).format_dom()"}],"source_content_type":"text/x-python","patch_set":3,"id":"854da896_ad3ebec1","line":2326,"range":{"start_line":2326,"start_character":9,"end_line":2326,"end_character":35},"updated":"2026-10-12 18:50:17.000000000","message":"If this is specific to scsi controller then it makes more sense to create a inherited LibvirtConfigGuestScsiHostController and support driver_iothread only for that.","commit_id":"d573b1e67c64b46f04ad5917a3ba824c31186e0a"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"20ff0a46a55043eea7a9211e902225c75cf48408","unresolved":false,"context_lines":[{"line_number":2323,"context_line":"        self.type \u003d None"},{"line_number":2324,"context_line":"        self.index \u003d None"},{"line_number":2325,"context_line":"        self.model \u003d None"},{"line_number":2326,"context_line":""},{"line_number":2327,"context_line":"    def format_dom(self):"},{"line_number":2328,"context_line":"        controller \u003d super(LibvirtConfigGuestController, self).format_dom()"},{"line_number":2329,"context_line":"        controller.set(\"type\", self.type)"}],"source_content_type":"text/x-python","patch_set":5,"id":"a8e1c25d_8a3918cc","line":2326,"in_reply_to":"854da896_ad3ebec1","updated":"2026-10-13 06:17:14.000000000","message":"Addressed in patch set 5: added LibvirtConfigGuestScsiHostController; only this subclass owns and emits driver_iothread.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"25767b69007cbadf1f412cd745cba82b93da0f2f","unresolved":false,"context_lines":[{"line_number":2327,"context_line":"    def format_dom(self):"},{"line_number":2328,"context_line":"        controller \u003d super(LibvirtConfigGuestController, self).format_dom()"},{"line_number":2329,"context_line":"        controller.set(\"type\", self.type)"},{"line_number":2330,"context_line":""},{"line_number":2331,"context_line":"        if self.index is not None:"},{"line_number":2332,"context_line":"            controller.set(\"index\", str(self.index))"},{"line_number":2333,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dd67b354_d5e302ac","line":2330,"updated":"2026-10-13 06:11:15.000000000","message":"Addressed. Added LibvirtConfigGuestScsiHostController; only this subclass owns and emits driver_iothread. Generic controllers no longer emit it.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"77863c4163c03cc338d8f7dfe4d17b7bc0806e61","unresolved":true,"context_lines":[{"line_number":2341,"context_line":""},{"line_number":2342,"context_line":"    def __init__(self, **kwargs):"},{"line_number":2343,"context_line":"        super().__init__(**kwargs)"},{"line_number":2344,"context_line":"        self.driver_iothread \u003d None"},{"line_number":2345,"context_line":""},{"line_number":2346,"context_line":"    def format_dom(self):"},{"line_number":2347,"context_line":"        controller \u003d super().format_dom()"}],"source_content_type":"text/x-python","patch_set":5,"id":"3b28071a_64387143","line":2344,"updated":"2026-10-13 09:53:11.000000000","message":"```suggestion\n        self.type \u003d \u0027scsi\u0027\n        self.driver_iothread \u003d None\n```","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"70a3f440c0a4114e077a968b357f1b0e0d024e13","unresolved":false,"context_lines":[{"line_number":2341,"context_line":""},{"line_number":2342,"context_line":"    def __init__(self, **kwargs):"},{"line_number":2343,"context_line":"        super().__init__(**kwargs)"},{"line_number":2344,"context_line":"        self.type \u003d \u0027scsi\u0027"},{"line_number":2345,"context_line":"        self.driver_iothread \u003d None"},{"line_number":2346,"context_line":""},{"line_number":2347,"context_line":"    def format_dom(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"519a8796_451b0dec","line":2344,"in_reply_to":"3b28071a_64387143","updated":"2026-10-13 11:22:43.000000000","message":"Fixed in patch set 6: LibvirtConfigGuestScsiHostController.__init__ now sets self.type \u003d \u0027scsi\u0027. Removed the explicit type assignment from the XML test, so it verifies the constructor default.","commit_id":"6c0244a1ffde1528d7686c628209416974eb2493"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"21b281cf985fe582a8d3864599b7501517da8034","unresolved":false,"context_lines":[{"line_number":2478,"context_line":""},{"line_number":2479,"context_line":"        conf \u003d self._get_volume_config(connection_info, disk_info)"},{"line_number":2480,"context_line":"        if (CONF.libvirt.virt_type in (\u0027kvm\u0027, \u0027qemu\u0027) and"},{"line_number":2481,"context_line":"                conf.source_device \u003d\u003d \u0027disk\u0027 and conf.target_bus \u003d\u003d \u0027virtio\u0027 and"},{"line_number":2482,"context_line":"                guest.get_config().iothreads):"},{"line_number":2483,"context_line":"            conf.driver_iothread \u003d self._get_guest_iothread()"},{"line_number":2484,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ce9faaf9_1458b44b","line":2481,"updated":"2026-10-03 00:56:57.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"a371b1c4bcf4c79f23f68ea1e3d5bed4e49edbac"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"8f19b8d570d6d07d30a8df56e3133de554c15dd9","unresolved":true,"context_lines":[{"line_number":2477,"context_line":"            disk_info[\u0027unit\u0027] \u003d self._get_scsi_controller_next_unit(guest)"},{"line_number":2478,"context_line":""},{"line_number":2479,"context_line":"        conf \u003d self._get_volume_config(connection_info, disk_info)"},{"line_number":2480,"context_line":"        if (CONF.libvirt.virt_type in (\u0027kvm\u0027, \u0027qemu\u0027) and"},{"line_number":2481,"context_line":"                conf.source_device \u003d\u003d \u0027disk\u0027 and"},{"line_number":2482,"context_line":"                conf.target_bus \u003d\u003d \u0027virtio\u0027 and"},{"line_number":2483,"context_line":"                guest.get_config().iothreads):"}],"source_content_type":"text/x-python","patch_set":3,"id":"d7845fd7_5d15cacd","line":2480,"range":{"start_line":2480,"start_character":12,"end_line":2480,"end_character":53},"updated":"2026-10-12 18:50:17.000000000","message":"(nit) I wonder if we can just drop these virt_type check if passing iothread is just ignored by the other hypervisors.","commit_id":"d573b1e67c64b46f04ad5917a3ba824c31186e0a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"8f19b8d570d6d07d30a8df56e3133de554c15dd9","unresolved":true,"context_lines":[{"line_number":2477,"context_line":"            disk_info[\u0027unit\u0027] \u003d self._get_scsi_controller_next_unit(guest)"},{"line_number":2478,"context_line":""},{"line_number":2479,"context_line":"        conf \u003d self._get_volume_config(connection_info, disk_info)"},{"line_number":2480,"context_line":"        if (CONF.libvirt.virt_type in (\u0027kvm\u0027, \u0027qemu\u0027) and"},{"line_number":2481,"context_line":"                conf.source_device \u003d\u003d \u0027disk\u0027 and"},{"line_number":2482,"context_line":"                conf.target_bus \u003d\u003d \u0027virtio\u0027 and"},{"line_number":2483,"context_line":"                guest.get_config().iothreads):"},{"line_number":2484,"context_line":"            conf.driver_iothread \u003d self._get_guest_iothread()"},{"line_number":2485,"context_line":""},{"line_number":2486,"context_line":"        self._check_discard_for_attach_volume(conf, instance)"},{"line_number":2487,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"66c4eab5_ea3142a3","line":2484,"range":{"start_line":2480,"start_character":8,"end_line":2484,"end_character":61},"updated":"2026-10-12 18:50:17.000000000","message":"I wonder if we could handle this within _get_volume_config instead ?","commit_id":"d573b1e67c64b46f04ad5917a3ba824c31186e0a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"8f19b8d570d6d07d30a8df56e3133de554c15dd9","unresolved":false,"context_lines":[{"line_number":6335,"context_line":"            scsi_controller.type \u003d \u0027scsi\u0027"},{"line_number":6336,"context_line":"            scsi_controller.model \u003d hw_scsi_model"},{"line_number":6337,"context_line":"            scsi_controller.index \u003d 0"},{"line_number":6338,"context_line":"            if (hw_scsi_model \u003d\u003d \u0027virtio-scsi\u0027 and"},{"line_number":6339,"context_line":"                    CONF.libvirt.virt_type in (\u0027kvm\u0027, \u0027qemu\u0027)):"},{"line_number":6340,"context_line":"                scsi_controller.driver_iothread \u003d self._get_guest_iothread()"},{"line_number":6341,"context_line":"            return scsi_controller"}],"source_content_type":"text/x-python","patch_set":3,"id":"f9430150_b6eeae43","line":6338,"range":{"start_line":6338,"start_character":16,"end_line":6338,"end_character":46},"updated":"2026-10-12 18:50:17.000000000","message":"libvirt doc states that \"Supported for controller type scsi using model virtio-scsi for address types pci and ccw since 1.3.5 (QEMU 2.4)\"","commit_id":"d573b1e67c64b46f04ad5917a3ba824c31186e0a"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"25767b69007cbadf1f412cd745cba82b93da0f2f","unresolved":false,"context_lines":[{"line_number":2477,"context_line":""},{"line_number":2478,"context_line":"        conf \u003d self._get_volume_config(connection_info, disk_info)"},{"line_number":2479,"context_line":"        if (conf.source_device \u003d\u003d \u0027disk\u0027 and"},{"line_number":2480,"context_line":"                conf.target_bus \u003d\u003d \u0027virtio\u0027 and"},{"line_number":2481,"context_line":"                guest.get_config().iothreads):"},{"line_number":2482,"context_line":"            conf.driver_iothread \u003d self._get_guest_iothread()"},{"line_number":2483,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"921fd864_26bef2cc","line":2480,"updated":"2026-10-13 06:11:15.000000000","message":"Addressed. Removed the kvm/qemu virt_type gate; unsupported hypervisors ignore this libvirt attribute.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"20ff0a46a55043eea7a9211e902225c75cf48408","unresolved":false,"context_lines":[{"line_number":2477,"context_line":""},{"line_number":2478,"context_line":"        conf \u003d self._get_volume_config(connection_info, disk_info)"},{"line_number":2479,"context_line":"        if (conf.source_device \u003d\u003d \u0027disk\u0027 and"},{"line_number":2480,"context_line":"                conf.target_bus \u003d\u003d \u0027virtio\u0027 and"},{"line_number":2481,"context_line":"                guest.get_config().iothreads):"},{"line_number":2482,"context_line":"            conf.driver_iothread \u003d self._get_guest_iothread()"},{"line_number":2483,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"04e360fd_64e45c9e","line":2480,"in_reply_to":"d7845fd7_5d15cacd","updated":"2026-10-13 06:17:14.000000000","message":"Addressed in patch set 5: removed the kvm/qemu virt_type gate; unsupported hypervisors ignore this attribute.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"25767b69007cbadf1f412cd745cba82b93da0f2f","unresolved":false,"context_lines":[{"line_number":2481,"context_line":"                guest.get_config().iothreads):"},{"line_number":2482,"context_line":"            conf.driver_iothread \u003d self._get_guest_iothread()"},{"line_number":2483,"context_line":""},{"line_number":2484,"context_line":"        self._check_discard_for_attach_volume(conf, instance)"},{"line_number":2485,"context_line":""},{"line_number":2486,"context_line":"        try:"},{"line_number":2487,"context_line":"            state \u003d guest.get_power_state(self._host)"}],"source_content_type":"text/x-python","patch_set":5,"id":"b1c57ba6_97e02123","line":2484,"updated":"2026-10-13 06:11:15.000000000","message":"Kept assignment here because attach_volume must check existing guest XML for an IOThread. _get_volume_config has no guest context, and assigning there would attach an IOThread to older guests that do not have one.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"20ff0a46a55043eea7a9211e902225c75cf48408","unresolved":false,"context_lines":[{"line_number":2481,"context_line":"                guest.get_config().iothreads):"},{"line_number":2482,"context_line":"            conf.driver_iothread \u003d self._get_guest_iothread()"},{"line_number":2483,"context_line":""},{"line_number":2484,"context_line":"        self._check_discard_for_attach_volume(conf, instance)"},{"line_number":2485,"context_line":""},{"line_number":2486,"context_line":"        try:"},{"line_number":2487,"context_line":"            state \u003d guest.get_power_state(self._host)"}],"source_content_type":"text/x-python","patch_set":5,"id":"4cdc2900_5969434e","line":2484,"in_reply_to":"66c4eab5_ea3142a3","updated":"2026-10-13 06:17:14.000000000","message":"Addressed in patch set 5: kept attach-time assignment because attach_volume must inspect existing guest XML for an IOThread; _get_volume_config has no guest context.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"b768cb609357ee12c3fcb769c5ce8866f30c8b4d","unresolved":false,"context_lines":[{"line_number":2481,"context_line":"                guest.get_config().iothreads):"},{"line_number":2482,"context_line":"            conf.driver_iothread \u003d self._get_guest_iothread()"},{"line_number":2483,"context_line":""},{"line_number":2484,"context_line":"        self._check_discard_for_attach_volume(conf, instance)"},{"line_number":2485,"context_line":""},{"line_number":2486,"context_line":"        try:"},{"line_number":2487,"context_line":"            state \u003d guest.get_power_state(self._host)"}],"source_content_type":"text/x-python","patch_set":5,"id":"8d2b556e_5da4d6f9","line":2484,"in_reply_to":"b1c57ba6_97e02123","updated":"2026-10-13 09:59:20.000000000","message":"What I thought initially was to pass iothread as part of disk_info but it\u0027s probably not that simple, so I\u0027m ok to keep it now here.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"77863c4163c03cc338d8f7dfe4d17b7bc0806e61","unresolved":true,"context_lines":[{"line_number":6331,"context_line":"        if image_meta.properties.get(\u0027hw_scsi_model\u0027):"},{"line_number":6332,"context_line":"            hw_scsi_model \u003d image_meta.properties.hw_scsi_model"},{"line_number":6333,"context_line":"            scsi_controller \u003d vconfig.LibvirtConfigGuestScsiHostController()"},{"line_number":6334,"context_line":"            scsi_controller.type \u003d \u0027scsi\u0027"},{"line_number":6335,"context_line":"            scsi_controller.model \u003d hw_scsi_model"},{"line_number":6336,"context_line":"            scsi_controller.index \u003d 0"},{"line_number":6337,"context_line":"            if hw_scsi_model \u003d\u003d \u0027virtio-scsi\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"57542000_5cd161e0","line":6334,"range":{"start_line":6334,"start_character":12,"end_line":6334,"end_character":41},"updated":"2026-10-13 09:53:11.000000000","message":"This should be set by `LibvirtConfigGuestScsiHostController.__init__`. See my comment in config.py","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"25767b69007cbadf1f412cd745cba82b93da0f2f","unresolved":false,"context_lines":[{"line_number":6335,"context_line":"            scsi_controller.model \u003d hw_scsi_model"},{"line_number":6336,"context_line":"            scsi_controller.index \u003d 0"},{"line_number":6337,"context_line":"            if hw_scsi_model \u003d\u003d \u0027virtio-scsi\u0027:"},{"line_number":6338,"context_line":"                scsi_controller.driver_iothread \u003d self._get_guest_iothread()"},{"line_number":6339,"context_line":"            return scsi_controller"},{"line_number":6340,"context_line":""},{"line_number":6341,"context_line":"    def _get_host_sysinfo_serial_hardware(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"8d217807_91bfb286","line":6338,"updated":"2026-10-13 06:11:15.000000000","message":"Addressed. Removed the kvm/qemu virt_type gate for volume devices; virtio-blk volume XML now uses the same documented disk iothread attribute.","commit_id":"5c7720b1a017ca56848b7f5a22651fbb4961774d"},{"author":{"_account_id":39381,"name":"taha hosseini","display_name":"t.hosseini","email":"taaahaaa75@gmail.com","username":"t.hosseini"},"change_message_id":"70a3f440c0a4114e077a968b357f1b0e0d024e13","unresolved":false,"context_lines":[{"line_number":6331,"context_line":"        if image_meta.properties.get(\u0027hw_scsi_model\u0027):"},{"line_number":6332,"context_line":"            hw_scsi_model \u003d image_meta.properties.hw_scsi_model"},{"line_number":6333,"context_line":"            scsi_controller \u003d vconfig.LibvirtConfigGuestScsiHostController()"},{"line_number":6334,"context_line":"            scsi_controller.model \u003d hw_scsi_model"},{"line_number":6335,"context_line":"            scsi_controller.index \u003d 0"},{"line_number":6336,"context_line":"            if hw_scsi_model \u003d\u003d \u0027virtio-scsi\u0027:"},{"line_number":6337,"context_line":"                scsi_controller.driver_iothread \u003d self._get_guest_iothread()"}],"source_content_type":"text/x-python","patch_set":6,"id":"e53a0700_03020282","line":6334,"in_reply_to":"57542000_5cd161e0","updated":"2026-10-13 11:22:43.000000000","message":"Fixed in patch set 6: removed scsi_controller.type assignment from _get_scsi_controller; the SCSI controller constructor now provides it. Six focused controller and virtio storage tests pass; flake8 and whitespace checks pass.","commit_id":"6c0244a1ffde1528d7686c628209416974eb2493"}]}
