)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d3f9eea6247166228d3eedbbf01a6022a282b0f3","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, when reverting a resize, we call Neutron from the compute"},{"line_number":10,"context_line":"manager to setup the instance networks on the source host. Later, in"},{"line_number":11,"context_line":"the libvirt driver, we plugs the VIF(s)s and start the guest paused,"},{"line_number":12,"context_line":"then wait for network-vif-plugged events from Neutron. The reasonning"},{"line_number":13,"context_line":"is that once Nova plugs the VIF(s), the Neutron agent wires them up on"},{"line_number":14,"context_line":"the host. Once it\u0027s done, we can unpause the guest."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5fc1f717_7d9f1a03","line":11,"range":{"start_line":11,"start_character":23,"end_line":11,"end_character":28},"updated":"2019-03-08 15:07:30.000000000","message":"plug","commit_id":"2e55989a4873baf915cb006c4c19dbd0d2c2e429"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"69b568a9b374c9a3b1729540f05372e6e0cec3c9","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, when reverting a resize, we call Neutron from the compute"},{"line_number":10,"context_line":"manager to setup the instance networks on the source host. Later, in"},{"line_number":11,"context_line":"the libvirt driver, we plugs the VIF(s)s and start the guest paused,"},{"line_number":12,"context_line":"then wait for network-vif-plugged events from Neutron. The reasonning"},{"line_number":13,"context_line":"is that once Nova plugs the VIF(s), the Neutron agent wires them up on"},{"line_number":14,"context_line":"the host. Once it\u0027s done, we can unpause the guest."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5fc1f717_9391969c","line":11,"range":{"start_line":11,"start_character":23,"end_line":11,"end_character":28},"in_reply_to":"5fc1f717_7d9f1a03","updated":"2019-03-08 16:58:53.000000000","message":"Done","commit_id":"2e55989a4873baf915cb006c4c19dbd0d2c2e429"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d3f9eea6247166228d3eedbbf01a6022a282b0f3","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Currently, when reverting a resize, we call Neutron from the compute"},{"line_number":10,"context_line":"manager to setup the instance networks on the source host. Later, in"},{"line_number":11,"context_line":"the libvirt driver, we plugs the VIF(s)s and start the guest paused,"},{"line_number":12,"context_line":"then wait for network-vif-plugged events from Neutron. The reasonning"},{"line_number":13,"context_line":"is that once Nova plugs the VIF(s), the Neutron agent wires them up on"},{"line_number":14,"context_line":"the host. Once it\u0027s done, we can unpause the guest."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5fc1f717_9da2064b","line":12,"range":{"start_line":12,"start_character":59,"end_line":12,"end_character":69},"updated":"2019-03-08 15:07:30.000000000","message":"reasoning","commit_id":"2e55989a4873baf915cb006c4c19dbd0d2c2e429"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"69b568a9b374c9a3b1729540f05372e6e0cec3c9","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Currently, when reverting a resize, we call Neutron from the compute"},{"line_number":10,"context_line":"manager to setup the instance networks on the source host. Later, in"},{"line_number":11,"context_line":"the libvirt driver, we plugs the VIF(s)s and start the guest paused,"},{"line_number":12,"context_line":"then wait for network-vif-plugged events from Neutron. The reasonning"},{"line_number":13,"context_line":"is that once Nova plugs the VIF(s), the Neutron agent wires them up on"},{"line_number":14,"context_line":"the host. Once it\u0027s done, we can unpause the guest."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5fc1f717_53e9ee17","line":12,"range":{"start_line":12,"start_character":59,"end_line":12,"end_character":69},"in_reply_to":"5fc1f717_9da2064b","updated":"2019-03-08 16:58:53.000000000","message":"Done","commit_id":"2e55989a4873baf915cb006c4c19dbd0d2c2e429"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"11415d9321471d0291752fe7fbd6c91253f8df2e","unresolved":false,"context_lines":[{"line_number":22,"context_line":"This patch uses the existing vifs_already_plugged kwarg to"},{"line_number":23,"context_line":"_create_domain_and_network() to disable waiting for"},{"line_number":24,"context_line":"network-vif-plugged events during a revert resize operation."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Partial-bug: 1813789"},{"line_number":27,"context_line":"Change-Id: I125e2af11ebcdc444c62ed41a9ce7985db6d5576"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5fc1f717_53a1eea8","line":25,"updated":"2019-03-08 17:05:19.000000000","message":"You should really be talking about https://review.openstack.org/#/c/595069/ in here for historical context as well because we have flip-flopped on this twice now. Plus we should really have a shit load of good code comments in the code about why we\u0027re doing this so people don\u0027t have to jump through all of these git history loops - especially when it\u0027s near impossible to get a git blame in github on the compute manager or libvirt driver code these days.","commit_id":"5ee4015d93f4f770aa34ec1b4b556b4f2fe904e0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a4c554464ee354570ce81fb15e831c422645f13a","unresolved":false,"context_lines":[{"line_number":22,"context_line":"This patch uses the existing vifs_already_plugged kwarg to"},{"line_number":23,"context_line":"_create_domain_and_network() to disable waiting for"},{"line_number":24,"context_line":"network-vif-plugged events during a revert resize operation."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Partial-bug: 1813789"},{"line_number":27,"context_line":"Change-Id: I125e2af11ebcdc444c62ed41a9ce7985db6d5576"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5fc1f717_136da603","line":25,"in_reply_to":"5fc1f717_53a1eea8","updated":"2019-03-08 17:15:30.000000000","message":"BTW, I made that change for a reason:\n\nhttps://bugs.launchpad.net/nova/+bug/1788403\n\nWithout it, we have race failures in the gate for other reasons - because we revert the resize but because we say we\u0027re done before vif plugging is maybe all ready, when tempest tries to ssh into the guest it fails. So if you essentially revert that change, you\u0027re re-introducing this other race gate failure. Which is why I\u0027m saying if we\u0027re going to revert that change we need to have a plan to still wait for the event before we do the port binding in migrate_instance_finish.","commit_id":"5ee4015d93f4f770aa34ec1b4b556b4f2fe904e0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e2ed7dbe3d61da9c28a0daf98031c7d38b9fc23a","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, when reverting a resize, we ask the Neutron API to"},{"line_number":10,"context_line":"migrate_instance_finish(), which updates the port bindings back to the"},{"line_number":11,"context_line":"source host. Later, in the libvirt driver, we plug the VIF(s)s and"},{"line_number":12,"context_line":"start the guest paused, then wait for network-vif-plugged events from"},{"line_number":13,"context_line":"Neutron. The reasoning is that once Nova plugs the VIF(s), the Neutron"},{"line_number":14,"context_line":"agent wires them up on the host. Once it\u0027s done, we can unpause the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5fc1f717_7d71e8a7","line":11,"range":{"start_line":11,"start_character":61,"end_line":11,"end_character":62},"updated":"2019-03-26 20:09:39.000000000","message":"x","commit_id":"747ec2c483ca62a8a3072a4047852bcc1ce59e07"}],"nova/compute/manager.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f04bd8ec5fabac310417e614d6c6392c70593608","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        raise exception.NovaException(_(\u0027Instance event failed\u0027))"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def setup_listeners_for_event(self, instance, event_names):"},{"line_number":428,"context_line":"        \"\"\"Set up to receive instance events. Listeners will be created for all"},{"line_number":429,"context_line":"        events specified by event_names. If an error_callback is provided, it"},{"line_number":430,"context_line":"        will be remembered along with the event_names. To actually wait for the"},{"line_number":431,"context_line":"        events, wait_for_instance_event must be called with the same"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_53f4f8ce","line":428,"range":{"start_line":428,"start_character":11,"end_line":428,"end_character":44},"updated":"2019-02-28 16:21:11.000000000","message":"\"Set up to receive instance events\" *and* start wait()\u0027ing","commit_id":"0ca8c650bb57e7787952376240f43997886c7063"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0d9e311992a032576f8d38ce2c1ef56fedd7c400","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        raise exception.NovaException(_(\u0027Instance event failed\u0027))"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def setup_listeners_for_event(self, instance, event_names):"},{"line_number":428,"context_line":"        \"\"\"Set up to receive instance events. Listeners will be created for all"},{"line_number":429,"context_line":"        events specified by event_names. If an error_callback is provided, it"},{"line_number":430,"context_line":"        will be remembered along with the event_names. To actually wait for the"},{"line_number":431,"context_line":"        events, wait_for_instance_event must be called with the same"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_b34c449e","line":428,"range":{"start_line":428,"start_character":11,"end_line":428,"end_character":44},"in_reply_to":"9fdfeff1_53f4f8ce","updated":"2019-02-28 16:37:59.000000000","message":"This doesn\u0027t make any sense. You\u0027re single-threaded here, and the whole point of the this code was to allow for a single thread to be able to setup, generate, and wait for an event without having the potential to drop it. If you wait here, like you say below, then you\u0027ll never run the code that will, for example, poke neutron to do the thing that ends up sending the event. That, or you force all users of this to become multiple threads, which is a terrible idea.","commit_id":"0ca8c650bb57e7787952376240f43997886c7063"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f04bd8ec5fabac310417e614d6c6392c70593608","unresolved":false,"context_lines":[{"line_number":427,"context_line":"    def setup_listeners_for_event(self, instance, event_names):"},{"line_number":428,"context_line":"        \"\"\"Set up to receive instance events. Listeners will be created for all"},{"line_number":429,"context_line":"        events specified by event_names. If an error_callback is provided, it"},{"line_number":430,"context_line":"        will be remembered along with the event_names. To actually wait for the"},{"line_number":431,"context_line":"        events, wait_for_instance_event must be called with the same"},{"line_number":432,"context_line":"        event_names."},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        :param instance: The instance for which an event is expected"},{"line_number":435,"context_line":"        :param event_names: A list of event names. Each element is a"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_730b3cd4","line":432,"range":{"start_line":430,"start_character":54,"end_line":432,"end_character":20},"updated":"2019-02-28 16:21:11.000000000","message":"Not true, see below.","commit_id":"0ca8c650bb57e7787952376240f43997886c7063"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f04bd8ec5fabac310417e614d6c6392c70593608","unresolved":false,"context_lines":[{"line_number":462,"context_line":"    @contextlib.contextmanager"},{"line_number":463,"context_line":"    def wait_for_instance_event(self, instance, event_names, deadline\u003d300,"},{"line_number":464,"context_line":"                                error_callback\u003dNone):"},{"line_number":465,"context_line":"        \"\"\"Wait for events to arrive."},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"        This context manager will immediately yield, then wait for all the"},{"line_number":468,"context_line":"        scheduled events to complete."},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        Note that this uses an eventlet.timeout.Timeout to bound the"},{"line_number":471,"context_line":"        operation, so callers should be prepared to catch that"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_136510af","line":468,"range":{"start_line":465,"start_character":0,"end_line":468,"end_character":37},"updated":"2019-02-28 16:21:11.000000000","message":"This whole docstring isn\u0027t true - the event is wait()\u0027ed for in setup_listeners_for_event(), here we just process is.\n\nTODO: How do we handle the case where the event hasn\u0027t been received (ie, wait() hasn\u0027t completed) by the time we reach here?","commit_id":"0ca8c650bb57e7787952376240f43997886c7063"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f04bd8ec5fabac310417e614d6c6392c70593608","unresolved":false,"context_lines":[{"line_number":490,"context_line":"            name, tag \u003d event_name"},{"line_number":491,"context_line":"            event_name \u003d objects.InstanceExternalEvent.make_key(name, tag)"},{"line_number":492,"context_line":"            with eventlet.timeout.Timeout(deadline):"},{"line_number":493,"context_line":"                actual_event \u003d self.events[event_name].wait()"},{"line_number":494,"context_line":"                if actual_event.status \u003d\u003d \u0027completed\u0027:"},{"line_number":495,"context_line":"                    continue"},{"line_number":496,"context_line":"                decision \u003d error_callback(event_name, instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_b33764b0","line":493,"updated":"2019-02-28 16:21:11.000000000","message":"This wait() needs to go into setup_listeners_for_event() to make sure we can receive it even if the code that needs it hasn\u0027t been reached yet. And then here we just do the processing.","commit_id":"0ca8c650bb57e7787952376240f43997886c7063"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0d9e311992a032576f8d38ce2c1ef56fedd7c400","unresolved":false,"context_lines":[{"line_number":490,"context_line":"            name, tag \u003d event_name"},{"line_number":491,"context_line":"            event_name \u003d objects.InstanceExternalEvent.make_key(name, tag)"},{"line_number":492,"context_line":"            with eventlet.timeout.Timeout(deadline):"},{"line_number":493,"context_line":"                actual_event \u003d self.events[event_name].wait()"},{"line_number":494,"context_line":"                if actual_event.status \u003d\u003d \u0027completed\u0027:"},{"line_number":495,"context_line":"                    continue"},{"line_number":496,"context_line":"                decision \u003d error_callback(event_name, instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_739b3c16","line":493,"in_reply_to":"9fdfeff1_b33764b0","updated":"2019-02-28 16:37:59.000000000","message":"Um, what? If you wait before you yield to run the code then you\u0027ll just wait through the timeout because you haven\u0027t run the code that will generate the event yet.","commit_id":"0ca8c650bb57e7787952376240f43997886c7063"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0d9e311992a032576f8d38ce2c1ef56fedd7c400","unresolved":false,"context_lines":[{"line_number":3237,"context_line":"        network_info \u003d instance.get_network_info()"},{"line_number":3238,"context_line":"        for vif in network_info:"},{"line_number":3239,"context_line":"            self.virtapi.setup_listeners_for_event(instance,"},{"line_number":3240,"context_line":"                (\u0027network-vif-plugged\u0027, vif[\u0027id\u0027])"},{"line_number":3241,"context_line":"        if evacuate:"},{"line_number":3242,"context_line":"            self.network_api.setup_networks_on_host("},{"line_number":3243,"context_line":"                    context, instance, self.host)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_13dc30df","line":3240,"updated":"2019-02-28 16:37:59.000000000","message":"Now you\u0027ve put some state into compute manager for a long time. If you decide not to wait for whatever reason between here and the actual wait, we will never clean those up and they\u0027ll sit around forever.","commit_id":"0ca8c650bb57e7787952376240f43997886c7063"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dfbbacd087dc3815ce32e3ef1e50c78e922b9f2d","unresolved":false,"context_lines":[{"line_number":4181,"context_line":"            # setup of the network for instance should be on the source host."},{"line_number":4182,"context_line":"            # So set the migration_p[\u0027dest_compute\u0027] to source host at here."},{"line_number":4183,"context_line":"            migration_p[\u0027dest_compute\u0027] \u003d migration.source_compute"},{"line_number":4184,"context_line":"            self.network_api.migrate_instance_finish(context,"},{"line_number":4185,"context_line":"                                                     instance,"},{"line_number":4186,"context_line":"                                                     migration_p)"},{"line_number":4187,"context_line":"            network_info \u003d self.network_api.get_instance_nw_info(context,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_58ccac60","line":4184,"range":{"start_line":4184,"start_character":29,"end_line":4184,"end_character":52},"updated":"2019-03-08 15:32:54.000000000","message":"I think this is the problem. This updates the port binding to point back at the source host, which triggers an event (I believe), it\u0027s the same issue with evacuate. If we get the event before we call driver.finish_revert_migration then we\u0027re not waiting for it and driver.finish_revert_migration will timeout.\n\nIf we can recreate this in downstream CI, how about we just put some logging before this call and before calling the driver to plug vifs and if we recreate we should see the event coming in between these two times.","commit_id":"2e55989a4873baf915cb006c4c19dbd0d2c2e429"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e1de8e744ba3e4abb027faa7a649b6e946d3451a","unresolved":false,"context_lines":[{"line_number":4181,"context_line":"            # setup of the network for instance should be on the source host."},{"line_number":4182,"context_line":"            # So set the migration_p[\u0027dest_compute\u0027] to source host at here."},{"line_number":4183,"context_line":"            migration_p[\u0027dest_compute\u0027] \u003d migration.source_compute"},{"line_number":4184,"context_line":"            self.network_api.migrate_instance_finish(context,"},{"line_number":4185,"context_line":"                                                     instance,"},{"line_number":4186,"context_line":"                                                     migration_p)"},{"line_number":4187,"context_line":"            network_info \u003d self.network_api.get_instance_nw_info(context,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_73874a63","line":4184,"range":{"start_line":4184,"start_character":29,"end_line":4184,"end_character":52},"in_reply_to":"5fc1f717_58ccac60","updated":"2019-03-08 16:57:57.000000000","message":"I think we have this already in the downstream BZ:\n\nself._update_port_binding_for_instance() is called from migrate_instance_finish() and we see it log here:\n\n2019-02-14 18:50:51.138 [./compute-0/var/log/containers/nova/nova-compute.log] 1 INFO nova.network.neutronv2.api [req-22971baa-a410-4a82-912e-08b53baea63f 4bffcaca53e74db68d1958ba64224bec 11e189d140ce44b0b8151116b1bef61e - default default] [instance: 787d531e-fad8-481d-aec6-b9b3ddc2d4f6] Updating port b3ada13d-46a6-40a3-a0a5-a4e33cde96ee with attributes {\u0027device_owner\u0027: u\u0027compute:nova\u0027, \u0027binding:host_id\u0027: u\u0027compute-0.localdomain\u0027}\n\nThen Nova gets the event:\n\n2019-02-14 18:50:54.239 21 DEBUG nova.api.openstack.wsgi [req-db5eec36-5a9b-4aa7-a912-12675341e615 d5269ffd668f49a1bd69346fb444c9d2 2fb49df20cec443bb2cab70931c6f5f4 - default default] Action: \u0027create\u0027, calling method: \u003cbound method ServerExternalEventsController.create of \u003cnova.api.openstack.compute.server_external_events.ServerExternalEventsController object at 0x7ff81a2c2210\u003e\u003e, body: {\"events\": [{\"status\": \"completed\", \"tag\": \"b3ada13d-46a6-40a3-a0a5-a4e33cde96ee\", \"name\": \"network-vif-plugged\", \"server_uuid\": \"787d531e-fad8-481d-aec6-b9b3ddc2d4f6\"}]} _process_stack /usr/lib/python2.7/site-packages/nova/api/openstack/wsgi.py:615\n\nThen both computes ignore it:\n\n\n2019-02-14 18:50:54.299 [./compute-0/var/log/containers/nova/nova-compute.log] 1 DEBUG nova.compute.manager [req-db5eec36-5a9b-4aa7-a912-12675341e615 d5269ffd668f49a1bd69346fb444c9d2 2fb49df20cec443bb2cab70931c6f5f4 - default default] [instance: 787d531e-fad8-481d-aec6-b9b3ddc2d4f6] No waiting events found dispatching network-vif-plugged-b3ada13d-46a6-40a3-a0a5-a4e33cde96ee pop_instance_event /usr/lib/python2.7/site-packages/nova/compute/manager.py:366\n\n2019-02-14 18:50:54.300 [./compute-1/var/log/containers/nova/nova-compute.log] 1 DEBUG nova.compute.manager [req-db5eec36-5a9b-4aa7-a912-12675341e615 d5269ffd668f49a1bd69346fb444c9d2 2fb49df20cec443bb2cab70931c6f5f4 - default default] [instance: 787d531e-fad8-481d-aec6-b9b3ddc2d4f6] No waiting events found dispatching network-vif-plugged-b3ada13d-46a6-40a3-a0a5-a4e33cde96ee pop_instance_event /usr/lib/python2.7/site-packages/nova/compute/manager.py:366\n\nAnd here\u0027s the driver finish_revert_migration:\n\n./compute-0/var/log/containers/nova/nova-compute.log:2019-02-14 18:50:54.483 1 DEBUG nova.virt.libvirt.driver [req-22971baa-a410-4a82-912e-08b53baea63f 4bffcaca53e74db68d1958ba64224bec 11e189d140ce44b0b8151116b1bef61e - default default] [instance: 787d531e-fad8-481d-aec6-b9b3ddc2d4f6] Starting finish_revert_migration finish_revert_migration /usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py:8477\n\nSo the times are:\n\n18:50:51.138 Update port binding\n18:50:54.239 Event received\n18:50:54.300 Event ignored on both computes\n18:50:54.483 Driver finish_revert_migration start","commit_id":"2e55989a4873baf915cb006c4c19dbd0d2c2e429"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1247719e4f32a20961bc791a913901f2cead4beb","unresolved":false,"context_lines":[{"line_number":4181,"context_line":"            # setup of the network for instance should be on the source host."},{"line_number":4182,"context_line":"            # So set the migration_p[\u0027dest_compute\u0027] to source host at here."},{"line_number":4183,"context_line":"            migration_p[\u0027dest_compute\u0027] \u003d migration.source_compute"},{"line_number":4184,"context_line":"            self.network_api.migrate_instance_finish(context,"},{"line_number":4185,"context_line":"                                                     instance,"},{"line_number":4186,"context_line":"                                                     migration_p)"},{"line_number":4187,"context_line":"            network_info \u003d self.network_api.get_instance_nw_info(context,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_b3fdb2b2","line":4184,"range":{"start_line":4184,"start_character":29,"end_line":4184,"end_character":52},"in_reply_to":"5fc1f717_73874a63","updated":"2019-03-08 17:02:59.000000000","message":"OK so your change doesn\u0027t really fix the underlying root issue, it just ignores it so it doesn\u0027t fail. If we were to really fix this, we would setup a context manager to wait for the event before doing the port binding change here, and then pass vifs_already_plugged (I guess?) to the driver. Or just change the driver\u0027s finish_revert_migration to never wait for events because the compute manager already does.","commit_id":"2e55989a4873baf915cb006c4c19dbd0d2c2e429"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7a0ae9b0512350cf28a4b820934ff83eb085fb66","unresolved":false,"context_lines":[{"line_number":4181,"context_line":"            # setup of the network for instance should be on the source host."},{"line_number":4182,"context_line":"            # So set the migration_p[\u0027dest_compute\u0027] to source host at here."},{"line_number":4183,"context_line":"            migration_p[\u0027dest_compute\u0027] \u003d migration.source_compute"},{"line_number":4184,"context_line":"            self.network_api.migrate_instance_finish(context,"},{"line_number":4185,"context_line":"                                                     instance,"},{"line_number":4186,"context_line":"                                                     migration_p)"},{"line_number":4187,"context_line":"            network_info \u003d self.network_api.get_instance_nw_info(context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_13dda641","line":4184,"range":{"start_line":4184,"start_character":29,"end_line":4184,"end_character":52},"updated":"2019-03-08 17:03:56.000000000","message":"As noted in PS3, you\u0027re getting the event triggered from this, so why aren\u0027t we setting up a context manager (like in live migration) and waiting for the event before calling this? Then we could safely change the driver method to not wait for events, because the compute manager already does.","commit_id":"5ee4015d93f4f770aa34ec1b4b556b4f2fe904e0"}]}
