)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"825112b089de78c93d064290707fa173be81ebf5","unresolved":false,"context_lines":[{"line_number":14,"context_line":"host, which we just wouldn\u0027t find out until post live migration"},{"line_number":15,"context_line":"and then we have to rollback."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"The option is disabled by default for backward compatibility and"},{"line_number":18,"context_line":"also because certain networking backends, like OpenDaylight, are"},{"line_number":19,"context_line":"known to not send network-vif-plugged events unless the port host"},{"line_number":20,"context_line":"binding information changes, which for live migration doesn\u0027t happen"},{"line_number":21,"context_line":"until after the guest is transferred to the destination host."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Related to blueprint neutron-new-port-binding-api"},{"line_number":24,"context_line":"Related-Bug: #1786346"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3f79a3b5_971fb06a","line":21,"range":{"start_line":17,"start_character":0,"end_line":21,"end_character":61},"updated":"2018-08-16 08:55:26.000000000","message":"This approach is probably too limited. It does not work for linux-bridge as-well for OVS hybrid:off.\n\nThe only type that is working with this approach is OVS hybrid:on since the TAP is created by OVS when creating port during pre-live-migration so the agent can detect it and then Neutron sever could send the event to Nova.\n\nThe agent is waiting for the device to be created:\n\n  https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py#L529-L532\n\nAlso it\u0027s important to note that, this approach has already been proposed and abandonned for the same reasons:\n\n  https://review.openstack.org/#/c/246910/14/nova/virt/libvirt/driver.py@4881","commit_id":"c42d6201c193c31dae2628445835889c94cfb06a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f885274567a4e8483af49c34168e68ef25305e66","unresolved":false,"context_lines":[{"line_number":23,"context_line":"Related to blueprint neutron-new-port-binding-api"},{"line_number":24,"context_line":"Related-Bug: #1786346"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"NOTE(danms): Stable-only changes to this patch from master include"},{"line_number":27,"context_line":"removing the RPC-related communication from the destination"},{"line_number":28,"context_line":"to the source node."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":" Conflicts:"},{"line_number":31,"context_line":"\tnova/conf/compute.py"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3f79a3b5_79711b76","line":28,"range":{"start_line":26,"start_character":0,"end_line":28,"end_character":19},"updated":"2018-08-22 16:19:04.000000000","message":"Could probably explain why this is OK to remove in the stable only change and what it means for how it should be used. Basically it just means only ever enable this if you\u0027re using the same networking backend (vif type) universally, or at least are properly using host aggregates to restrict live migrations between the same network types.","commit_id":"2e306c62519275f3e328a638d4221ab6f2d3b80a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9056ffea34080d00501922354235c0904d3f63d3","unresolved":false,"context_lines":[{"line_number":23,"context_line":"Related to blueprint neutron-new-port-binding-api"},{"line_number":24,"context_line":"Related-Bug: #1786346"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"NOTE(danms): Stable-only changes to this patch from master include"},{"line_number":27,"context_line":"removing the RPC-related communication from the destination"},{"line_number":28,"context_line":"to the source node."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":" Conflicts:"},{"line_number":31,"context_line":"\tnova/conf/compute.py"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3f79a3b5_6be70214","line":28,"range":{"start_line":26,"start_character":0,"end_line":28,"end_character":19},"in_reply_to":"3f79a3b5_79711b76","updated":"2018-08-22 16:37:36.000000000","message":"Done","commit_id":"2e306c62519275f3e328a638d4221ab6f2d3b80a"}],"nova/compute/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f885274567a4e8483af49c34168e68ef25305e66","unresolved":false,"context_lines":[{"line_number":6032,"context_line":"    @staticmethod"},{"line_number":6033,"context_line":"    def _get_neutron_events_for_live_migration(instance):"},{"line_number":6034,"context_line":"        # We don\u0027t generate events if CONF.vif_plugging_timeout\u003d0"},{"line_number":6035,"context_line":"        # or if waiting during live migration is disabled,"},{"line_number":6036,"context_line":"        # meaning that the operator disabled using them."},{"line_number":6037,"context_line":"        if (CONF.vif_plugging_timeout and utils.is_neutron() and"},{"line_number":6038,"context_line":"                CONF.compute.live_migration_wait_for_vif_plug):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_39716345","line":6035,"range":{"start_line":6035,"start_character":10,"end_line":6035,"end_character":58},"updated":"2018-08-22 16:19:04.000000000","message":"note to self: stable-only","commit_id":"2e306c62519275f3e328a638d4221ab6f2d3b80a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f885274567a4e8483af49c34168e68ef25305e66","unresolved":false,"context_lines":[{"line_number":6035,"context_line":"        # or if waiting during live migration is disabled,"},{"line_number":6036,"context_line":"        # meaning that the operator disabled using them."},{"line_number":6037,"context_line":"        if (CONF.vif_plugging_timeout and utils.is_neutron() and"},{"line_number":6038,"context_line":"                CONF.compute.live_migration_wait_for_vif_plug):"},{"line_number":6039,"context_line":"            return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027])"},{"line_number":6040,"context_line":"                    for vif in instance.get_network_info()]"},{"line_number":6041,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_f9944b39","line":6038,"range":{"start_line":6038,"start_character":16,"end_line":6038,"end_character":63},"updated":"2018-08-22 16:19:04.000000000","message":"note to self: stable only","commit_id":"2e306c62519275f3e328a638d4221ab6f2d3b80a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f885274567a4e8483af49c34168e68ef25305e66","unresolved":false,"context_lines":[{"line_number":6088,"context_line":""},{"line_number":6089,"context_line":"            deadline \u003d CONF.vif_plugging_timeout"},{"line_number":6090,"context_line":"            error_cb \u003d self._neutron_failed_live_migration_callback"},{"line_number":6091,"context_line":"            with self.virtapi.wait_for_instance_event("},{"line_number":6092,"context_line":"                    instance, events, deadline\u003ddeadline,"},{"line_number":6093,"context_line":"                    error_callback\u003derror_cb):"},{"line_number":6094,"context_line":"                migrate_data \u003d self.compute_rpcapi.pre_live_migration("}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_59953f3f","line":6091,"updated":"2018-08-22 16:19:04.000000000","message":"Would be good to include at least this part of the original comment:\n\n# In order to avoid a race with the vif plugging that the virt\n# driver does on the destination host, we register our events\n# to wait for before calling pre_live_migration.","commit_id":"2e306c62519275f3e328a638d4221ab6f2d3b80a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9056ffea34080d00501922354235c0904d3f63d3","unresolved":false,"context_lines":[{"line_number":6088,"context_line":""},{"line_number":6089,"context_line":"            deadline \u003d CONF.vif_plugging_timeout"},{"line_number":6090,"context_line":"            error_cb \u003d self._neutron_failed_live_migration_callback"},{"line_number":6091,"context_line":"            with self.virtapi.wait_for_instance_event("},{"line_number":6092,"context_line":"                    instance, events, deadline\u003ddeadline,"},{"line_number":6093,"context_line":"                    error_callback\u003derror_cb):"},{"line_number":6094,"context_line":"                migrate_data \u003d self.compute_rpcapi.pre_live_migration("}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_6bc6229d","line":6091,"in_reply_to":"3f79a3b5_59953f3f","updated":"2018-08-22 16:37:36.000000000","message":"Done","commit_id":"2e306c62519275f3e328a638d4221ab6f2d3b80a"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f885274567a4e8483af49c34168e68ef25305e66","unresolved":false,"context_lines":[{"line_number":7010,"context_line":"                                                       new_attachment_id)"},{"line_number":7011,"context_line":"        _test()"},{"line_number":7012,"context_line":""},{"line_number":7013,"context_line":"    def test_get_neutron_events_for_live_migration_empty(self):"},{"line_number":7014,"context_line":"        \"\"\"Tests the various ways that _get_neutron_events_for_live_migration"},{"line_number":7015,"context_line":"        will return an empty list."},{"line_number":7016,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_391ba3ca","line":7013,"updated":"2018-08-22 16:19:04.000000000","message":"It\u0027s not mentioned here since it wasn\u0027t in the master change, and works here because the new option defaults to False, but the other way this will return [] is because the wait option is False. Just a note for other reviewers.","commit_id":"2e306c62519275f3e328a638d4221ab6f2d3b80a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f885274567a4e8483af49c34168e68ef25305e66","unresolved":false,"context_lines":[{"line_number":7062,"context_line":"        \"\"\"Tests the scenario where wait_for_instance_event fails with"},{"line_number":7063,"context_line":"        VirtualInterfacePlugException."},{"line_number":7064,"context_line":"        \"\"\""},{"line_number":7065,"context_line":"        migrate_data \u003d objects.LibvirtLiveMigrateData()"},{"line_number":7066,"context_line":"        mock_pre_live_mig.return_value \u003d migrate_data"},{"line_number":7067,"context_line":"        self.instance.info_cache \u003d objects.InstanceInfoCache("},{"line_number":7068,"context_line":"            network_info\u003dnetwork_model.NetworkInfo(["}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_d962af3e","line":7065,"updated":"2018-08-22 16:19:04.000000000","message":"nit: setting self.flags(live_migration_wait_for_vif_plug\u003dTrue,\n                   group\u003d\u0027compute\u0027) would be more realistic even if not used since we mock out the failure.","commit_id":"2e306c62519275f3e328a638d4221ab6f2d3b80a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9056ffea34080d00501922354235c0904d3f63d3","unresolved":false,"context_lines":[{"line_number":7062,"context_line":"        \"\"\"Tests the scenario where wait_for_instance_event fails with"},{"line_number":7063,"context_line":"        VirtualInterfacePlugException."},{"line_number":7064,"context_line":"        \"\"\""},{"line_number":7065,"context_line":"        migrate_data \u003d objects.LibvirtLiveMigrateData()"},{"line_number":7066,"context_line":"        mock_pre_live_mig.return_value \u003d migrate_data"},{"line_number":7067,"context_line":"        self.instance.info_cache \u003d objects.InstanceInfoCache("},{"line_number":7068,"context_line":"            network_info\u003dnetwork_model.NetworkInfo(["}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_0b0beed5","line":7065,"in_reply_to":"3f79a3b5_d962af3e","updated":"2018-08-22 16:37:36.000000000","message":"Done","commit_id":"2e306c62519275f3e328a638d4221ab6f2d3b80a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f885274567a4e8483af49c34168e68ef25305e66","unresolved":false,"context_lines":[{"line_number":7082,"context_line":""},{"line_number":7083,"context_line":"    @mock.patch(\u0027nova.compute.rpcapi.ComputeAPI.pre_live_migration\u0027)"},{"line_number":7084,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager._rollback_live_migration\u0027)"},{"line_number":7085,"context_line":"    def test_live_migration_wait_vif_plugged_timeout_error("},{"line_number":7086,"context_line":"            self, mock_rollback_live_mig, mock_pre_live_mig):"},{"line_number":7087,"context_line":"        \"\"\"Tests the scenario where wait_for_instance_event raises an"},{"line_number":7088,"context_line":"        eventlet Timeout exception and we\u0027re configured such that vif plugging"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_f9676b4c","line":7085,"updated":"2018-08-22 16:19:04.000000000","message":"same re self.flags(live_migration_wait_for_vif_plug\u003dTrue,\n                   group\u003d\u0027compute\u0027)","commit_id":"2e306c62519275f3e328a638d4221ab6f2d3b80a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9056ffea34080d00501922354235c0904d3f63d3","unresolved":false,"context_lines":[{"line_number":7082,"context_line":""},{"line_number":7083,"context_line":"    @mock.patch(\u0027nova.compute.rpcapi.ComputeAPI.pre_live_migration\u0027)"},{"line_number":7084,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager._rollback_live_migration\u0027)"},{"line_number":7085,"context_line":"    def test_live_migration_wait_vif_plugged_timeout_error("},{"line_number":7086,"context_line":"            self, mock_rollback_live_mig, mock_pre_live_mig):"},{"line_number":7087,"context_line":"        \"\"\"Tests the scenario where wait_for_instance_event raises an"},{"line_number":7088,"context_line":"        eventlet Timeout exception and we\u0027re configured such that vif plugging"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_cb109603","line":7085,"in_reply_to":"3f79a3b5_f9676b4c","updated":"2018-08-22 16:37:36.000000000","message":"Done","commit_id":"2e306c62519275f3e328a638d4221ab6f2d3b80a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f885274567a4e8483af49c34168e68ef25305e66","unresolved":false,"context_lines":[{"line_number":7110,"context_line":"    @mock.patch(\u0027nova.compute.rpcapi.ComputeAPI.pre_live_migration\u0027)"},{"line_number":7111,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager._rollback_live_migration\u0027)"},{"line_number":7112,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager._post_live_migration\u0027)"},{"line_number":7113,"context_line":"    def test_live_migration_wait_vif_plugged_timeout_non_fatal("},{"line_number":7114,"context_line":"            self, mock_post_live_mig, mock_rollback_live_mig,"},{"line_number":7115,"context_line":"            mock_pre_live_mig):"},{"line_number":7116,"context_line":"        \"\"\"Tests the scenario where wait_for_instance_event raises an"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_b95d737a","line":7113,"updated":"2018-08-22 16:19:04.000000000","message":"same re self.flags(live_migration_wait_for_vif_plug\u003dTrue,\n                   group\u003d\u0027compute\u0027)","commit_id":"2e306c62519275f3e328a638d4221ab6f2d3b80a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9056ffea34080d00501922354235c0904d3f63d3","unresolved":false,"context_lines":[{"line_number":7110,"context_line":"    @mock.patch(\u0027nova.compute.rpcapi.ComputeAPI.pre_live_migration\u0027)"},{"line_number":7111,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager._rollback_live_migration\u0027)"},{"line_number":7112,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager._post_live_migration\u0027)"},{"line_number":7113,"context_line":"    def test_live_migration_wait_vif_plugged_timeout_non_fatal("},{"line_number":7114,"context_line":"            self, mock_post_live_mig, mock_rollback_live_mig,"},{"line_number":7115,"context_line":"            mock_pre_live_mig):"},{"line_number":7116,"context_line":"        \"\"\"Tests the scenario where wait_for_instance_event raises an"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_8bf61ed7","line":7113,"in_reply_to":"3f79a3b5_b95d737a","updated":"2018-08-22 16:37:36.000000000","message":"Done","commit_id":"2e306c62519275f3e328a638d4221ab6f2d3b80a"}],"releasenotes/notes/live_migration_wait_for_vif_plug-c9dcb034067890d8.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f885274567a4e8483af49c34168e68ef25305e66","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    for network interface plugging to complete on the destination host before"},{"line_number":7,"context_line":"    starting the guest transfer on the source host during live migration."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Note that this option is read on the source host of a live migration."},{"line_number":10,"context_line":"    If you set this option the same on all of your compute hosts, which you"},{"line_number":11,"context_line":"    should do if you use the same networking backend universally, you do not"},{"line_number":12,"context_line":"    have to worry about this."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3f79a3b5_194ca7c6","line":9,"range":{"start_line":9,"start_character":4,"end_line":9,"end_character":73},"updated":"2018-08-22 16:19:04.000000000","message":"nit: I would just remove this. This section is copied from the config option and you removed it there since it\u0027s not really important for the backport.","commit_id":"2e306c62519275f3e328a638d4221ab6f2d3b80a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9056ffea34080d00501922354235c0904d3f63d3","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    for network interface plugging to complete on the destination host before"},{"line_number":7,"context_line":"    starting the guest transfer on the source host during live migration."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Note that this option is read on the source host of a live migration."},{"line_number":10,"context_line":"    If you set this option the same on all of your compute hosts, which you"},{"line_number":11,"context_line":"    should do if you use the same networking backend universally, you do not"},{"line_number":12,"context_line":"    have to worry about this."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3f79a3b5_abd99a56","line":9,"range":{"start_line":9,"start_character":4,"end_line":9,"end_character":73},"in_reply_to":"3f79a3b5_194ca7c6","updated":"2018-08-22 16:37:36.000000000","message":"Done","commit_id":"2e306c62519275f3e328a638d4221ab6f2d3b80a"}]}
