)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"427d02cba598264cd10e0d8b5996ecbeb9f4e5d9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"367434fb_7e35f08c","updated":"2026-06-24 14:21:45.000000000","message":"I have only small things but the overall direction looks good to me","commit_id":"fc724a19a859a699012130772942dc982a410354"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9cdfe794caf03e510f895d6dd3f87c571e1f3361","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"ec8457dc_e32f7ce6","updated":"2026-07-03 16:41:59.000000000","message":"recheck for some reason zuul didn\u0027t left a score","commit_id":"d948e2bf5ac42871b336f93180755a4fadc59552"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"149161fd5292dd1a2adc8e08dcc02521e5871d31","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"f74fb602_067736ca","updated":"2026-07-06 09:06:59.000000000","message":"thank","commit_id":"d948e2bf5ac42871b336f93180755a4fadc59552"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"e7de805970c27d8de38110fc2e868234883b2fc1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"3f522e46_e00e89ca","updated":"2026-07-16 03:06:21.000000000","message":"I\u0027ve rebased this on https://review.opendev.org/c/openstack/nova/+/990552 and adjusted the place where we implement the validation accordingly.","commit_id":"c197b0941d1e54025d15633c203308b723eacb4c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f3deece7e2147a1bf29d73197dc4789f91bac16","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"450b0fc4_95d79af6","updated":"2026-07-16 09:39:20.000000000","message":"recheck bug 2160901","commit_id":"c197b0941d1e54025d15633c203308b723eacb4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4878f6b147453fba87c22247f0f2950d843f6f7d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"d77119d1_fe152cdb","updated":"2026-07-16 09:53:11.000000000","message":"recheck https://bugs.launchpad.net/nova/+bug/2160901","commit_id":"c197b0941d1e54025d15633c203308b723eacb4c"}],"nova/compute/manager.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"427d02cba598264cd10e0d8b5996ecbeb9f4e5d9","unresolved":true,"context_lines":[{"line_number":1177,"context_line":"                    instance.flavor, instance.image_meta,"},{"line_number":1178,"context_line":"                )"},{"line_number":1179,"context_line":"            except exception.FlavorImageConflict:"},{"line_number":1180,"context_line":"                continue"},{"line_number":1181,"context_line":""},{"line_number":1182,"context_line":"            if not mem_enc:"},{"line_number":1183,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":5,"id":"179967fe_57065fbf","line":1180,"updated":"2026-06-24 14:21:45.000000000","message":"yeah such VM should not exists in the first place as the VM scheduling should have been stopped with the same error. so we can skip the error here.","commit_id":"fc724a19a859a699012130772942dc982a410354"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b17c50e62732bf4aca7ebe01a112b632e868613e","unresolved":false,"context_lines":[{"line_number":1177,"context_line":"                    instance.flavor, instance.image_meta,"},{"line_number":1178,"context_line":"                )"},{"line_number":1179,"context_line":"            except exception.FlavorImageConflict:"},{"line_number":1180,"context_line":"                continue"},{"line_number":1181,"context_line":""},{"line_number":1182,"context_line":"            if not mem_enc:"},{"line_number":1183,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":5,"id":"ab361c47_7c75a03c","line":1180,"in_reply_to":"179967fe_57065fbf","updated":"2026-06-26 09:40:10.000000000","message":"Acknowledged","commit_id":"fc724a19a859a699012130772942dc982a410354"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"427d02cba598264cd10e0d8b5996ecbeb9f4e5d9","unresolved":false,"context_lines":[{"line_number":1182,"context_line":"            if not mem_enc:"},{"line_number":1183,"context_line":"                continue"},{"line_number":1184,"context_line":""},{"line_number":1185,"context_line":"            if self.driver.is_supported_mem_encryption_model(mem_enc.model):"},{"line_number":1186,"context_line":"                continue"},{"line_number":1187,"context_line":""},{"line_number":1188,"context_line":"            msg \u003d _("}],"source_content_type":"text/x-python","patch_set":5,"id":"e79b6fc1_9801236f","line":1185,"updated":"2026-06-24 14:21:45.000000000","message":"As far as I see this is a cheap call, we return a cached boolean from the driver. So it fine to call it multiple times during startup.","commit_id":"fc724a19a859a699012130772942dc982a410354"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"427d02cba598264cd10e0d8b5996ecbeb9f4e5d9","unresolved":true,"context_lines":[{"line_number":1188,"context_line":"            msg \u003d _("},{"line_number":1189,"context_line":"                \u0027This host has instances with the memory encryption \u0027"},{"line_number":1190,"context_line":"                \u0027feature with %s enabled, but the host is not correctly \u0027"},{"line_number":1191,"context_line":"                \u0027configured.\u0027"},{"line_number":1192,"context_line":"            )"},{"line_number":1193,"context_line":"            raise exception.InvalidConfiguration(msg % mem_enc.model)"},{"line_number":1194,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"f7382cf5_e58a8d99","line":1191,"updated":"2026-06-24 14:21:45.000000000","message":"1. I would be more specific. \"The host configured not to support the feature any more...\"\n\n   (We know that in the past the host supported the feature as VMs booted here)\n\n2. Also I would say the \"please move or delete these VMs before removing the feature support form the host. Note that you have to first restore the support for this feature to let nova-compute start up before you can move these VMs.\". to give help how to resolve the situation.\n\n3. If the user needs to (re)move these VMs then it might make sense to list all the VMs in the error message that requires this feature.","commit_id":"fc724a19a859a699012130772942dc982a410354"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"149161fd5292dd1a2adc8e08dcc02521e5871d31","unresolved":false,"context_lines":[{"line_number":1188,"context_line":"            msg \u003d _("},{"line_number":1189,"context_line":"                \u0027This host has instances with the memory encryption \u0027"},{"line_number":1190,"context_line":"                \u0027feature with %s enabled, but the host is not correctly \u0027"},{"line_number":1191,"context_line":"                \u0027configured.\u0027"},{"line_number":1192,"context_line":"            )"},{"line_number":1193,"context_line":"            raise exception.InvalidConfiguration(msg % mem_enc.model)"},{"line_number":1194,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"edcaedc5_ddb4f21b","line":1191,"in_reply_to":"f4627fd8_b607e4db","updated":"2026-07-06 09:06:59.000000000","message":"Acknowledged","commit_id":"fc724a19a859a699012130772942dc982a410354"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b17c50e62732bf4aca7ebe01a112b632e868613e","unresolved":false,"context_lines":[{"line_number":1188,"context_line":"            msg \u003d _("},{"line_number":1189,"context_line":"                \u0027This host has instances with the memory encryption \u0027"},{"line_number":1190,"context_line":"                \u0027feature with %s enabled, but the host is not correctly \u0027"},{"line_number":1191,"context_line":"                \u0027configured.\u0027"},{"line_number":1192,"context_line":"            )"},{"line_number":1193,"context_line":"            raise exception.InvalidConfiguration(msg % mem_enc.model)"},{"line_number":1194,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"6317d621_1ac699fa","line":1191,"in_reply_to":"f7382cf5_e58a8d99","updated":"2026-06-26 09:40:10.000000000","message":"Mostly Done. The listing all instance uuids in the log can be done separately if we really want it.","commit_id":"fc724a19a859a699012130772942dc982a410354"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"e99712c101e4928230707c1904c7cf884be0a25c","unresolved":true,"context_lines":[{"line_number":1188,"context_line":"            msg \u003d _("},{"line_number":1189,"context_line":"                \u0027This host has instances with the memory encryption \u0027"},{"line_number":1190,"context_line":"                \u0027feature with %s enabled, but the host is not correctly \u0027"},{"line_number":1191,"context_line":"                \u0027configured.\u0027"},{"line_number":1192,"context_line":"            )"},{"line_number":1193,"context_line":"            raise exception.InvalidConfiguration(msg % mem_enc.model)"},{"line_number":1194,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"f4627fd8_b607e4db","line":1191,"in_reply_to":"f7382cf5_e58a8d99","updated":"2026-06-26 14:04:39.000000000","message":"Sorry I noticed my comment was not posted.\n\n\n\u003e 1. I would be more specific. \"The host configured not to support the feature any more...\"\n\nDone\n\n\u003e Also I would say the \"please move or delete these VMs before removing the feature support form the host. Note that you have to first restore the support for this feature to let nova-compute start up before you can move these VMs.\". to give help how to resolve the situation.\n\nI agree but I simplified the latter part because evacuating these instances from this host (without restoring the feature) is also an option.\n\n\u003e If the user needs to (re)move these VMs then it might make sense to list all the VMs in the error message that requires this feature.\n\nI prefer avoiding this now, because it may result in putting too many instances IDs in the log. Alternatively we can log the first instance id though that may not be quite useful in case there are multiple affected instances in the host.","commit_id":"fc724a19a859a699012130772942dc982a410354"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"591ca8bddfa108568ac180d2e4e9042115e0dceb","unresolved":true,"context_lines":[{"line_number":1171,"context_line":"                )"},{"line_number":1172,"context_line":"                raise exception.InvalidConfiguration(msg)"},{"line_number":1173,"context_line":""},{"line_number":1174,"context_line":"    def _validate_mem_encryption_configuration(self, instances):"},{"line_number":1175,"context_line":"        for instance in instances:"},{"line_number":1176,"context_line":"            if instance.deleted:"},{"line_number":1177,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":9,"id":"15d3b332_964f0759","line":1174,"updated":"2026-07-06 13:39:27.000000000","message":"-1 for visablity as this this just makes \nhttps://launchpad.net/bugs/2154495\nworse by adding yet another libvirt specific check to the compute manager init host.\n\nthis should not really be in teh compute manger its a driver specific check\n\nthe existing vtpm and pinning checks are also incorrect\n\nright now these check run on every ironic and VMware instance as well even though they do not support memory encryption.","commit_id":"d948e2bf5ac42871b336f93180755a4fadc59552"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"e7de805970c27d8de38110fc2e868234883b2fc1","unresolved":false,"context_lines":[{"line_number":1171,"context_line":"                )"},{"line_number":1172,"context_line":"                raise exception.InvalidConfiguration(msg)"},{"line_number":1173,"context_line":""},{"line_number":1174,"context_line":"    def _validate_mem_encryption_configuration(self, instances):"},{"line_number":1175,"context_line":"        for instance in instances:"},{"line_number":1176,"context_line":"            if instance.deleted:"},{"line_number":1177,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":9,"id":"f69422b0_4c306ff6","line":1174,"in_reply_to":"15d3b332_964f0759","updated":"2026-07-16 03:06:21.000000000","message":"Done","commit_id":"d948e2bf5ac42871b336f93180755a4fadc59552"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"591ca8bddfa108568ac180d2e4e9042115e0dceb","unresolved":true,"context_lines":[{"line_number":1826,"context_line":""},{"line_number":1827,"context_line":"        self._validate_pinning_configuration(instances)"},{"line_number":1828,"context_line":"        self._validate_vtpm_configuration(instances)"},{"line_number":1829,"context_line":"        self._validate_mem_encryption_configuration(instances)"},{"line_number":1830,"context_line":""},{"line_number":1831,"context_line":"        # NOTE(gibi): If ironic and vcenter virt driver slow start time"},{"line_number":1832,"context_line":"        # becomes problematic here then we should consider adding a config"}],"source_content_type":"text/x-python","patch_set":9,"id":"08f9b5f3_ae77baaa","line":1829,"range":{"start_line":1829,"start_character":8,"end_line":1829,"end_character":62},"updated":"2026-07-06 13:39:27.000000000","message":"as an aside this is realy a dirver specific check\n\ni have move the other checks above to a new virt driver funciton \nin https://review.opendev.org/c/openstack/nova/+/990552\n\nbecause we shoudl not be doing this check on ironic or vmware hyperviors but today we are.\n\nthat is not a blocker for this however but if we merge that first we do not need to add is_supported_mem_encryption_model whihc should not really be added here.","commit_id":"d948e2bf5ac42871b336f93180755a4fadc59552"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e46262411cd3e69a2a41dc5018301e0a20f689e8","unresolved":true,"context_lines":[{"line_number":1826,"context_line":""},{"line_number":1827,"context_line":"        self._validate_pinning_configuration(instances)"},{"line_number":1828,"context_line":"        self._validate_vtpm_configuration(instances)"},{"line_number":1829,"context_line":"        self._validate_mem_encryption_configuration(instances)"},{"line_number":1830,"context_line":""},{"line_number":1831,"context_line":"        # NOTE(gibi): If ironic and vcenter virt driver slow start time"},{"line_number":1832,"context_line":"        # becomes problematic here then we should consider adding a config"}],"source_content_type":"text/x-python","patch_set":9,"id":"1bad1fb4_3753b64b","line":1829,"range":{"start_line":1829,"start_character":8,"end_line":1829,"end_character":62},"in_reply_to":"08f9b5f3_ae77baaa","updated":"2026-07-13 15:38:06.000000000","message":"I did an initial review of that fix and I think it make sense. So I\u0027m fine either way, landing this and the fixing it in the bugfix, or landing the bugfix first and then adapting this.","commit_id":"d948e2bf5ac42871b336f93180755a4fadc59552"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ab73fbe4211dc2ce93dff8017271b7f517146ea1","unresolved":true,"context_lines":[{"line_number":1826,"context_line":""},{"line_number":1827,"context_line":"        self._validate_pinning_configuration(instances)"},{"line_number":1828,"context_line":"        self._validate_vtpm_configuration(instances)"},{"line_number":1829,"context_line":"        self._validate_mem_encryption_configuration(instances)"},{"line_number":1830,"context_line":""},{"line_number":1831,"context_line":"        # NOTE(gibi): If ironic and vcenter virt driver slow start time"},{"line_number":1832,"context_line":"        # becomes problematic here then we should consider adding a config"}],"source_content_type":"text/x-python","patch_set":9,"id":"f0489844_5474a16e","line":1829,"range":{"start_line":1829,"start_character":8,"end_line":1829,"end_character":62},"in_reply_to":"1bad1fb4_3753b64b","updated":"2026-07-13 17:20:40.000000000","message":"if im updating it to move the evactuate logic below this anyway i guess we might as well add this now and move it later. i will need to split it back out of https://review.opendev.org/c/openstack/nova/+/990552 if we end up backporting that but that is not hard espically if i actully put moving thi fuction in its won commit.","commit_id":"d948e2bf5ac42871b336f93180755a4fadc59552"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"e7de805970c27d8de38110fc2e868234883b2fc1","unresolved":false,"context_lines":[{"line_number":1826,"context_line":""},{"line_number":1827,"context_line":"        self._validate_pinning_configuration(instances)"},{"line_number":1828,"context_line":"        self._validate_vtpm_configuration(instances)"},{"line_number":1829,"context_line":"        self._validate_mem_encryption_configuration(instances)"},{"line_number":1830,"context_line":""},{"line_number":1831,"context_line":"        # NOTE(gibi): If ironic and vcenter virt driver slow start time"},{"line_number":1832,"context_line":"        # becomes problematic here then we should consider adding a config"}],"source_content_type":"text/x-python","patch_set":9,"id":"a50ee4e5_85b9f199","line":1829,"range":{"start_line":1829,"start_character":8,"end_line":1829,"end_character":62},"in_reply_to":"f0489844_5474a16e","updated":"2026-07-16 03:06:21.000000000","message":"Done","commit_id":"d948e2bf5ac42871b336f93180755a4fadc59552"}],"nova/tests/functional/libvirt/test_amd_sev.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"427d02cba598264cd10e0d8b5996ecbeb9f4e5d9","unresolved":true,"context_lines":[{"line_number":56,"context_line":"        mock_kernel \u003d mock.patch("},{"line_number":57,"context_line":"            \u0027nova.virt.libvirt.host.Host._kernel_supports_amd_sev\u0027,"},{"line_number":58,"context_line":"            side_effect\u003dmock_kernel)"},{"line_number":59,"context_line":"        mock_kernel.start()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        self.qemu_version \u003d versionutils.convert_version_to_int("},{"line_number":62,"context_line":"            host.MIN_QEMU_SEV_ES_VERSION)"}],"source_content_type":"text/x-python","patch_set":5,"id":"34cd1885_f07fa06c","line":59,"updated":"2026-06-24 14:21:45.000000000","message":"do we need to add a cleanup to remove this mock at the end of the test case?","commit_id":"fc724a19a859a699012130772942dc982a410354"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b17c50e62732bf4aca7ebe01a112b632e868613e","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        mock_kernel \u003d mock.patch("},{"line_number":57,"context_line":"            \u0027nova.virt.libvirt.host.Host._kernel_supports_amd_sev\u0027,"},{"line_number":58,"context_line":"            side_effect\u003dmock_kernel)"},{"line_number":59,"context_line":"        mock_kernel.start()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        self.qemu_version \u003d versionutils.convert_version_to_int("},{"line_number":62,"context_line":"            host.MIN_QEMU_SEV_ES_VERSION)"}],"source_content_type":"text/x-python","patch_set":5,"id":"84704745_c4284f4a","line":59,"in_reply_to":"34cd1885_f07fa06c","updated":"2026-06-26 09:40:10.000000000","message":"Done","commit_id":"fc724a19a859a699012130772942dc982a410354"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"e99712c101e4928230707c1904c7cf884be0a25c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        mock_kernel \u003d mock.patch("},{"line_number":57,"context_line":"            \u0027nova.virt.libvirt.host.Host._kernel_supports_amd_sev\u0027,"},{"line_number":58,"context_line":"            side_effect\u003dmock_kernel)"},{"line_number":59,"context_line":"        mock_kernel.start()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        self.qemu_version \u003d versionutils.convert_version_to_int("},{"line_number":62,"context_line":"            host.MIN_QEMU_SEV_ES_VERSION)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa585c5_4cae0037","line":59,"in_reply_to":"34cd1885_f07fa06c","updated":"2026-06-26 14:04:39.000000000","message":"Oh yes. We need to call stop. Fixed it.","commit_id":"fc724a19a859a699012130772942dc982a410354"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4878f6b147453fba87c22247f0f2950d843f6f7d","unresolved":true,"context_lines":[{"line_number":53,"context_line":"                return self.sev_es"},{"line_number":54,"context_line":"            return self.sev"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        patcher \u003d mock.patch("},{"line_number":57,"context_line":"            \u0027nova.virt.libvirt.host.Host._kernel_supports_amd_sev\u0027,"},{"line_number":58,"context_line":"            side_effect\u003dmock_kernel)"},{"line_number":59,"context_line":"        patcher.start()"},{"line_number":60,"context_line":"        self.addCleanup(patcher.stop)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        self.qemu_version \u003d versionutils.convert_version_to_int("},{"line_number":63,"context_line":"            host.MIN_QEMU_SEV_ES_VERSION)"}],"source_content_type":"text/x-python","patch_set":14,"id":"5d65bba5_7b422d51","line":60,"range":{"start_line":56,"start_character":0,"end_line":60,"end_character":37},"updated":"2026-07-16 09:53:11.000000000","message":"```suggestion\n        self.useFixture(\n            fixtures.MockPatch(\n                \u0027nova.virt.libvirt.host.Host._kernel_supports_amd_sev\u0027,\n                side_effect\u003dmock_kernel))\n```","commit_id":"c197b0941d1e54025d15633c203308b723eacb4c"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"03c72e51f01652a1abd0db74eb359dc83714aa1a","unresolved":true,"context_lines":[{"line_number":53,"context_line":"                return self.sev_es"},{"line_number":54,"context_line":"            return self.sev"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        patcher \u003d mock.patch("},{"line_number":57,"context_line":"            \u0027nova.virt.libvirt.host.Host._kernel_supports_amd_sev\u0027,"},{"line_number":58,"context_line":"            side_effect\u003dmock_kernel)"},{"line_number":59,"context_line":"        patcher.start()"},{"line_number":60,"context_line":"        self.addCleanup(patcher.stop)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        self.qemu_version \u003d versionutils.convert_version_to_int("},{"line_number":63,"context_line":"            host.MIN_QEMU_SEV_ES_VERSION)"}],"source_content_type":"text/x-python","patch_set":14,"id":"b5debde1_1bf61082","line":60,"range":{"start_line":56,"start_character":0,"end_line":60,"end_character":37},"in_reply_to":"5d65bba5_7b422d51","updated":"2026-07-16 10:03:31.000000000","message":"This will be fixed in the next patch... If you are ok I\u0027ll leave it now (assuming that this one and the next one are almost combined)","commit_id":"c197b0941d1e54025d15633c203308b723eacb4c"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"427d02cba598264cd10e0d8b5996ecbeb9f4e5d9","unresolved":true,"context_lines":[{"line_number":1881,"context_line":""},{"line_number":1882,"context_line":"    def test__validate_mem_encryption_configuration_supported(self):"},{"line_number":1883,"context_line":"        \"\"\"Test that the entire check is skipped if the driver supports"},{"line_number":1884,"context_line":"        amd-sev and amd-sev-es"},{"line_number":1885,"context_line":"        \"\"\""},{"line_number":1886,"context_line":"        self._test__validate_mem_encryption_configuration(True, True)"},{"line_number":1887,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"930090f7_5e5d63a1","line":1884,"updated":"2026-06-24 14:21:45.000000000","message":"hm that feels wrong. We don\u0027t have such a shortcut in the implementation. Maybe what you wanted to say here is that the check is passing as each feature is supported.","commit_id":"fc724a19a859a699012130772942dc982a410354"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b17c50e62732bf4aca7ebe01a112b632e868613e","unresolved":false,"context_lines":[{"line_number":1881,"context_line":""},{"line_number":1882,"context_line":"    def test__validate_mem_encryption_configuration_supported(self):"},{"line_number":1883,"context_line":"        \"\"\"Test that the entire check is skipped if the driver supports"},{"line_number":1884,"context_line":"        amd-sev and amd-sev-es"},{"line_number":1885,"context_line":"        \"\"\""},{"line_number":1886,"context_line":"        self._test__validate_mem_encryption_configuration(True, True)"},{"line_number":1887,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"2dcb34c0_6335f7f4","line":1884,"in_reply_to":"930090f7_5e5d63a1","updated":"2026-06-26 09:40:10.000000000","message":"Done","commit_id":"fc724a19a859a699012130772942dc982a410354"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"e99712c101e4928230707c1904c7cf884be0a25c","unresolved":false,"context_lines":[{"line_number":1881,"context_line":""},{"line_number":1882,"context_line":"    def test__validate_mem_encryption_configuration_supported(self):"},{"line_number":1883,"context_line":"        \"\"\"Test that the entire check is skipped if the driver supports"},{"line_number":1884,"context_line":"        amd-sev and amd-sev-es"},{"line_number":1885,"context_line":"        \"\"\""},{"line_number":1886,"context_line":"        self._test__validate_mem_encryption_configuration(True, True)"},{"line_number":1887,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"344845ce_71fd83c0","line":1884,"in_reply_to":"930090f7_5e5d63a1","updated":"2026-06-26 14:04:39.000000000","message":"This was copied from vTPM but I should have updated it.","commit_id":"fc724a19a859a699012130772942dc982a410354"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4878f6b147453fba87c22247f0f2950d843f6f7d","unresolved":true,"context_lines":[{"line_number":22185,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":22186,"context_line":"        for fs in supported_fs:"},{"line_number":22187,"context_line":"            self.assertFalse(drvr.is_supported_fs_format(fs))"},{"line_number":22188,"context_line":""},{"line_number":22189,"context_line":"    def test_is_supported_mem_encryption_model(self):"},{"line_number":22190,"context_line":"        valid_models \u003d ["},{"line_number":22191,"context_line":"            fields.MemEncryptionModel.AMD_SEV,"},{"line_number":22192,"context_line":"            fields.MemEncryptionModel.AMD_SEV_ES,"},{"line_number":22193,"context_line":"        ]"},{"line_number":22194,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":22195,"context_line":"        drvr._host._supports_amd_sev \u003d False"},{"line_number":22196,"context_line":"        drvr._host._supports_amd_sev_es \u003d False"},{"line_number":22197,"context_line":"        for model in valid_models:"},{"line_number":22198,"context_line":"            self.assertFalse(drvr._is_supported_mem_encryption_model(model))"},{"line_number":22199,"context_line":""},{"line_number":22200,"context_line":"        invalid_models \u003d ["},{"line_number":22201,"context_line":"            \u0027invalid\u0027,"},{"line_number":22202,"context_line":"        ]"},{"line_number":22203,"context_line":"        for model in invalid_models:"},{"line_number":22204,"context_line":"            ex \u003d self.assertRaises("},{"line_number":22205,"context_line":"                exception.Invalid,"},{"line_number":22206,"context_line":"                drvr._is_supported_mem_encryption_model,"},{"line_number":22207,"context_line":"                model)"},{"line_number":22208,"context_line":"            self.assertIn(\"Invalid memory encryption model: \u0027%s\u0027\" % model,"},{"line_number":22209,"context_line":"                          str(ex))"},{"line_number":22210,"context_line":""},{"line_number":22211,"context_line":"    @mock.patch(\"nova.objects.instance.Instance.image_meta\","},{"line_number":22212,"context_line":"                new_callable\u003dmock.PropertyMock)"},{"line_number":22213,"context_line":"    @mock.patch(\"nova.virt.libvirt.driver.LibvirtDriver.attach_interface\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"5b33d5e3_b948ff31","line":22210,"range":{"start_line":22188,"start_character":1,"end_line":22210,"end_character":1},"updated":"2026-07-16 09:53:11.000000000","message":"combining these in one tst is kind of confusing\n\nit doe not make ti sclear that invalid model is rejected because tis not a model that should ever work as disting from the valid models that are rejected because you set support for them to false\n\nyou also are not testing ht happy path. for the valid modules\n\nso i would personally refactor this into two tests and maybe use ddt to test the real models in the true and false case","commit_id":"c197b0941d1e54025d15633c203308b723eacb4c"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"03c72e51f01652a1abd0db74eb359dc83714aa1a","unresolved":true,"context_lines":[{"line_number":22185,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":22186,"context_line":"        for fs in supported_fs:"},{"line_number":22187,"context_line":"            self.assertFalse(drvr.is_supported_fs_format(fs))"},{"line_number":22188,"context_line":""},{"line_number":22189,"context_line":"    def test_is_supported_mem_encryption_model(self):"},{"line_number":22190,"context_line":"        valid_models \u003d ["},{"line_number":22191,"context_line":"            fields.MemEncryptionModel.AMD_SEV,"},{"line_number":22192,"context_line":"            fields.MemEncryptionModel.AMD_SEV_ES,"},{"line_number":22193,"context_line":"        ]"},{"line_number":22194,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":22195,"context_line":"        drvr._host._supports_amd_sev \u003d False"},{"line_number":22196,"context_line":"        drvr._host._supports_amd_sev_es \u003d False"},{"line_number":22197,"context_line":"        for model in valid_models:"},{"line_number":22198,"context_line":"            self.assertFalse(drvr._is_supported_mem_encryption_model(model))"},{"line_number":22199,"context_line":""},{"line_number":22200,"context_line":"        invalid_models \u003d ["},{"line_number":22201,"context_line":"            \u0027invalid\u0027,"},{"line_number":22202,"context_line":"        ]"},{"line_number":22203,"context_line":"        for model in invalid_models:"},{"line_number":22204,"context_line":"            ex \u003d self.assertRaises("},{"line_number":22205,"context_line":"                exception.Invalid,"},{"line_number":22206,"context_line":"                drvr._is_supported_mem_encryption_model,"},{"line_number":22207,"context_line":"                model)"},{"line_number":22208,"context_line":"            self.assertIn(\"Invalid memory encryption model: \u0027%s\u0027\" % model,"},{"line_number":22209,"context_line":"                          str(ex))"},{"line_number":22210,"context_line":""},{"line_number":22211,"context_line":"    @mock.patch(\"nova.objects.instance.Instance.image_meta\","},{"line_number":22212,"context_line":"                new_callable\u003dmock.PropertyMock)"},{"line_number":22213,"context_line":"    @mock.patch(\"nova.virt.libvirt.driver.LibvirtDriver.attach_interface\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"e1a332d1_3e2852b8","line":22210,"range":{"start_line":22188,"start_character":1,"end_line":22210,"end_character":1},"in_reply_to":"5b33d5e3_b948ff31","updated":"2026-07-16 10:03:31.000000000","message":"Oh yes. Let me propose a follow-up to add a happy path and refactor this.","commit_id":"c197b0941d1e54025d15633c203308b723eacb4c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4878f6b147453fba87c22247f0f2950d843f6f7d","unresolved":true,"context_lines":[{"line_number":30810,"context_line":"            instance_1, instance_2, instance_3, instance_4])"},{"line_number":30811,"context_line":""},{"line_number":30812,"context_line":"        def fake_is_supported_mem_encryption_model(me_model):"},{"line_number":30813,"context_line":"            if me_model \u003d\u003d \u0027amd-sev-es\u0027:"},{"line_number":30814,"context_line":"                return sev_es"},{"line_number":30815,"context_line":"            return sev"},{"line_number":30816,"context_line":""},{"line_number":30817,"context_line":"        with test.nested("},{"line_number":30818,"context_line":"            mock.patch.object("}],"source_content_type":"text/x-python","patch_set":14,"id":"95a44b13_d75017a6","line":30815,"range":{"start_line":30813,"start_character":12,"end_line":30815,"end_character":22},"updated":"2026-07-16 09:53:11.000000000","message":"ok, this was a little non obvious but this is just seelecthignbetween the input parmater to _test__validate_mem_encryption_configuration\n\n\n\n```suggestion\n            return sev_es if me_model \u003d\u003d \u0027amd-sev-es\u0027 else sev\n```\n\nyou basically spliting this out inot its own function to avoid line wrapping with lamdas\n```\n    mock.patch.object(\n        self.drvr, \u0027_is_supported_mem_encryption_model\u0027,\n        side_effect\u003dlambda model: sev_es if model \u003d\u003d \u0027amd-sev-es\u0027 else sev\n    ),\n```","commit_id":"c197b0941d1e54025d15633c203308b723eacb4c"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"03c72e51f01652a1abd0db74eb359dc83714aa1a","unresolved":true,"context_lines":[{"line_number":30810,"context_line":"            instance_1, instance_2, instance_3, instance_4])"},{"line_number":30811,"context_line":""},{"line_number":30812,"context_line":"        def fake_is_supported_mem_encryption_model(me_model):"},{"line_number":30813,"context_line":"            if me_model \u003d\u003d \u0027amd-sev-es\u0027:"},{"line_number":30814,"context_line":"                return sev_es"},{"line_number":30815,"context_line":"            return sev"},{"line_number":30816,"context_line":""},{"line_number":30817,"context_line":"        with test.nested("},{"line_number":30818,"context_line":"            mock.patch.object("}],"source_content_type":"text/x-python","patch_set":14,"id":"274ec012_cd606cb5","line":30815,"range":{"start_line":30813,"start_character":12,"end_line":30815,"end_character":22},"in_reply_to":"95a44b13_d75017a6","updated":"2026-07-16 10:03:31.000000000","message":"We later extend this to support sev-snp so that might too much complicate the lambda usage.","commit_id":"c197b0941d1e54025d15633c203308b723eacb4c"}],"nova/virt/driver.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"591ca8bddfa108568ac180d2e4e9042115e0dceb","unresolved":true,"context_lines":[{"line_number":1984,"context_line":"        #                 type and implement this function at their"},{"line_number":1985,"context_line":"        #                 virt layer."},{"line_number":1986,"context_line":"        return False"},{"line_number":1987,"context_line":""},{"line_number":1988,"context_line":"    def is_supported_mem_encryption_model(self, me_model):"},{"line_number":1989,"context_line":"        \"\"\"Check whether the memory encryption model is supported."},{"line_number":1990,"context_line":""},{"line_number":1991,"context_line":"        :param me_model: the memory encryption model to be checked."},{"line_number":1992,"context_line":"        \"\"\""},{"line_number":1993,"context_line":"        return False"},{"line_number":1994,"context_line":""},{"line_number":1995,"context_line":"    def quiesce(self, context, instance, image_meta):"},{"line_number":1996,"context_line":"        \"\"\"Quiesce the specified instance to prepare for snapshots."}],"source_content_type":"text/x-python","patch_set":9,"id":"d247fb0c_27662368","line":1993,"range":{"start_line":1987,"start_character":1,"end_line":1993,"end_character":20},"updated":"2026-07-06 13:39:27.000000000","message":"-1 this shoudl really use the driver capablits to advertise it but really this is not somehitng the comptue manger shoudl really need to care about.","commit_id":"d948e2bf5ac42871b336f93180755a4fadc59552"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ab73fbe4211dc2ce93dff8017271b7f517146ea1","unresolved":true,"context_lines":[{"line_number":1984,"context_line":"        #                 type and implement this function at their"},{"line_number":1985,"context_line":"        #                 virt layer."},{"line_number":1986,"context_line":"        return False"},{"line_number":1987,"context_line":""},{"line_number":1988,"context_line":"    def is_supported_mem_encryption_model(self, me_model):"},{"line_number":1989,"context_line":"        \"\"\"Check whether the memory encryption model is supported."},{"line_number":1990,"context_line":""},{"line_number":1991,"context_line":"        :param me_model: the memory encryption model to be checked."},{"line_number":1992,"context_line":"        \"\"\""},{"line_number":1993,"context_line":"        return False"},{"line_number":1994,"context_line":""},{"line_number":1995,"context_line":"    def quiesce(self, context, instance, image_meta):"},{"line_number":1996,"context_line":"        \"\"\"Quiesce the specified instance to prepare for snapshots."}],"source_content_type":"text/x-python","patch_set":9,"id":"de7fc894_8f39e140","line":1993,"range":{"start_line":1987,"start_character":1,"end_line":1993,"end_character":20},"in_reply_to":"1cc8c0bf_03a907fd","updated":"2026-07-13 17:20:40.000000000","message":"i think the cleanest approch woudl be to intoduce the process_instances_at_startup drver api chagne first yes and then you can just implmenet\n_is_supported_mem_encryption_model in the libvirt driver and call it form there\n\nill go update my patches now for gibis feedback and then we can decied if you want to rebase this on top or not.","commit_id":"d948e2bf5ac42871b336f93180755a4fadc59552"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9ec9422c568e2a37f6a7eb099d3174afbb63475f","unresolved":true,"context_lines":[{"line_number":1984,"context_line":"        #                 type and implement this function at their"},{"line_number":1985,"context_line":"        #                 virt layer."},{"line_number":1986,"context_line":"        return False"},{"line_number":1987,"context_line":""},{"line_number":1988,"context_line":"    def is_supported_mem_encryption_model(self, me_model):"},{"line_number":1989,"context_line":"        \"\"\"Check whether the memory encryption model is supported."},{"line_number":1990,"context_line":""},{"line_number":1991,"context_line":"        :param me_model: the memory encryption model to be checked."},{"line_number":1992,"context_line":"        \"\"\""},{"line_number":1993,"context_line":"        return False"},{"line_number":1994,"context_line":""},{"line_number":1995,"context_line":"    def quiesce(self, context, instance, image_meta):"},{"line_number":1996,"context_line":"        \"\"\"Quiesce the specified instance to prepare for snapshots."}],"source_content_type":"text/x-python","patch_set":9,"id":"1cc8c0bf_03a907fd","line":1993,"range":{"start_line":1987,"start_character":1,"end_line":1993,"end_character":20},"in_reply_to":"d247fb0c_27662368","updated":"2026-07-13 17:12:09.000000000","message":"One downside of using driver capabilties is that we need to advertise individual models, not the whole memory encryption support. I guess we should rather soon land your validation delegation change, and remove this at the same time.","commit_id":"d948e2bf5ac42871b336f93180755a4fadc59552"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"e7de805970c27d8de38110fc2e868234883b2fc1","unresolved":false,"context_lines":[{"line_number":1984,"context_line":"        #                 type and implement this function at their"},{"line_number":1985,"context_line":"        #                 virt layer."},{"line_number":1986,"context_line":"        return False"},{"line_number":1987,"context_line":""},{"line_number":1988,"context_line":"    def is_supported_mem_encryption_model(self, me_model):"},{"line_number":1989,"context_line":"        \"\"\"Check whether the memory encryption model is supported."},{"line_number":1990,"context_line":""},{"line_number":1991,"context_line":"        :param me_model: the memory encryption model to be checked."},{"line_number":1992,"context_line":"        \"\"\""},{"line_number":1993,"context_line":"        return False"},{"line_number":1994,"context_line":""},{"line_number":1995,"context_line":"    def quiesce(self, context, instance, image_meta):"},{"line_number":1996,"context_line":"        \"\"\"Quiesce the specified instance to prepare for snapshots."}],"source_content_type":"text/x-python","patch_set":9,"id":"0c0fab5e_ca540967","line":1993,"range":{"start_line":1987,"start_character":1,"end_line":1993,"end_character":20},"in_reply_to":"de7fc894_8f39e140","updated":"2026-07-16 03:06:21.000000000","message":"Done","commit_id":"d948e2bf5ac42871b336f93180755a4fadc59552"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"588d7db4fdf500aace2269af3d1666664ac80699","unresolved":true,"context_lines":[{"line_number":13534,"context_line":"        if me_model \u003d\u003d fields.MemEncryptionModel.AMD_SEV_ES:"},{"line_number":13535,"context_line":"            return self._host.supports_amd_sev_es"},{"line_number":13536,"context_line":"        raise exception.Invalid(\u0027Invalid memory encryption model: %r\u0027,"},{"line_number":13537,"context_line":"                                me_model)"},{"line_number":13538,"context_line":""},{"line_number":13539,"context_line":"    def _get_tpm_traits(self) -\u003e dict[str, bool]:"},{"line_number":13540,"context_line":"        # Assert or deassert TPM support traits"}],"source_content_type":"text/x-python","patch_set":7,"id":"132d2b50_9bdbf5ac","line":13537,"updated":"2026-07-03 09:23:09.000000000","message":"I think this is not a valid call as NovaException takes (self, message, **kwargs) so you cannot pass me_model as positional args.\n\nlets also add a unittest case to cover this.","commit_id":"895b2035165700671a7e15097c689fc08f5fc780"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"7865e8ba2495477e49b7e81febe5690d6a26a06a","unresolved":true,"context_lines":[{"line_number":13534,"context_line":"        if me_model \u003d\u003d fields.MemEncryptionModel.AMD_SEV_ES:"},{"line_number":13535,"context_line":"            return self._host.supports_amd_sev_es"},{"line_number":13536,"context_line":"        raise exception.Invalid(\u0027Invalid memory encryption model: %r\u0027,"},{"line_number":13537,"context_line":"                                me_model)"},{"line_number":13538,"context_line":""},{"line_number":13539,"context_line":"    def _get_tpm_traits(self) -\u003e dict[str, bool]:"},{"line_number":13540,"context_line":"        # Assert or deassert TPM support traits"}],"source_content_type":"text/x-python","patch_set":7,"id":"419def96_53a10127","line":13537,"in_reply_to":"132d2b50_9bdbf5ac","updated":"2026-07-03 14:01:20.000000000","message":"Oh yes, that\u0027s true. This is the safe guard so isn\u0027t be triggered in real call from upper layer. I\u0027ll fix it and add some tests.","commit_id":"895b2035165700671a7e15097c689fc08f5fc780"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"27a045b2a89b01802f2e6a6155ae15f6603eb80f","unresolved":false,"context_lines":[{"line_number":13534,"context_line":"        if me_model \u003d\u003d fields.MemEncryptionModel.AMD_SEV_ES:"},{"line_number":13535,"context_line":"            return self._host.supports_amd_sev_es"},{"line_number":13536,"context_line":"        raise exception.Invalid(\u0027Invalid memory encryption model: %r\u0027,"},{"line_number":13537,"context_line":"                                me_model)"},{"line_number":13538,"context_line":""},{"line_number":13539,"context_line":"    def _get_tpm_traits(self) -\u003e dict[str, bool]:"},{"line_number":13540,"context_line":"        # Assert or deassert TPM support traits"}],"source_content_type":"text/x-python","patch_set":7,"id":"d236dcad_2b4688ac","line":13537,"in_reply_to":"419def96_53a10127","updated":"2026-07-03 14:12:29.000000000","message":"Done","commit_id":"895b2035165700671a7e15097c689fc08f5fc780"}]}
