)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5a3b5a8430b1a5adfa91a88a3204760865db88e3","unresolved":true,"context_lines":[{"line_number":9,"context_line":"This bumps the service version and adds a minimum service version check"},{"line_number":10,"context_line":"in the API to reject live migration requests for vTPM instances until"},{"line_number":11,"context_line":"the entire cloud is upgraded to the new version."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Related to blueprint vtpm-live-migration"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I7daef8037385a4077dc0a78f03ae4b34a57560b7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"a50f9b7d_2dccb4dc","line":12,"updated":"2025-09-24 15:49:43.000000000","message":"Note to reviewers: I realize this patch is after live migration is enabled rather than before. I tried moving it before the patch under it but found it\u0027s kind of chicken-and-eggy in that if I bump the service version before live migration is possible, then I can\u0027t have any testing for the guard in this patch. And this patch would be pretty empty and not showing that the bump works.\n\nIf you prefer a different split up or ordering, let me know and I am open to changing things around.","commit_id":"4a1cc9d683d2e24a802e15e3976ae9d45c647461"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"dcfb2ee8112f40e3f5ff979d30063373a62b1e5a","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This bumps the service version and adds a minimum service version check"},{"line_number":10,"context_line":"in the API to reject live migration requests for vTPM instances until"},{"line_number":11,"context_line":"the entire cloud is upgraded to the new version."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Related to blueprint vtpm-live-migration"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I7daef8037385a4077dc0a78f03ae4b34a57560b7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"b0d327d1_3a2487c5","line":12,"in_reply_to":"a50f9b7d_2dccb4dc","updated":"2025-11-10 23:24:26.000000000","message":"This is an obsolete comment.","commit_id":"4a1cc9d683d2e24a802e15e3976ae9d45c647461"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f767fb9d53b04f970e3b4e8cb69ef1da38a2c88a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"19f16dfa_105bfe72","updated":"2025-10-08 17:06:38.000000000","message":"recheck guest kernel panic","commit_id":"ee93e4174372d824c49659d4fef23d8a2823e40c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3185b271a881606dfceb933cca541493cb0d903e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"8753cd38_958bdd15","updated":"2025-11-02 20:00:16.000000000","message":"recheck ERROR oslo.messaging._drivers.impl_rabbit [None req-a83488c6-415f-47b7-97ac-822b560a6761 None None] Connection failed: timed out (retrying in 31.0 seconds): TimeoutError: timed out","commit_id":"1b086a085bbcf45907e3636db95488c999a8e54c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f8a9a59d70d4ad42889a1d5c67b8b00c24bfed3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"4796077f_c61ba925","updated":"2026-02-03 15:21:30.000000000","message":"nd","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b9e4edc0ed4c287c8f6ce00d8235fa64e8a71b2a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"ead713f3_17f68f74","updated":"2026-01-30 10:51:50.000000000","message":"thanks for the fix","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"ff44706c6b44ec698f6875ee88fabd3aa4f3b23d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"a4d2df48_3dd452c9","updated":"2026-02-04 23:27:46.000000000","message":"recheck bug 2127196","commit_id":"af8f2d7ce9027fb0a44ba0416a96d1cfc1176d1a"}],"nova/api/openstack/compute/migrate_server.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"42cc9a67a2b21d9e1811cfaa3ca505b85c8c4690","unresolved":true,"context_lines":[{"line_number":163,"context_line":"        except ("},{"line_number":164,"context_line":"            exception.ComputeHostNotFound,"},{"line_number":165,"context_line":"            exception.ExtendedResourceRequestOldCompute,"},{"line_number":166,"context_line":"            exception.VTPMOldCompute,"},{"line_number":167,"context_line":"        )as e:"},{"line_number":168,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":169,"context_line":"        except exception.InstanceInvalidState as state_error:"}],"source_content_type":"text/x-python","patch_set":25,"id":"dc3d4aa7_d6facfa7","line":166,"updated":"2026-02-02 16:45:26.000000000","message":"So, I don\u0027t actually see `OperationNotSupportedForVTPM` here, nor its parent `NotSupported`. I know we already raise this for the blanket rejection case but perhaps it got missed there too? Or am I missing it?","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f8a9a59d70d4ad42889a1d5c67b8b00c24bfed3","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        except ("},{"line_number":164,"context_line":"            exception.ComputeHostNotFound,"},{"line_number":165,"context_line":"            exception.ExtendedResourceRequestOldCompute,"},{"line_number":166,"context_line":"            exception.VTPMOldCompute,"},{"line_number":167,"context_line":"        )as e:"},{"line_number":168,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":169,"context_line":"        except exception.InstanceInvalidState as state_error:"}],"source_content_type":"text/x-python","patch_set":25,"id":"3fa6053b_a50a64a0","line":166,"in_reply_to":"085e739b_d5ba0656","updated":"2026-02-03 15:21:30.000000000","message":"Acknowledged","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d6a0be950732cafda0e3e2bb3015d30b0252ff0c","unresolved":true,"context_lines":[{"line_number":163,"context_line":"        except ("},{"line_number":164,"context_line":"            exception.ComputeHostNotFound,"},{"line_number":165,"context_line":"            exception.ExtendedResourceRequestOldCompute,"},{"line_number":166,"context_line":"            exception.VTPMOldCompute,"},{"line_number":167,"context_line":"        )as e:"},{"line_number":168,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":169,"context_line":"        except exception.InstanceInvalidState as state_error:"}],"source_content_type":"text/x-python","patch_set":25,"id":"085e739b_d5ba0656","line":166,"in_reply_to":"dc3d4aa7_d6facfa7","updated":"2026-02-02 18:59:23.000000000","message":"It looks like NotSupported is getting handled by the ` @wsgi.expected_errors` mechanism:\n\nhttps://github.com/openstack/nova/blob/59a7093915298973c72b6d1749a6acd27e0045a9/nova/api/openstack/wsgi.py#L787-L795\n\nI hadn\u0027t thought to add anything new about it because existing legacy vTPM has been raising not supported for live migration and we use the same logic in the new decorator.","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"}],"nova/compute/api.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"073fa43925a37913ccff5591bc4672f62e55991e","unresolved":true,"context_lines":[{"line_number":280,"context_line":"                raise exception.OperationNotSupportedForVTPM("},{"line_number":281,"context_line":"                    instance_uuid\u003dinstance.uuid,"},{"line_number":282,"context_line":"                    operation\u003dinstance_actions.LIVE_MIGRATION)"},{"line_number":283,"context_line":"            min_ver \u003d objects.service.get_minimum_version_all_cells("},{"line_number":284,"context_line":"                nova_context.get_admin_context(), [\u0027nova-compute\u0027])"},{"line_number":285,"context_line":"            if min_ver \u003c MIN_COMPUTE_VTPM_LIVE_MIGRATION:"},{"line_number":286,"context_line":"                raise exception.VTPMOldCompute()"}],"source_content_type":"text/x-python","patch_set":20,"id":"c36649eb_a568fd97","line":283,"updated":"2025-12-01 18:52:27.000000000","message":"Since live migration is only doable intra-cell, we could make this only check the minimum version in the cell where the instance is located. I know, not a very big deal but I just thought I\u0027d point it out.","commit_id":"177cd9d746bfbbafc70c93c11b80613596972c17"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"6fea78eed92b539b5b15a63cfc676d56d9fecd4f","unresolved":false,"context_lines":[{"line_number":280,"context_line":"                raise exception.OperationNotSupportedForVTPM("},{"line_number":281,"context_line":"                    instance_uuid\u003dinstance.uuid,"},{"line_number":282,"context_line":"                    operation\u003dinstance_actions.LIVE_MIGRATION)"},{"line_number":283,"context_line":"            min_ver \u003d objects.service.get_minimum_version_all_cells("},{"line_number":284,"context_line":"                nova_context.get_admin_context(), [\u0027nova-compute\u0027])"},{"line_number":285,"context_line":"            if min_ver \u003c MIN_COMPUTE_VTPM_LIVE_MIGRATION:"},{"line_number":286,"context_line":"                raise exception.VTPMOldCompute()"}],"source_content_type":"text/x-python","patch_set":20,"id":"061f59b4_1b319833","line":283,"in_reply_to":"83e093a5_def65081","updated":"2025-12-03 04:34:04.000000000","message":"Done","commit_id":"177cd9d746bfbbafc70c93c11b80613596972c17"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"64de6c1fd29d91316850878a348f2af44b777422","unresolved":true,"context_lines":[{"line_number":280,"context_line":"                raise exception.OperationNotSupportedForVTPM("},{"line_number":281,"context_line":"                    instance_uuid\u003dinstance.uuid,"},{"line_number":282,"context_line":"                    operation\u003dinstance_actions.LIVE_MIGRATION)"},{"line_number":283,"context_line":"            min_ver \u003d objects.service.get_minimum_version_all_cells("},{"line_number":284,"context_line":"                nova_context.get_admin_context(), [\u0027nova-compute\u0027])"},{"line_number":285,"context_line":"            if min_ver \u003c MIN_COMPUTE_VTPM_LIVE_MIGRATION:"},{"line_number":286,"context_line":"                raise exception.VTPMOldCompute()"}],"source_content_type":"text/x-python","patch_set":20,"id":"83e093a5_def65081","line":283,"in_reply_to":"c36649eb_a568fd97","updated":"2025-12-01 19:23:08.000000000","message":"Fair point. I can change that in the next respin.","commit_id":"177cd9d746bfbbafc70c93c11b80613596972c17"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e4b9eae1811ab5c7c8a0ba8c694f4f98a0147959","unresolved":true,"context_lines":[{"line_number":285,"context_line":"                        cctxt, \u0027nova-compute\u0027)"},{"line_number":286,"context_line":"            if (MIN_COMPUTE_VTPM_LIVE_MIGRATION is None or"},{"line_number":287,"context_line":"                    min_ver \u003c MIN_COMPUTE_VTPM_LIVE_MIGRATION):"},{"line_number":288,"context_line":"                raise exception.VTPMOldCompute()"},{"line_number":289,"context_line":"            # Only certain TPM secret security modes support live migration."},{"line_number":290,"context_line":"            security \u003d hardware.get_tpm_secret_security_constraint("},{"line_number":291,"context_line":"                    instance.flavor) or \u0027user\u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"b52df3a0_9794ac70","line":288,"updated":"2026-01-28 15:19:27.000000000","message":"sec, if we merge this change now, we would provide an exception for the live-migration API even if the default value for the security is `user` right ?\nYes, OK, it couldn\u0027t be accepted (because we say the instance is immovable in the spec) but why should we say that\u0027s because the compute is too old ? We should either only check that for `host` then and fail earlier with OperationNotSupportedForVTPM that you wrote below.","commit_id":"99f490361f52abf1b6e91ab33a6867168b8e01fb"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"20087462ae749b37ad991a755ee8e5fcd285809d","unresolved":true,"context_lines":[{"line_number":285,"context_line":"                        cctxt, \u0027nova-compute\u0027)"},{"line_number":286,"context_line":"            if (MIN_COMPUTE_VTPM_LIVE_MIGRATION is None or"},{"line_number":287,"context_line":"                    min_ver \u003c MIN_COMPUTE_VTPM_LIVE_MIGRATION):"},{"line_number":288,"context_line":"                raise exception.VTPMOldCompute()"},{"line_number":289,"context_line":"            # Only certain TPM secret security modes support live migration."},{"line_number":290,"context_line":"            security \u003d hardware.get_tpm_secret_security_constraint("},{"line_number":291,"context_line":"                    instance.flavor) or \u0027user\u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"b9dadbc5_2907e5ec","line":288,"in_reply_to":"b52df3a0_9794ac70","updated":"2026-01-28 20:34:17.000000000","message":"Hm yeah ... TBH I don\u0027t remember why I ordered these this way instead of the inverse. I\u0027ll swap it.","commit_id":"99f490361f52abf1b6e91ab33a6867168b8e01fb"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"34f831f4a54fa7cf5063a5f2ab64bc2805d058b5","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                        cctxt, \u0027nova-compute\u0027)"},{"line_number":286,"context_line":"            if (MIN_COMPUTE_VTPM_LIVE_MIGRATION is None or"},{"line_number":287,"context_line":"                    min_ver \u003c MIN_COMPUTE_VTPM_LIVE_MIGRATION):"},{"line_number":288,"context_line":"                raise exception.VTPMOldCompute()"},{"line_number":289,"context_line":"            # Only certain TPM secret security modes support live migration."},{"line_number":290,"context_line":"            security \u003d hardware.get_tpm_secret_security_constraint("},{"line_number":291,"context_line":"                    instance.flavor) or \u0027user\u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"28f32387_3ce5bb2f","line":288,"in_reply_to":"b9dadbc5_2907e5ec","updated":"2026-01-28 22:57:07.000000000","message":"Done","commit_id":"99f490361f52abf1b6e91ab33a6867168b8e01fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"45dd88b8dad39d691344c902fb66fb3dadf39efe","unresolved":true,"context_lines":[{"line_number":289,"context_line":"                                                              instance.uuid)"},{"line_number":290,"context_line":"            with nova_context.target_cell(context, im.cell_mapping) as cctxt:"},{"line_number":291,"context_line":"                min_ver \u003d objects.service.Service.get_minimum_version("},{"line_number":292,"context_line":"                        cctxt, \u0027nova-compute\u0027)"},{"line_number":293,"context_line":"            if (MIN_COMPUTE_VTPM_LIVE_MIGRATION is None or"},{"line_number":294,"context_line":"                    min_ver \u003c MIN_COMPUTE_VTPM_LIVE_MIGRATION):"},{"line_number":295,"context_line":"                raise exception.VTPMOldCompute()"}],"source_content_type":"text/x-python","patch_set":25,"id":"22bc369b_2a95a684","line":292,"updated":"2026-01-30 17:05:00.000000000","message":"So, I was going to express surprise that we were doing two DB lookups inside a decorator, which makes them pretty heavyweight. Then I expanded below and see much more of that has crept in lately which seems a bit ... not great. The API service doesn\u0027t have minimum version caching enabled, which means every call here does a hit against the API database and the cell database.\n\nGiven what I see below, this is the least of our worries since this is admin-only and infrequent, but it still seems like maybe more than we want to do in a decorator if there wasn\u0027t prior art here.","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1519883e7a0f62fa9722b08ceef5e1c90344737e","unresolved":true,"context_lines":[{"line_number":289,"context_line":"                                                              instance.uuid)"},{"line_number":290,"context_line":"            with nova_context.target_cell(context, im.cell_mapping) as cctxt:"},{"line_number":291,"context_line":"                min_ver \u003d objects.service.Service.get_minimum_version("},{"line_number":292,"context_line":"                        cctxt, \u0027nova-compute\u0027)"},{"line_number":293,"context_line":"            if (MIN_COMPUTE_VTPM_LIVE_MIGRATION is None or"},{"line_number":294,"context_line":"                    min_ver \u003c MIN_COMPUTE_VTPM_LIVE_MIGRATION):"},{"line_number":295,"context_line":"                raise exception.VTPMOldCompute()"}],"source_content_type":"text/x-python","patch_set":25,"id":"94143a80_ba0556ff","line":292,"in_reply_to":"22bc369b_2a95a684","updated":"2026-02-05 16:08:08.000000000","message":"yup, you\u0027re right, we do two DB lookups here but given the first conditional checks whether we want to ask a vtpm constraint in a flavor or an image, that performance impact would only be for those specific flavors or images... and yeah, that\u0027s an admin-only API call anyway.","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"45dd88b8dad39d691344c902fb66fb3dadf39efe","unresolved":true,"context_lines":[{"line_number":5641,"context_line":"        until\u003dMIN_COMPUTE_VDPA_HOTPLUG_LIVE_MIGRATION"},{"line_number":5642,"context_line":"    )"},{"line_number":5643,"context_line":"    @block_accelerators()"},{"line_number":5644,"context_line":"    @reject_legacy_vtpm_live_migration"},{"line_number":5645,"context_line":"    @reject_sev_instances(instance_actions.LIVE_MIGRATION)"},{"line_number":5646,"context_line":"    @check_instance_lock"},{"line_number":5647,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.ACTIVE, vm_states.PAUSED])"}],"source_content_type":"text/x-python","patch_set":25,"id":"821ed3e8_8b1f6b79","line":5644,"updated":"2026-01-30 17:05:00.000000000","message":"By the time we get here, we\u0027ve done the same service min version lookup 4 times, most of which scattered to all the cells not just the one we\u0027re targeting here. I know you\u0027re not adding something new here, and I guess there\u0027s nothing we can do about it immediately, but it\u0027s a 25% increase in the number of DB hits we\u0027re adding...in decorators...looking at the exact same data...before we even run the method being called here.","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d6a0be950732cafda0e3e2bb3015d30b0252ff0c","unresolved":true,"context_lines":[{"line_number":5641,"context_line":"        until\u003dMIN_COMPUTE_VDPA_HOTPLUG_LIVE_MIGRATION"},{"line_number":5642,"context_line":"    )"},{"line_number":5643,"context_line":"    @block_accelerators()"},{"line_number":5644,"context_line":"    @reject_legacy_vtpm_live_migration"},{"line_number":5645,"context_line":"    @reject_sev_instances(instance_actions.LIVE_MIGRATION)"},{"line_number":5646,"context_line":"    @check_instance_lock"},{"line_number":5647,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.ACTIVE, vm_states.PAUSED])"}],"source_content_type":"text/x-python","patch_set":25,"id":"a8140bc4_ac5a9e91","line":5644,"in_reply_to":"502cd248_76265100","updated":"2026-02-02 18:59:23.000000000","message":"Thanks 🙏","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"42cc9a67a2b21d9e1811cfaa3ca505b85c8c4690","unresolved":true,"context_lines":[{"line_number":5641,"context_line":"        until\u003dMIN_COMPUTE_VDPA_HOTPLUG_LIVE_MIGRATION"},{"line_number":5642,"context_line":"    )"},{"line_number":5643,"context_line":"    @block_accelerators()"},{"line_number":5644,"context_line":"    @reject_legacy_vtpm_live_migration"},{"line_number":5645,"context_line":"    @reject_sev_instances(instance_actions.LIVE_MIGRATION)"},{"line_number":5646,"context_line":"    @check_instance_lock"},{"line_number":5647,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.ACTIVE, vm_states.PAUSED])"}],"source_content_type":"text/x-python","patch_set":25,"id":"502cd248_76265100","line":5644,"in_reply_to":"821ed3e8_8b1f6b79","updated":"2026-02-02 16:45:26.000000000","message":"So, I guess I should modify my statement to say that \"we _could_ have done the same lookup 4 times.\" There are some feature guardrails around some of them which make it less bad.\n\nI hate to add this extra check, but it\u0027s probably not worth derailing here and I\u0027ll work up an idea or two in parallel to optimize this.","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"7feb04202533065a893ba1b3f3e4a9f6bdad6b25","unresolved":false,"context_lines":[{"line_number":5641,"context_line":"        until\u003dMIN_COMPUTE_VDPA_HOTPLUG_LIVE_MIGRATION"},{"line_number":5642,"context_line":"    )"},{"line_number":5643,"context_line":"    @block_accelerators()"},{"line_number":5644,"context_line":"    @reject_legacy_vtpm_live_migration"},{"line_number":5645,"context_line":"    @reject_sev_instances(instance_actions.LIVE_MIGRATION)"},{"line_number":5646,"context_line":"    @check_instance_lock"},{"line_number":5647,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.ACTIVE, vm_states.PAUSED])"}],"source_content_type":"text/x-python","patch_set":25,"id":"31eca632_4cf64d00","line":5644,"in_reply_to":"a8140bc4_ac5a9e91","updated":"2026-02-05 20:25:30.000000000","message":"Acknowledged","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"}],"nova/objects/service.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"073fa43925a37913ccff5591bc4672f62e55991e","unresolved":true,"context_lines":[{"line_number":245,"context_line":"    {\u0027compute_rpc\u0027: \u00276.4\u0027},"},{"line_number":246,"context_line":"    # Version 71: Compute RPC v6.4:"},{"line_number":247,"context_line":"    # Add support for vTPM live migration"},{"line_number":248,"context_line":"    {\u0027compute_rpc\u0027: \u00276.4\u0027},"},{"line_number":249,"context_line":")"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"# This is the version after which we can rely on having a persistent"}],"source_content_type":"text/x-python","patch_set":20,"id":"7cd8cd73_c71a40d2","line":248,"updated":"2025-12-01 18:52:27.000000000","message":"If we merge this commit and nothing else, this will make us advertise that we support vTPM live migration when we don\u0027t, right?\n\nIs this perhaps just in this order for testing and we need to put this closer to the end before we merge?","commit_id":"177cd9d746bfbbafc70c93c11b80613596972c17"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"8011489e70ef75596b5899197a0b05150948b60a","unresolved":true,"context_lines":[{"line_number":245,"context_line":"    {\u0027compute_rpc\u0027: \u00276.4\u0027},"},{"line_number":246,"context_line":"    # Version 71: Compute RPC v6.4:"},{"line_number":247,"context_line":"    # Add support for vTPM live migration"},{"line_number":248,"context_line":"    {\u0027compute_rpc\u0027: \u00276.4\u0027},"},{"line_number":249,"context_line":")"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"# This is the version after which we can rely on having a persistent"}],"source_content_type":"text/x-python","patch_set":20,"id":"830fa1e0_65c68620","line":248,"in_reply_to":"5e987641_65b1facf","updated":"2025-12-01 21:30:29.000000000","message":"By \"land the infrastructure for the bump first\" you mean all of this patch except this file (service.py) right? So we would defer incrementing the version and adding the no-op compute RPC version mapping until the live migration support patch.\n\nI think that makes sense. And for now set the MIN_COMPUTE_VTPM_LIVE_MIGRATION to None and set it to the version number in the same live migration support patch.\n\nI agree it seems like doing that would be pretty simple and I\u0027m fine to do it. It was just at the time, every way I tried to order and split this part seemed messy, so I went with this expecting to get suggestions if there is a better way.\n\nI\u0027ll work on the respin.","commit_id":"177cd9d746bfbbafc70c93c11b80613596972c17"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"64de6c1fd29d91316850878a348f2af44b777422","unresolved":true,"context_lines":[{"line_number":245,"context_line":"    {\u0027compute_rpc\u0027: \u00276.4\u0027},"},{"line_number":246,"context_line":"    # Version 71: Compute RPC v6.4:"},{"line_number":247,"context_line":"    # Add support for vTPM live migration"},{"line_number":248,"context_line":"    {\u0027compute_rpc\u0027: \u00276.4\u0027},"},{"line_number":249,"context_line":")"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"# This is the version after which we can rely on having a persistent"}],"source_content_type":"text/x-python","patch_set":20,"id":"e50a36fd_a9b9f308","line":248,"in_reply_to":"7cd8cd73_c71a40d2","updated":"2025-12-01 19:23:08.000000000","message":"Yes. Originally I had this patch going after the \u0027host\u0027 live migration support patch, but I thought you would complain because if we merged that patch, vTPM live migration would be open without any service version check until the service bump patch after it merged.\n\nIt\u0027s chicken and egg as far as I could tell and my guess was that merging live migration without a service version check first would be worse than bumping the version without live migration. \n\nThe other option would be to squash the two patches together but I expected that would be -1ed by reviewers as well for being a larger patch.\n\nIf another option is to merge live migration with the API block still in place, then that wouldn\u0027t be \"supports live migration\" either. And how would we test it, by mocking out the API block in the tests?\n\nIt was not clear to me what ordering I should use.","commit_id":"177cd9d746bfbbafc70c93c11b80613596972c17"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"6fea78eed92b539b5b15a63cfc676d56d9fecd4f","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    {\u0027compute_rpc\u0027: \u00276.4\u0027},"},{"line_number":246,"context_line":"    # Version 71: Compute RPC v6.4:"},{"line_number":247,"context_line":"    # Add support for vTPM live migration"},{"line_number":248,"context_line":"    {\u0027compute_rpc\u0027: \u00276.4\u0027},"},{"line_number":249,"context_line":")"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"# This is the version after which we can rely on having a persistent"}],"source_content_type":"text/x-python","patch_set":20,"id":"9c741c56_2c19b3cf","line":248,"in_reply_to":"830fa1e0_65c68620","updated":"2025-12-03 04:34:04.000000000","message":"Done","commit_id":"177cd9d746bfbbafc70c93c11b80613596972c17"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bd3498256d010e3fa697634db6d44f6cceb5f8f0","unresolved":true,"context_lines":[{"line_number":245,"context_line":"    {\u0027compute_rpc\u0027: \u00276.4\u0027},"},{"line_number":246,"context_line":"    # Version 71: Compute RPC v6.4:"},{"line_number":247,"context_line":"    # Add support for vTPM live migration"},{"line_number":248,"context_line":"    {\u0027compute_rpc\u0027: \u00276.4\u0027},"},{"line_number":249,"context_line":")"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"# This is the version after which we can rely on having a persistent"}],"source_content_type":"text/x-python","patch_set":20,"id":"5e987641_65b1facf","line":248,"in_reply_to":"e50a36fd_a9b9f308","updated":"2025-12-01 21:04:03.000000000","message":"\u003e Yes. Originally I had this patch going after the \u0027host\u0027 live migration support patch, but I thought you would complain because if we merged that patch, vTPM live migration would be open without any service version check until the service bump patch after it merged.\n\u003e \n\u003e It\u0027s chicken and egg as far as I could tell and my guess was that merging live migration without a service version check first would be worse than bumping the version without live migration. \n\nYeah, neither of those options are great.\n\n\u003e The other option would be to squash the two patches together but I expected that would be -1ed by reviewers as well for being a larger patch.\n\nCan we not land the infrastructure for the bump first and then just do the actual bump in the patch that implements the thing? The latter should be one line in `service.py`\n\n\u003e If another option is to merge live migration with the API block still in place, then that wouldn\u0027t be \"supports live migration\" either. And how would we test it, by mocking out the API block in the tests?\n\u003e \n\u003e It was not clear to me what ordering I should use.\n\nWell, that option is correct for the API, but cheating on the RPC side, meaning if you roll a new API and still had an older compute in the mix, things would break.\n\nIn your decorator, it could just do `if MIN_COMPUTE is None or ver \u003c MIN_COMPUTE`. You could mock the `MIN_COMPUTE` to be whatever you need in tests, and then we could update that global constant in a couple patches when we actually bump the version. I guess I\u0027ll defer to others if I\u0027m the only one that cares this much, but doing something like this seems like it shouldn\u0027t be a huge deal.","commit_id":"177cd9d746bfbbafc70c93c11b80613596972c17"}],"nova/tests/functional/libvirt/test_vtpm.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"42cc9a67a2b21d9e1811cfaa3ca505b85c8c4690","unresolved":true,"context_lines":[{"line_number":362,"context_line":"    supported_tpm_secret_security\u003d["},{"line_number":363,"context_line":"        \u0027user\u0027,"},{"line_number":364,"context_line":"        \u0027host\u0027],"},{"line_number":365,"context_line":"         group\u003d\u0027libvirt\u0027)"},{"line_number":366,"context_line":"        self.start_compute(hostname\u003d\u0027src\u0027)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        server \u003d self._create_server_with_vtpm(secret_security\u003d\u0027user\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"46e897da_f6741c74","line":365,"updated":"2026-02-02 16:45:26.000000000","message":"All these lines look like weird indenting, no?","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d6a0be950732cafda0e3e2bb3015d30b0252ff0c","unresolved":true,"context_lines":[{"line_number":362,"context_line":"    supported_tpm_secret_security\u003d["},{"line_number":363,"context_line":"        \u0027user\u0027,"},{"line_number":364,"context_line":"        \u0027host\u0027],"},{"line_number":365,"context_line":"         group\u003d\u0027libvirt\u0027)"},{"line_number":366,"context_line":"        self.start_compute(hostname\u003d\u0027src\u0027)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        server \u003d self._create_server_with_vtpm(secret_security\u003d\u0027user\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ad6cf163_b18314b4","line":365,"in_reply_to":"46e897da_f6741c74","updated":"2026-02-02 18:59:23.000000000","message":"Yeah ... not sure what happened. I\u0027ll fix it.","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"23991668bcd63e367d4de9e676b33371973d640f","unresolved":false,"context_lines":[{"line_number":362,"context_line":"    supported_tpm_secret_security\u003d["},{"line_number":363,"context_line":"        \u0027user\u0027,"},{"line_number":364,"context_line":"        \u0027host\u0027],"},{"line_number":365,"context_line":"         group\u003d\u0027libvirt\u0027)"},{"line_number":366,"context_line":"        self.start_compute(hostname\u003d\u0027src\u0027)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        server \u003d self._create_server_with_vtpm(secret_security\u003d\u0027user\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"3852c5e9_69b94020","line":365,"in_reply_to":"ad6cf163_b18314b4","updated":"2026-02-03 01:37:12.000000000","message":"Done","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"42cc9a67a2b21d9e1811cfaa3ca505b85c8c4690","unresolved":true,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        ex \u003d self.assertRaises("},{"line_number":379,"context_line":"            client.OpenStackApiException, self._live_migrate, server,"},{"line_number":380,"context_line":"            api\u003dself.admin_api)"},{"line_number":381,"context_line":"        msg \u003d \"\u0027live-migration\u0027 not supported for vTPM-enabled instance\""},{"line_number":382,"context_line":"        self.assertIn(msg, str(ex))"},{"line_number":383,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"e0340209_dce1b094","line":380,"updated":"2026-02-02 16:45:26.000000000","message":"I think this will pass even if we raise 500 instead of one of the 4xx expected exceptions no?","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"23991668bcd63e367d4de9e676b33371973d640f","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        ex \u003d self.assertRaises("},{"line_number":379,"context_line":"            client.OpenStackApiException, self._live_migrate, server,"},{"line_number":380,"context_line":"            api\u003dself.admin_api)"},{"line_number":381,"context_line":"        msg \u003d \"\u0027live-migration\u0027 not supported for vTPM-enabled instance\""},{"line_number":382,"context_line":"        self.assertIn(msg, str(ex))"},{"line_number":383,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"d1af91c1_3aabc029","line":380,"in_reply_to":"326f34d8_0dfb6b2f","updated":"2026-02-03 01:37:12.000000000","message":"Done","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d6a0be950732cafda0e3e2bb3015d30b0252ff0c","unresolved":true,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        ex \u003d self.assertRaises("},{"line_number":379,"context_line":"            client.OpenStackApiException, self._live_migrate, server,"},{"line_number":380,"context_line":"            api\u003dself.admin_api)"},{"line_number":381,"context_line":"        msg \u003d \"\u0027live-migration\u0027 not supported for vTPM-enabled instance\""},{"line_number":382,"context_line":"        self.assertIn(msg, str(ex))"},{"line_number":383,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"326f34d8_0dfb6b2f","line":380,"in_reply_to":"e0340209_dce1b094","updated":"2026-02-02 18:59:23.000000000","message":"Yes I think so. I should add a check for the status code here.","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"42cc9a67a2b21d9e1811cfaa3ca505b85c8c4690","unresolved":true,"context_lines":[{"line_number":409,"context_line":"        ex \u003d self.assertRaises("},{"line_number":410,"context_line":"            client.OpenStackApiException, self._live_migrate, server,"},{"line_number":411,"context_line":"            api\u003dself.admin_api)"},{"line_number":412,"context_line":"        self.assertEqual(400, ex.response.status_code)"},{"line_number":413,"context_line":"        self.assertIn("},{"line_number":414,"context_line":"            \u0027vTPM live migration is not supported by old nova-compute \u0027"},{"line_number":415,"context_line":"            \u0027services. Upgrade your nova-compute services to \u0027"}],"source_content_type":"text/x-python","patch_set":25,"id":"2723b9cb_2b52d89a","line":412,"updated":"2026-02-02 16:45:26.000000000","message":"Yeah, we need this above I think, and I suspect it won\u0027t work now because we\u0027re missing that `NotSupported` case?","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f8a9a59d70d4ad42889a1d5c67b8b00c24bfed3","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        ex \u003d self.assertRaises("},{"line_number":410,"context_line":"            client.OpenStackApiException, self._live_migrate, server,"},{"line_number":411,"context_line":"            api\u003dself.admin_api)"},{"line_number":412,"context_line":"        self.assertEqual(400, ex.response.status_code)"},{"line_number":413,"context_line":"        self.assertIn("},{"line_number":414,"context_line":"            \u0027vTPM live migration is not supported by old nova-compute \u0027"},{"line_number":415,"context_line":"            \u0027services. Upgrade your nova-compute services to \u0027"}],"source_content_type":"text/x-python","patch_set":25,"id":"bdb5636d_fe8cfe21","line":412,"in_reply_to":"2723b9cb_2b52d89a","updated":"2026-02-03 15:21:30.000000000","message":"Done","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"42cc9a67a2b21d9e1811cfaa3ca505b85c8c4690","unresolved":true,"context_lines":[{"line_number":943,"context_line":"        ex \u003d self.assertRaises("},{"line_number":944,"context_line":"            client.OpenStackApiException,"},{"line_number":945,"context_line":"            self._live_migrate_server, server, api\u003dself.admin_api)"},{"line_number":946,"context_line":"        self.assertEqual(400, ex.response.status_code)"},{"line_number":947,"context_line":"        msg \u003d \"\u0027live-migration\u0027 not supported for vTPM-enabled instance\""},{"line_number":948,"context_line":"        self.assertIn(msg, str(ex))"},{"line_number":949,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"82cbb6af_be4a8d1f","line":946,"updated":"2026-02-02 16:45:26.000000000","message":"Hmm, this is the legacy case which we were already raising NotSupported for right? I must be missing where this is gettin translated. Oh I guess it\u0027s because the `NotSupported` base class already has code\u003d400? I guess I still expected us to catch it explicitly, but at least we should assert 400 in the new case at the top here I think.","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d6a0be950732cafda0e3e2bb3015d30b0252ff0c","unresolved":true,"context_lines":[{"line_number":943,"context_line":"        ex \u003d self.assertRaises("},{"line_number":944,"context_line":"            client.OpenStackApiException,"},{"line_number":945,"context_line":"            self._live_migrate_server, server, api\u003dself.admin_api)"},{"line_number":946,"context_line":"        self.assertEqual(400, ex.response.status_code)"},{"line_number":947,"context_line":"        msg \u003d \"\u0027live-migration\u0027 not supported for vTPM-enabled instance\""},{"line_number":948,"context_line":"        self.assertIn(msg, str(ex))"},{"line_number":949,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"d9dee1d2_e4be00b1","line":946,"in_reply_to":"82cbb6af_be4a8d1f","updated":"2026-02-02 18:59:23.000000000","message":"I found the handling for NotSupported and linked it in a comment on nova/api/openstack/migrate_server.py.","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f8a9a59d70d4ad42889a1d5c67b8b00c24bfed3","unresolved":false,"context_lines":[{"line_number":943,"context_line":"        ex \u003d self.assertRaises("},{"line_number":944,"context_line":"            client.OpenStackApiException,"},{"line_number":945,"context_line":"            self._live_migrate_server, server, api\u003dself.admin_api)"},{"line_number":946,"context_line":"        self.assertEqual(400, ex.response.status_code)"},{"line_number":947,"context_line":"        msg \u003d \"\u0027live-migration\u0027 not supported for vTPM-enabled instance\""},{"line_number":948,"context_line":"        self.assertIn(msg, str(ex))"},{"line_number":949,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"814dae2b_1538beaa","line":946,"in_reply_to":"d9dee1d2_e4be00b1","updated":"2026-02-03 15:21:30.000000000","message":"Acknowledged","commit_id":"9c188c119f9acd638aec3d7b62dbc05ea3eca071"}]}
