)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"28b8713428113d50f6e1f197fe9687e7debf0ee3","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     morenod \u003cdsanzmor@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-08-19 11:59:49 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Handle multi-cell deployments in live-migration scenario tests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In multi-cell Nova deployments, live migration between cells is not"},{"line_number":10,"context_line":"supported. Several scenario tests (zone_migration, host_maintenance)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"c8df043f_eddca1c7","line":7,"updated":"2026-08-19 13:15:27.000000000","message":"multi cell is one example but its not the only use case this enables\nThis applies when different storage backends on diffent host or a number of other case such as mixed os version or hardware generations\n\nso the souce and dest migration host are normally free for watcher and nova to selesct but when that is not true all tempet plugins are expected to respect \n\n`migration_source_host and migration_dest_host` or skip if they cant","commit_id":"227584af2ccd27333d71bd5005b698806a54d1c0"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"b1aca4c58b38dcd4879ae203298e4247968c4ed0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"86cf6dd7_cf62271e","updated":"2026-08-05 11:31:29.000000000","message":"-1: I think that since we are now adding \"can_migrate_between_any_hosts\" check, we also need to check all other strategies, since they don\u0027t know about nova cells, they may choose an invalid destination host, in a different cell. So strategy tests like the ones for workload_stabilization, vm_workload_consolidation, etc, should also be skipped in that case, and these ones don\u0027t allow us to select destinations hosts (unless we add scopes, but that\u0027s another story)","commit_id":"cb22534324734692a05b2fd6fd154061a80eef9a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f45c503032d089f8f88c6241ba291318de36c5d0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b73f59f7_97393714","updated":"2026-08-04 23:00:24.000000000","message":"Looks reasonable to me, just a question about asserting after the move.","commit_id":"cb22534324734692a05b2fd6fd154061a80eef9a"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"527dbdbeeb55e2d0e6dca8cc460e1448d15a57e9","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f70e2a76_3d7770c9","in_reply_to":"11c6078e_f8da39bb","updated":"2026-08-12 11:02:59.000000000","message":"We can propose another change to cover all other strategies, but since this patch adds the skip for \"CONF.compute_feature_enabled.can_migrate_between_any_hosts\", we would be ignoring that the issue also happens in the others strategies, which also require the similar handling.","commit_id":"cb22534324734692a05b2fd6fd154061a80eef9a"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"f0fc009e7adbbb93715a0974dd95045e2af659ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"11c6078e_f8da39bb","in_reply_to":"86cf6dd7_cf62271e","updated":"2026-08-10 11:30:32.000000000","message":"I have already check all strategies where we select a destination host for a migration, and they are only zone_migration and host_maintenance, which are already fixed on this review.\n\nFor the other strategies, the destination host is selected by watcher, not by us during the test, so we cannot fix in the same way, and it is out of the scope of this review, which is to run or not to run a test that requires to select a destination host, if we are not sure that we can migrate to that host.","commit_id":"cb22534324734692a05b2fd6fd154061a80eef9a"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"527dbdbeeb55e2d0e6dca8cc460e1448d15a57e9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"8b467ec7_8cb17506","updated":"2026-08-12 11:02:59.000000000","message":"I really think that","commit_id":"25e9833a488ce7c7663cf1062b8d32995c280d0b"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"527dbdbeeb55e2d0e6dca8cc460e1448d15a57e9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"b59042fe_383d689a","updated":"2026-08-12 11:02:59.000000000","message":"Overall is good.\nIt would be good to have a CI job (e.g. gnocci) using source and destination hosts configuration in tempest, to validate the use of the option. \nI\u0027m ok with as is if other reviews are also happy with it.","commit_id":"25e9833a488ce7c7663cf1062b8d32995c280d0b"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c7d35eaba97153bd87099255a316b52235664427","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"dda753e3_f2a7a11b","updated":"2026-08-24 11:23:15.000000000","message":"I think that cover what we need for these test that specifies the destination host. We need to extend this to cover other tests that would also fail when can_migrate_between_any_hosts is False.","commit_id":"227584af2ccd27333d71bd5005b698806a54d1c0"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"7f7c6c13732c6b70df7fe2ccfdc31ee3a2c76c5b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"fc6299c6_a26e6a50","updated":"2026-08-24 11:23:39.000000000","message":"Tests are running and passing:\n\nhttps://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_20d/openstack/20dfe33ea4824376a13342d01226c48f/testr_results.html","commit_id":"227584af2ccd27333d71bd5005b698806a54d1c0"}],"watcher_tempest_plugin/tests/scenario/base.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3c8700c0be67913782185233efbea2f6ed7c3443","unresolved":true,"context_lines":[{"line_number":195,"context_line":"        for agg in aggregates:"},{"line_number":196,"context_line":"            if host in agg.get(\u0027hosts\u0027, []):"},{"line_number":197,"context_line":"                return agg[\u0027hosts\u0027]"},{"line_number":198,"context_line":"        return []"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    @classmethod"},{"line_number":201,"context_line":"    def get_host_other_than(cls, server_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"2fe041ee_8bded3d8","line":198,"updated":"2026-07-30 13:36:08.000000000","message":"this make the assumtion that a compute node is only in at most 1 aggreate which is incorrect\n\nwe shoudl use\n\nhttps://github.com/openstack/tempest/blob/fa340b1f5fff8f57a018be206644c81b6d36b3d4/tempest/config.py#L537\nand\n\nhttps://github.com/openstack/tempest/blob/fa340b1f5fff8f57a018be206644c81b6d36b3d4/tempest/config.py#L417-L426\n\ninstad to chosoe the souce host and alterniate host when live mgiration is not supprote acorss all hsots","commit_id":"b6457e035187f9000c304984837771f256362304"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"28b8713428113d50f6e1f197fe9687e7debf0ee3","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        for agg in aggregates:"},{"line_number":196,"context_line":"            if host in agg.get(\u0027hosts\u0027, []):"},{"line_number":197,"context_line":"                return agg[\u0027hosts\u0027]"},{"line_number":198,"context_line":"        return []"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    @classmethod"},{"line_number":201,"context_line":"    def get_host_other_than(cls, server_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"47e4cb0b_11a7cdfa","line":198,"in_reply_to":"2fe041ee_8bded3d8","updated":"2026-08-19 13:15:27.000000000","message":"Acknowledged","commit_id":"b6457e035187f9000c304984837771f256362304"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"28b8713428113d50f6e1f197fe9687e7debf0ee3","unresolved":true,"context_lines":[{"line_number":294,"context_line":"        destination the same), and leaving both unset without"},{"line_number":295,"context_line":"        can_migrate_between_any_hosts could select hosts in different cells."},{"line_number":296,"context_line":"        \"\"\""},{"line_number":297,"context_line":"        migration_source \u003d CONF.compute.migration_source_host"},{"line_number":298,"context_line":"        migration_dest \u003d CONF.compute.migration_dest_host"},{"line_number":299,"context_line":"        defined_hosts \u003d bool(migration_source) !\u003d bool(migration_dest)"},{"line_number":300,"context_line":"        if defined_hosts or ("},{"line_number":301,"context_line":"                not CONF.compute_feature_enabled.can_migrate_between_any_hosts"},{"line_number":302,"context_line":"                and not (migration_source or migration_dest)):"},{"line_number":303,"context_line":"            raise self.skipException("},{"line_number":304,"context_line":"                \"Set both migration_source_host and migration_dest_host, \""},{"line_number":305,"context_line":"                \"or neither with can_migrate_between_any_hosts enabled.\""},{"line_number":306,"context_line":"            )"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def wait_for_all_action_plans_to_finish(self):"},{"line_number":309,"context_line":"        assert test_utils.call_until_true("}],"source_content_type":"text/x-python","patch_set":6,"id":"44288496_12d05a08","line":306,"range":{"start_line":297,"start_character":5,"end_line":306,"end_character":13},"updated":"2026-08-19 13:15:27.000000000","message":"i think this is a littel easier to grock but what you have is valid.\n\n\n```suggestion\n        if CONF.compute_feature_enabled.can_migrate_between_any_hosts:\n    return\n\n    src \u003d CONF.compute.migration_source_host\n    dst \u003d CONF.compute.migration_dest_host\n\n    if not (src and dst):\n        raise self.skipException(\n            \"When can_migrate_between_any_hosts is False, both migration_source_host \"\n            \"and migration_dest_host must be configured.\"\n        )\n\n    if src \u003d\u003d dst:\n        raise self.skipException(\n            \"migration_source_host and migration_dest_host must be different hosts.\"\n        )\n```\n\nwe are bing a littel strictter then tempest as tempest does not requrie that both option are set.\n\nwhen only souce is set nova select the dest when both are set then the migration happen betwene the specified hosts. typeiclly you are corect that either both will be set or neither so this is ok for use to be a bit stricter in this case","commit_id":"227584af2ccd27333d71bd5005b698806a54d1c0"}],"watcher_tempest_plugin/tests/scenario/test_execute_host_maintenance.py":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"527dbdbeeb55e2d0e6dca8cc460e1448d15a57e9","unresolved":true,"context_lines":[{"line_number":90,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027host_maintenance\u0027])"},{"line_number":91,"context_line":"    def test_execute_host_maintenance_strategy_backup_node(self):"},{"line_number":92,"context_line":"        migration_dest \u003d CONF.compute.migration_dest_host"},{"line_number":93,"context_line":"        if not migration_dest:"},{"line_number":94,"context_line":"            if not CONF.compute_feature_enabled.can_migrate_between_any_hosts:"},{"line_number":95,"context_line":"                raise self.skipException("},{"line_number":96,"context_line":"                    \"migration_dest_host is not set and \""},{"line_number":97,"context_line":"                    \"can_migrate_between_any_hosts is False.\""},{"line_number":98,"context_line":"                )"},{"line_number":99,"context_line":"        self.check_min_enabled_compute_nodes(2)"},{"line_number":100,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"},{"line_number":101,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"}],"source_content_type":"text/x-python","patch_set":5,"id":"170b8747_e38c1ad0","line":98,"range":{"start_line":93,"start_character":0,"end_line":98,"end_character":17},"updated":"2026-08-12 11:02:59.000000000","message":"it really needs both right? source and destination, otherwise the test may create a instance in the destination host if no source host is defined.","commit_id":"25e9833a488ce7c7663cf1062b8d32995c280d0b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"64a43acf2f6004381682dba24d29c035a8f09a37","unresolved":true,"context_lines":[{"line_number":90,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027host_maintenance\u0027])"},{"line_number":91,"context_line":"    def test_execute_host_maintenance_strategy_backup_node(self):"},{"line_number":92,"context_line":"        migration_dest \u003d CONF.compute.migration_dest_host"},{"line_number":93,"context_line":"        if not migration_dest:"},{"line_number":94,"context_line":"            if not CONF.compute_feature_enabled.can_migrate_between_any_hosts:"},{"line_number":95,"context_line":"                raise self.skipException("},{"line_number":96,"context_line":"                    \"migration_dest_host is not set and \""},{"line_number":97,"context_line":"                    \"can_migrate_between_any_hosts is False.\""},{"line_number":98,"context_line":"                )"},{"line_number":99,"context_line":"        self.check_min_enabled_compute_nodes(2)"},{"line_number":100,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"},{"line_number":101,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5aecef82_ccb46eac","line":98,"range":{"start_line":93,"start_character":0,"end_line":98,"end_character":17},"in_reply_to":"170b8747_e38c1ad0","updated":"2026-08-12 12:35:12.000000000","message":"at the very least if we dotn have both the test need to select a soruce node that is not the dest explcitly.\n\nand in the multi cell case it cant do that reliable so we shoudl have both in that event.","commit_id":"25e9833a488ce7c7663cf1062b8d32995c280d0b"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"2f05fe7c6c77dc80f41cb93c77a987118e828dcc","unresolved":true,"context_lines":[{"line_number":90,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027host_maintenance\u0027])"},{"line_number":91,"context_line":"    def test_execute_host_maintenance_strategy_backup_node(self):"},{"line_number":92,"context_line":"        migration_dest \u003d CONF.compute.migration_dest_host"},{"line_number":93,"context_line":"        if not migration_dest:"},{"line_number":94,"context_line":"            if not CONF.compute_feature_enabled.can_migrate_between_any_hosts:"},{"line_number":95,"context_line":"                raise self.skipException("},{"line_number":96,"context_line":"                    \"migration_dest_host is not set and \""},{"line_number":97,"context_line":"                    \"can_migrate_between_any_hosts is False.\""},{"line_number":98,"context_line":"                )"},{"line_number":99,"context_line":"        self.check_min_enabled_compute_nodes(2)"},{"line_number":100,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"},{"line_number":101,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"}],"source_content_type":"text/x-python","patch_set":5,"id":"04d14469_a4e135bc","line":98,"range":{"start_line":93,"start_character":0,"end_line":98,"end_character":17},"in_reply_to":"5aecef82_ccb46eac","updated":"2026-08-19 13:27:15.000000000","message":"I have moved all the logic to an external function, considering both migration_source and migration_dest to run or not the test","commit_id":"25e9833a488ce7c7663cf1062b8d32995c280d0b"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"527dbdbeeb55e2d0e6dca8cc460e1448d15a57e9","unresolved":true,"context_lines":[{"line_number":108,"context_line":"        }"},{"line_number":109,"context_line":"        if migration_source:"},{"line_number":110,"context_line":"            create_kwargs[\u0027host\u0027] \u003d migration_source"},{"line_number":111,"context_line":"        instance \u003d self.create_server(**create_kwargs)"},{"line_number":112,"context_line":"        self.wait_for_instances_in_model([instance])"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        src_node \u003d self.get_host_for_server(instance[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"7d8766ab_1072613d","line":111,"range":{"start_line":111,"start_character":0,"end_line":111,"end_character":54},"updated":"2026-08-12 11:02:59.000000000","message":"not sure why isn\u0027t using self._create_instance like other tests.","commit_id":"25e9833a488ce7c7663cf1062b8d32995c280d0b"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"2f05fe7c6c77dc80f41cb93c77a987118e828dcc","unresolved":true,"context_lines":[{"line_number":108,"context_line":"        }"},{"line_number":109,"context_line":"        if migration_source:"},{"line_number":110,"context_line":"            create_kwargs[\u0027host\u0027] \u003d migration_source"},{"line_number":111,"context_line":"        instance \u003d self.create_server(**create_kwargs)"},{"line_number":112,"context_line":"        self.wait_for_instances_in_model([instance])"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        src_node \u003d self.get_host_for_server(instance[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"fef3a8d6_1197688a","line":111,"range":{"start_line":111,"start_character":0,"end_line":111,"end_character":54},"in_reply_to":"7d8766ab_1072613d","updated":"2026-08-19 13:27:15.000000000","message":"yep, I have moved to use create_instance","commit_id":"25e9833a488ce7c7663cf1062b8d32995c280d0b"}],"watcher_tempest_plugin/tests/scenario/test_execute_zone_migration.py":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"bdae1c40815810a68a3d2081f36e43e1f8205648","unresolved":false,"context_lines":[{"line_number":474,"context_line":"        self.assertEqual(vm_volume_host, dst_pool_vm_volume)"},{"line_number":475,"context_line":"        self.assertNotEqual(vm_volume_host, src_pool_vm_volume)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        if with_destination_host:"},{"line_number":478,"context_line":"            self.assertEqual("},{"line_number":479,"context_line":"                self.get_host_for_server(instance[\u0027id\u0027]),"},{"line_number":480,"context_line":"                dst_node"}],"source_content_type":"text/x-python","patch_set":3,"id":"e4ee4b82_37713311","line":477,"updated":"2026-08-03 10:53:20.000000000","message":"The _without_destination test variants skip the assertion that the instance moved to a specific host (dst_node), but add no alternative assertion to verify the instance actually migrated away from src_node. This means the compute-migration portion of these tests is effectively unvalidated post-ex...\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: The without_destination variants could pass even if the watcher action plan failed to migrate the compute instance, giving false confidence that compute migration works in multi-cell scenarios. This is the primary purpose of these new tests.\n\n**Recommendation**:\nAdd a minimal assertion in the with_destination_host\u003dFalse path to verify the instance actually left the source node, e.g.: self.assertNotEqual(self.get_host_for_server(instance[\u0027id\u0027]), src_node). This applies to both _execute_volume_and_compute_migration and _execute_volume_and_compute_migrate_bfv.","commit_id":"4bdab7de2eedd93b445fe3bb894b84f757965888"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9e8c65515e317425e01482a766542e77a8884d39","unresolved":false,"context_lines":[{"line_number":521,"context_line":"            )"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def _execute_volume_and_compute_migrate_bfv(self,"},{"line_number":524,"context_line":"                                               with_destination_host\u003dTrue):"},{"line_number":525,"context_line":"        \"\"\"Common logic for boot-from-volume migration tests."},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"        Ensure VMs booted from cinder volumes can be migrated together with"}],"source_content_type":"text/x-python","patch_set":3,"id":"43224433_e5085d64","line":524,"updated":"2026-08-03 12:18:57.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"4bdab7de2eedd93b445fe3bb894b84f757965888"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9e8c65515e317425e01482a766542e77a8884d39","unresolved":false,"context_lines":[{"line_number":635,"context_line":"            self):"},{"line_number":636,"context_line":"        \"\"\"Test zone migration with boot-from-volume instance."},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"        Same as test_execute_zone_migration_volume_and_compute_bfv_with_destination"},{"line_number":639,"context_line":"        but without specifying a destination host, letting the zone_migration"},{"line_number":640,"context_line":"        strategy select the destination. This is safer in multi-cell"},{"line_number":641,"context_line":"        deployments where specifying a destination host could result in a"}],"source_content_type":"text/x-python","patch_set":3,"id":"ca6f4c33_c2d6d555","line":638,"updated":"2026-08-03 12:18:57.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"4bdab7de2eedd93b445fe3bb894b84f757965888"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d52b77a279613b1b772039dff8c328923c7b91aa","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    @decorators.idempotent_id(\u00272119b69f-1cbd-4874-a82e-fceec093ebbb\u0027)"},{"line_number":51,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027zone_migration\u0027])"},{"line_number":52,"context_line":"    def test_execute_zone_migration_with_destination_host(self):"},{"line_number":53,"context_line":"        if not CONF.compute_feature_enabled.can_migrate_between_any_hosts:"},{"line_number":54,"context_line":"            raise self.skipException("},{"line_number":55,"context_line":"                \"Specifying a destination host is not supported when \""},{"line_number":56,"context_line":"                \"can_migrate_between_any_hosts is False.\""},{"line_number":57,"context_line":"            )"},{"line_number":58,"context_line":"        # This test requires metrics injection"},{"line_number":59,"context_line":"        self.check_min_enabled_compute_nodes(2)"},{"line_number":60,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"}],"source_content_type":"text/x-python","patch_set":4,"id":"a3c99384_00207991","line":57,"range":{"start_line":53,"start_character":7,"end_line":57,"end_character":13},"updated":"2026-08-05 10:15:51.000000000","message":"so this is based on our converation on this topic but you seam to have ignored the fact that tempest has a way to specify source and destionation host for migration testing\n```\n    cfg.StrOpt(\u0027migration_source_host\u0027,\n               default\u003dNone,\n               help\u003d\"Specify source host for live-migration, cold-migration\"\n                    \" and resize tests. If option is not set tests will use\"\n                    \" host automatically.\"),\n    cfg.StrOpt(\u0027migration_dest_host\u0027,\n               default\u003dNone,\n               help\u003d\"Specify destination host for live-migration and cold\"\n                    \" migration. If option is not set tests will use host\"\n                    \" automatically.\"),\n```\n\nhttps://github.com/openstack/tempest/blob/master/tempest/config.py#L417-L426\n\ninstead of skipping when can_migrate_between_any_hosts is false we shoudl use\n\nmigration_source_host to boot the vms and \nmigration_dest_host as the not to migrate too.\n\n\nwe also should avoid using \n\n\ninstances \u003d self._create_one_instance_per_host() in general\n\nwe really do not need a vm on each host for the zone migrtion tests we just need 1 vm\n\n_create_one_instance_per_host() is only really needed in the vm consolidation tests\n\nwe shoudl really avoid defaultign to that as most of our test only need 1 or two vms not 1 per compute node","commit_id":"cb22534324734692a05b2fd6fd154061a80eef9a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"28b8713428113d50f6e1f197fe9687e7debf0ee3","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    @decorators.idempotent_id(\u00272119b69f-1cbd-4874-a82e-fceec093ebbb\u0027)"},{"line_number":51,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027zone_migration\u0027])"},{"line_number":52,"context_line":"    def test_execute_zone_migration_with_destination_host(self):"},{"line_number":53,"context_line":"        if not CONF.compute_feature_enabled.can_migrate_between_any_hosts:"},{"line_number":54,"context_line":"            raise self.skipException("},{"line_number":55,"context_line":"                \"Specifying a destination host is not supported when \""},{"line_number":56,"context_line":"                \"can_migrate_between_any_hosts is False.\""},{"line_number":57,"context_line":"            )"},{"line_number":58,"context_line":"        # This test requires metrics injection"},{"line_number":59,"context_line":"        self.check_min_enabled_compute_nodes(2)"},{"line_number":60,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1621e567_d23ff3d7","line":57,"range":{"start_line":53,"start_character":7,"end_line":57,"end_character":13},"in_reply_to":"18acf445_a9cdef91","updated":"2026-08-19 13:15:27.000000000","message":"technially any tempest test that supprot cold/live migraiton is alwasy ment to follow those as a general rule of tempest test so that is why that is the more corect approch.\n\nunless that woudl directly controdict what the test is trying to validate in which case skiping would be correct.","commit_id":"cb22534324734692a05b2fd6fd154061a80eef9a"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"f0fc009e7adbbb93715a0974dd95045e2af659ee","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    @decorators.idempotent_id(\u00272119b69f-1cbd-4874-a82e-fceec093ebbb\u0027)"},{"line_number":51,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027zone_migration\u0027])"},{"line_number":52,"context_line":"    def test_execute_zone_migration_with_destination_host(self):"},{"line_number":53,"context_line":"        if not CONF.compute_feature_enabled.can_migrate_between_any_hosts:"},{"line_number":54,"context_line":"            raise self.skipException("},{"line_number":55,"context_line":"                \"Specifying a destination host is not supported when \""},{"line_number":56,"context_line":"                \"can_migrate_between_any_hosts is False.\""},{"line_number":57,"context_line":"            )"},{"line_number":58,"context_line":"        # This test requires metrics injection"},{"line_number":59,"context_line":"        self.check_min_enabled_compute_nodes(2)"},{"line_number":60,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"}],"source_content_type":"text/x-python","patch_set":4,"id":"18acf445_a9cdef91","line":57,"range":{"start_line":53,"start_character":7,"end_line":57,"end_character":13},"in_reply_to":"a24576c7_85e07f04","updated":"2026-08-10 11:30:32.000000000","message":"I havent ignored the migration_source_host and migration_dest_host vars, it is just this is the first time somebody mentioned them. I thought we all agreed to use can_migrate_between_any_hosts to discard the test because it is not complatible with muti-cell envs.\n\nAnyway, I have introduce them on host_maintenance and zone_migration tests, giving preference to migration_source_host if specified and using migration_dest_host as preferred option, or, in combination with can_migrate_between_any_hosts, to disable tests\n\nI have also removed the create_one_instance_per_host on host_maintenance and zone_migration where we only need one server","commit_id":"cb22534324734692a05b2fd6fd154061a80eef9a"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"b1aca4c58b38dcd4879ae203298e4247968c4ed0","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    @decorators.idempotent_id(\u00272119b69f-1cbd-4874-a82e-fceec093ebbb\u0027)"},{"line_number":51,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027zone_migration\u0027])"},{"line_number":52,"context_line":"    def test_execute_zone_migration_with_destination_host(self):"},{"line_number":53,"context_line":"        if not CONF.compute_feature_enabled.can_migrate_between_any_hosts:"},{"line_number":54,"context_line":"            raise self.skipException("},{"line_number":55,"context_line":"                \"Specifying a destination host is not supported when \""},{"line_number":56,"context_line":"                \"can_migrate_between_any_hosts is False.\""},{"line_number":57,"context_line":"            )"},{"line_number":58,"context_line":"        # This test requires metrics injection"},{"line_number":59,"context_line":"        self.check_min_enabled_compute_nodes(2)"},{"line_number":60,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"}],"source_content_type":"text/x-python","patch_set":4,"id":"a24576c7_85e07f04","line":57,"range":{"start_line":53,"start_character":7,"end_line":57,"end_character":13},"in_reply_to":"a3c99384_00207991","updated":"2026-08-05 11:31:29.000000000","message":"yeah, I think that is the best solution to support both options and skip only when both are None and can_migrate_between_any_hosts is False.\nSupporting only \"can_migrate_between_any_hosts\" will partially solve the problem in multicell environments (skip instead failing). So if the effort to add these 2 options isn\u0027t too big, we could add them in this patch. Lets see what David has to say.\n\nAnd yeah, we don\u0027t really need to create instances in all hosts as the test does, it could first select the source_node and then create an instance on it. We already identified this in the past, but we never came with a fix/improvement. This improvement would require us to audit all tests and fix them accordingly.","commit_id":"cb22534324734692a05b2fd6fd154061a80eef9a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f45c503032d089f8f88c6241ba291318de36c5d0","unresolved":true,"context_lines":[{"line_number":478,"context_line":"            self.assertEqual("},{"line_number":479,"context_line":"                self.get_host_for_server(instance[\u0027id\u0027]),"},{"line_number":480,"context_line":"                dst_node"},{"line_number":481,"context_line":"            )"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027zone_migration\u0027, \u0027volume_migration\u0027])"},{"line_number":484,"context_line":"    @decorators.idempotent_id(\u00279ceff861-d6cd-4a88-8a8f-0a5d659b7b38\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"e95108c2_96de6815","line":481,"updated":"2026-08-04 23:00:24.000000000","message":"I wonder if it might be at least a little helpful to assertNotEqual to the src_node if a destination host was not specified? (Or is this asserted/implied by something else already?)","commit_id":"cb22534324734692a05b2fd6fd154061a80eef9a"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"f0fc009e7adbbb93715a0974dd95045e2af659ee","unresolved":true,"context_lines":[{"line_number":478,"context_line":"            self.assertEqual("},{"line_number":479,"context_line":"                self.get_host_for_server(instance[\u0027id\u0027]),"},{"line_number":480,"context_line":"                dst_node"},{"line_number":481,"context_line":"            )"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027zone_migration\u0027, \u0027volume_migration\u0027])"},{"line_number":484,"context_line":"    @decorators.idempotent_id(\u00279ceff861-d6cd-4a88-8a8f-0a5d659b7b38\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa14bdf_7107220e","line":481,"in_reply_to":"88dbaaa9_8d5e12e4","updated":"2026-08-10 11:30:32.000000000","message":"modified","commit_id":"cb22534324734692a05b2fd6fd154061a80eef9a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"28b8713428113d50f6e1f197fe9687e7debf0ee3","unresolved":false,"context_lines":[{"line_number":478,"context_line":"            self.assertEqual("},{"line_number":479,"context_line":"                self.get_host_for_server(instance[\u0027id\u0027]),"},{"line_number":480,"context_line":"                dst_node"},{"line_number":481,"context_line":"            )"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027zone_migration\u0027, \u0027volume_migration\u0027])"},{"line_number":484,"context_line":"    @decorators.idempotent_id(\u00279ceff861-d6cd-4a88-8a8f-0a5d659b7b38\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f3d5174_37bb38be","line":481,"in_reply_to":"baa14bdf_7107220e","updated":"2026-08-19 13:15:27.000000000","message":"Done","commit_id":"cb22534324734692a05b2fd6fd154061a80eef9a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d52b77a279613b1b772039dff8c328923c7b91aa","unresolved":true,"context_lines":[{"line_number":478,"context_line":"            self.assertEqual("},{"line_number":479,"context_line":"                self.get_host_for_server(instance[\u0027id\u0027]),"},{"line_number":480,"context_line":"                dst_node"},{"line_number":481,"context_line":"            )"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027zone_migration\u0027, \u0027volume_migration\u0027])"},{"line_number":484,"context_line":"    @decorators.idempotent_id(\u00279ceff861-d6cd-4a88-8a8f-0a5d659b7b38\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"88dbaaa9_8d5e12e4","line":481,"in_reply_to":"e95108c2_96de6815","updated":"2026-08-05 10:15:51.000000000","message":"ya that reasonable i think","commit_id":"cb22534324734692a05b2fd6fd154061a80eef9a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f45c503032d089f8f88c6241ba291318de36c5d0","unresolved":true,"context_lines":[{"line_number":614,"context_line":"            self.assertEqual("},{"line_number":615,"context_line":"                self.get_host_for_server(instance[\u0027id\u0027]),"},{"line_number":616,"context_line":"                dst_node"},{"line_number":617,"context_line":"            )"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027zone_migration\u0027, \u0027volume_migration\u0027])"},{"line_number":620,"context_line":"    @decorators.idempotent_id(\u0027a3c1e7b4-5f92-4d08-b6a3-1e9c84f20d57\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dd926c40_809717de","line":617,"updated":"2026-08-04 23:00:24.000000000","message":"Same comment.","commit_id":"cb22534324734692a05b2fd6fd154061a80eef9a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"28b8713428113d50f6e1f197fe9687e7debf0ee3","unresolved":false,"context_lines":[{"line_number":614,"context_line":"            self.assertEqual("},{"line_number":615,"context_line":"                self.get_host_for_server(instance[\u0027id\u0027]),"},{"line_number":616,"context_line":"                dst_node"},{"line_number":617,"context_line":"            )"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027zone_migration\u0027, \u0027volume_migration\u0027])"},{"line_number":620,"context_line":"    @decorators.idempotent_id(\u0027a3c1e7b4-5f92-4d08-b6a3-1e9c84f20d57\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"56d35899_033e4418","line":617,"in_reply_to":"dd926c40_809717de","updated":"2026-08-19 13:15:27.000000000","message":"also the same applies here we dont need to wrpa the not equal in an else\nbut that is not a blocker","commit_id":"cb22534324734692a05b2fd6fd154061a80eef9a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"28b8713428113d50f6e1f197fe9687e7debf0ee3","unresolved":true,"context_lines":[{"line_number":476,"context_line":"                self.get_host_for_server(instance[\u0027id\u0027]),"},{"line_number":477,"context_line":"                dst_node"},{"line_number":478,"context_line":"            )"},{"line_number":479,"context_line":"        else:"},{"line_number":480,"context_line":"            self.assertNotEqual("},{"line_number":481,"context_line":"                self.get_host_for_server(instance[\u0027id\u0027]),"},{"line_number":482,"context_line":"                src_node"}],"source_content_type":"text/x-python","patch_set":6,"id":"6a99eec1_22532578","line":479,"range":{"start_line":479,"start_character":8,"end_line":479,"end_character":13},"updated":"2026-08-19 13:15:27.000000000","message":"nit this should alwasy be valid to assert so we do no need the else","commit_id":"227584af2ccd27333d71bd5005b698806a54d1c0"}]}
