)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7bcf409229ea41cd77f83b6299904f6e28864294","unresolved":false,"context_lines":[{"line_number":7,"context_line":"libvirt: Add wait for vif unplug events on destroy"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We add a force wait for vif unplug events from neutron because some"},{"line_number":10,"context_line":"operations like rebuilding require the VM to be completely unplugged or"},{"line_number":11,"context_line":"neutron will never send a vifplugged notification since the port status"},{"line_number":12,"context_line":"does not change."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a4dcd0f_49a5e69f","line":10,"updated":"2015-08-11 20:59:43.000000000","message":"I was pretty sure at one point we made a change so that we wouldn\u0027t wait for a vif unplug event during rebuild (or maybe it was migrate) because it wasn\u0027t going to come.  I\u0027d have to find that change and see how related it is.","commit_id":"125f5171b908e95bc5481bb47ea49eea2db5fa6a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3adbace4819ebce3cedd87901c3534b2d3d0f1e9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"libvirt: Add wait for vif unplug events on destroy"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We add a force wait for vif unplug events from neutron because some"},{"line_number":10,"context_line":"operations like rebuilding require the VM to be completely unplugged or"},{"line_number":11,"context_line":"neutron will never send a vifplugged notification since the port status"},{"line_number":12,"context_line":"does not change."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a4dcd0f_1c507ad3","line":10,"in_reply_to":"1a4dcd0f_49a5e69f","updated":"2015-08-11 21:22:48.000000000","message":"I was thinking of commit 4814e9126ec19a1edfa9c696138c4b3fec71aa0d for resize.  I\u0027m not sure if we could do something similar for rebuild.","commit_id":"125f5171b908e95bc5481bb47ea49eea2db5fa6a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"545c6f7f7cb2325522d5c7177946037ada9affed","unresolved":false,"context_lines":[{"line_number":9,"context_line":"We add a force wait for vif unplug events from neutron because some"},{"line_number":10,"context_line":"operations like rebuilding require the VM to be completely unplugged or"},{"line_number":11,"context_line":"neutron will never send a vifplugged notification since the port status"},{"line_number":12,"context_line":"does not change."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"The default is for this event to not be fatal and simply log a warning"},{"line_number":15,"context_line":"but can be configured to re-raise the exception. Regardless the instance"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"da20952f_a591c954","line":12,"updated":"2015-09-01 16:15:12.000000000","message":"I believe this is the race you\u0027ve mentioned, but it could be explained a bit more clear and with detail in the commit message, basically taking part of what Jordan said in patch set 7 and working that in here:\n\n\"The reason you are not seeing failures in tempest from this is because it is a race condition. If you have lots of ports , port status changes/syncs do not always happen as fast as nova can destroy/create the instance. The trace you would get back is something about port in use ( been a while since I have seen one of these since we patch nova locally with this commit).\n\nCurrently, unplugged notifications are sent out by neutron and nova does not take any action on them. This patch allows for better communication between nova and neutron which is a good thing IMO.\"\n\nAlso, if \"The trace you would get back is something about port in use\" was something you can recreate with trunk nova/neutron (but I think you\u0027re on Juno), then that would help in explaining this issue in the bug report.","commit_id":"71737c491169f1192ac22c07ee746a1052e94740"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b0b413a01112251a4d396e67abff82f49df61c92","unresolved":false,"context_lines":[{"line_number":14,"context_line":"The default is for this event to not be fatal and simply log a warning"},{"line_number":15,"context_line":"but can be configured to re-raise the exception. Regardless the instance"},{"line_number":16,"context_line":"is cleaned up and destroyed."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes-Bug: #1482392"},{"line_number":19,"context_line":"Change-Id: Ibb1c69fe3f44feb6d439cd3b6ff68331dc2757a1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"da20952f_6b0c573b","line":17,"updated":"2015-08-29 03:17:40.000000000","message":"Please add in DocImpact and describe the new configuration varaible","commit_id":"71737c491169f1192ac22c07ee746a1052e94740"}],"nova/virt/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3adbace4819ebce3cedd87901c3534b2d3d0f1e9","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                    \u0027vif_plugging_is_fatal). If this is set to zero and \u0027"},{"line_number":59,"context_line":"                    \u0027vif_plugging_is_fatal is False, events should not \u0027"},{"line_number":60,"context_line":"                    \u0027be expected to arrive at all.\u0027),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027vif_unplugging_is_fatal\u0027,"},{"line_number":62,"context_line":"                default\u003dTrue,"},{"line_number":63,"context_line":"                help\u003d\"Fail instance destroy if vif unplugging fails\"),"},{"line_number":64,"context_line":"    cfg.IntOpt(\u0027vif_unplugging_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_5c4a8227","line":61,"updated":"2015-08-11 21:22:48.000000000","message":"Why do we need new config options for this?  I think that if someone was going to change this for vif_plugging_is_fatal, they\u0027d also be changing this, so just re-use what we already have for both plug and unplug cases.","commit_id":"125f5171b908e95bc5481bb47ea49eea2db5fa6a"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3adbace4819ebce3cedd87901c3534b2d3d0f1e9","unresolved":false,"context_lines":[{"line_number":802,"context_line":"        except eventlet.timeout.Timeout:"},{"line_number":803,"context_line":"            # We never heard from Neutron"},{"line_number":804,"context_line":"            LOG.warn(_LW(\u0027Timeout waiting for vif unplugged callback for \u0027"},{"line_number":805,"context_line":"                          \u0027instance %(uuid)s\u0027), {\u0027uuid\u0027: instance[\u0027uuid\u0027]})"},{"line_number":806,"context_line":"            if CONF.vif_unplugging_is_fatal:"},{"line_number":807,"context_line":"                raise exception.VirtualInterfaceDestroyException()"},{"line_number":808,"context_line":"        finally:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_9cf56aee","line":805,"updated":"2015-08-11 21:22:48.000000000","message":"instance.uuid since this is an object, not a dict","commit_id":"125f5171b908e95bc5481bb47ea49eea2db5fa6a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3adbace4819ebce3cedd87901c3534b2d3d0f1e9","unresolved":false,"context_lines":[{"line_number":4400,"context_line":"                      \u0027%(event)s for instance %(uuid)s\u0027),"},{"line_number":4401,"context_line":"                  {\u0027event\u0027: event_name, \u0027uuid\u0027: instance.uuid},"},{"line_number":4402,"context_line":"                  instance\u003dinstance)"},{"line_number":4403,"context_line":"        if CONF.vif_plugging_is_fatal:"},{"line_number":4404,"context_line":"            raise exception.VirtualInterfaceDestroyException()"},{"line_number":4405,"context_line":""},{"line_number":4406,"context_line":"    def _get_neutron_events(self, network_info):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_1cb4fa32","line":4403,"updated":"2015-08-11 21:22:48.000000000","message":"Don\u0027t you mean vif_unplugging_is_fatal?","commit_id":"125f5171b908e95bc5481bb47ea49eea2db5fa6a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed92c2071f7bda25098cb862930724540fc0d208","unresolved":false,"context_lines":[{"line_number":6274,"context_line":"        #             and check whether the source system can also see it."},{"line_number":6275,"context_line":"        shared_storage \u003d (dest \u003d\u003d self.get_host_ip_addr())"},{"line_number":6276,"context_line":""},{"line_number":6277,"context_line":"        # if we are using rbd for images, then we are always using shared"},{"line_number":6278,"context_line":"        # storage"},{"line_number":6279,"context_line":"        if CONF.libvirt.images_type \u003d\u003d \u0027rbd\u0027:"},{"line_number":6280,"context_line":"            shared_storage \u003d True"}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_3987e2d8","line":6277,"updated":"2015-08-27 20:24:37.000000000","message":"This seems like a completely separate change and should not be in this patch.","commit_id":"9be44e16ca06428590b4ca2fe02a0f951d4b2a4a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b0b413a01112251a4d396e67abff82f49df61c92","unresolved":false,"context_lines":[{"line_number":770,"context_line":"            if CONF.libvirt.virt_type \u003d\u003d \u0027lxc\u0027:"},{"line_number":771,"context_line":"                self._teardown_container(instance)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    def destroy(self, context, instance, network_info, block_device_info\u003dNone,"},{"line_number":774,"context_line":"                destroy_disks\u003dTrue, migrate_data\u003dNone):"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        # wait force a network-vif-unplugged event from neutron."}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_cb3243f2","line":773,"updated":"2015-08-29 03:17:40.000000000","message":"why is this not done in the compute layer?","commit_id":"71737c491169f1192ac22c07ee746a1052e94740"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f2961061b79e253c3347d297a3872c25f5857dba","unresolved":false,"context_lines":[{"line_number":770,"context_line":"            if CONF.libvirt.virt_type \u003d\u003d \u0027lxc\u0027:"},{"line_number":771,"context_line":"                self._teardown_container(instance)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    def destroy(self, context, instance, network_info, block_device_info\u003dNone,"},{"line_number":774,"context_line":"                destroy_disks\u003dTrue, migrate_data\u003dNone):"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        # wait force a network-vif-unplugged event from neutron."}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_0530b506","line":773,"in_reply_to":"da20952f_1c76fed6","updated":"2015-09-01 16:25:18.000000000","message":"Matt, when the neutron agents go away, for example with ovn there will really be no need for the event for the vif plugging. But that is going on a tangent","commit_id":"71737c491169f1192ac22c07ee746a1052e94740"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0530c27e3914a9b94c273556cb7732e44002a0ce","unresolved":false,"context_lines":[{"line_number":770,"context_line":"            if CONF.libvirt.virt_type \u003d\u003d \u0027lxc\u0027:"},{"line_number":771,"context_line":"                self._teardown_container(instance)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    def destroy(self, context, instance, network_info, block_device_info\u003dNone,"},{"line_number":774,"context_line":"                destroy_disks\u003dTrue, migrate_data\u003dNone):"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        # wait force a network-vif-unplugged event from neutron."}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_7c1b7a81","line":773,"in_reply_to":"da20952f_1c76fed6","updated":"2015-08-31 22:15:09.000000000","message":"My main issue with this change is it\u0027s global nature - I don\u0027t think we really care about waiting for neutron to tear down the ports when we\u0027re deleting the instance.  We really only care about operations where the instance is being rebuilt or maybe migrated to another host....but I think migration already ignores vif plug events.\n\nSo I think there should be a check in here such that you only wait for vif unplug events if instance.task_state \u003d\u003d task_states.REBUILDING.  Does that make sense?","commit_id":"71737c491169f1192ac22c07ee746a1052e94740"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"060de5c0c8bca1d66c91968d39c463a2d71327a9","unresolved":false,"context_lines":[{"line_number":770,"context_line":"            if CONF.libvirt.virt_type \u003d\u003d \u0027lxc\u0027:"},{"line_number":771,"context_line":"                self._teardown_container(instance)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    def destroy(self, context, instance, network_info, block_device_info\u003dNone,"},{"line_number":774,"context_line":"                destroy_disks\u003dTrue, migrate_data\u003dNone):"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        # wait force a network-vif-unplugged event from neutron."}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_42c78364","line":773,"in_reply_to":"da20952f_49449248","updated":"2015-09-01 15:57:18.000000000","message":"I\u0027m not really keen on redoing _rebuild_default_impl right now for a bug fix if we don\u0027t have a clear design, i.e. a spec, for what that is going to do and how it makes this better.\n\nI would agree with moving this wait code closer to the unplug_vifs call in the cleanup method.  That would be similar to how we wait for the vif plugged event during spawn:\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L4512","commit_id":"71737c491169f1192ac22c07ee746a1052e94740"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"86acb7f702cb24729d1bf320dc9d8036cc5c53f1","unresolved":false,"context_lines":[{"line_number":770,"context_line":"            if CONF.libvirt.virt_type \u003d\u003d \u0027lxc\u0027:"},{"line_number":771,"context_line":"                self._teardown_container(instance)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    def destroy(self, context, instance, network_info, block_device_info\u003dNone,"},{"line_number":774,"context_line":"                destroy_disks\u003dTrue, migrate_data\u003dNone):"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        # wait force a network-vif-unplugged event from neutron."}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_f9422e0e","line":773,"in_reply_to":"da20952f_7c1b7a81","updated":"2015-09-01 05:37:02.000000000","message":"@Matt, or we just add parameter \u0027waiting_unplug_event\u0027, when rebuild instance, we set the parameter as True?","commit_id":"71737c491169f1192ac22c07ee746a1052e94740"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"a433fcdc1b3526abad12f9ede422e8fe30537ba8","unresolved":false,"context_lines":[{"line_number":770,"context_line":"            if CONF.libvirt.virt_type \u003d\u003d \u0027lxc\u0027:"},{"line_number":771,"context_line":"                self._teardown_container(instance)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    def destroy(self, context, instance, network_info, block_device_info\u003dNone,"},{"line_number":774,"context_line":"                destroy_disks\u003dTrue, migrate_data\u003dNone):"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        # wait force a network-vif-unplugged event from neutron."}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_49449248","line":773,"in_reply_to":"da20952f_7c1b7a81","updated":"2015-09-01 13:39:27.000000000","message":"Agree. Also, I think all of this code should go to the cleanup method, where vif are being unplugged and not before the destroy itself.\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L837\n\nAlso, maybe we should split the _rebuild_default_impl into pre and port and reimplement rebuild() in the driver without the need to add more checks and logic to the destroy method.","commit_id":"71737c491169f1192ac22c07ee746a1052e94740"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9b434c06d1584e3180a1094b410a621e415c274d","unresolved":false,"context_lines":[{"line_number":770,"context_line":"            if CONF.libvirt.virt_type \u003d\u003d \u0027lxc\u0027:"},{"line_number":771,"context_line":"                self._teardown_container(instance)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    def destroy(self, context, instance, network_info, block_device_info\u003dNone,"},{"line_number":774,"context_line":"                destroy_disks\u003dTrue, migrate_data\u003dNone):"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        # wait force a network-vif-unplugged event from neutron."}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_1c76fed6","line":773,"in_reply_to":"da20952f_cb3243f2","updated":"2015-08-31 22:07:59.000000000","message":"Gary, the vif plug wait stuff is only implemented in the libvirt driver.  It\u0027s a bit confusing, but the virt driver is the one that\u0027s registering and waiting for the events which come in through the nova-api and are sitting in a queue to be processed in the compute manager.  So I think they are just doing the same thing as what\u0027s implemented in the spawn method for the vif-plugged event, but in the unplug/destroy case.  Other virt drivers definitely should be doing the same thing, or it should be abstracted up a layer, like the handle_lifecycle_event stuff.","commit_id":"71737c491169f1192ac22c07ee746a1052e94740"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"128ce99cd18dc3fcef8091f4be38d82ae4c56a9b","unresolved":false,"context_lines":[{"line_number":790,"context_line":"            with self.virtapi.wait_for_instance_event("},{"line_number":791,"context_line":"                instance, events, deadline\u003dtimeout,"},{"line_number":792,"context_line":"                error_callback\u003dself._neutron_failed_unplugging_callback):"},{"line_number":793,"context_line":"                LOG.debug(\"Waiting for unplugged event\")"},{"line_number":794,"context_line":"        except exception.VirtualInterfaceDestroyException:"},{"line_number":795,"context_line":"            LOG.warn(_LW(\u0027Unable to unplug interface during destroy \u0027"},{"line_number":796,"context_line":"                         \u0027for instance %(uuid)s\u0027),"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_7792b54d","line":793,"updated":"2015-08-31 22:24:56.000000000","message":"I think you\u0027re misunderstanding what is going on here. The wait_for_instance_event context manager must wrap the whole operation you\u0027re intending to wait for, as it sets up an event to be waited for before doing the body, and then waiting for it to come in before returning. It does this to make sure that we don\u0027t race between doing the thing that will trigger the event and receiving the event.\n\nJust putting a log statement in the body doesn\u0027t make any sense. \n\nPresumably the actual port delete is happening in compute manager, which means you can\u0027t do this here.","commit_id":"71737c491169f1192ac22c07ee746a1052e94740"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b7c14ec4c2f18cb787496fa0ce960e1695ef35dc","unresolved":false,"context_lines":[{"line_number":790,"context_line":"            with self.virtapi.wait_for_instance_event("},{"line_number":791,"context_line":"                instance, events, deadline\u003dtimeout,"},{"line_number":792,"context_line":"                error_callback\u003dself._neutron_failed_unplugging_callback):"},{"line_number":793,"context_line":"                LOG.debug(\"Waiting for unplugged event\")"},{"line_number":794,"context_line":"        except exception.VirtualInterfaceDestroyException:"},{"line_number":795,"context_line":"            LOG.warn(_LW(\u0027Unable to unplug interface during destroy \u0027"},{"line_number":796,"context_line":"                         \u0027for instance %(uuid)s\u0027),"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_17257907","line":793,"in_reply_to":"da20952f_7792b54d","updated":"2015-08-31 22:31:29.000000000","message":"Heh, I remember skimming this last week and thinking, \u0027shouldn\u0027t this be doing something in this block...?\u0027 :)","commit_id":"71737c491169f1192ac22c07ee746a1052e94740"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b0b413a01112251a4d396e67abff82f49df61c92","unresolved":false,"context_lines":[{"line_number":793,"context_line":"                LOG.debug(\"Waiting for unplugged event\")"},{"line_number":794,"context_line":"        except exception.VirtualInterfaceDestroyException:"},{"line_number":795,"context_line":"            LOG.warn(_LW(\u0027Unable to unplug interface during destroy \u0027"},{"line_number":796,"context_line":"                         \u0027for instance %(uuid)s\u0027),"},{"line_number":797,"context_line":"                     {\u0027uuid\u0027: instance.uuid},"},{"line_number":798,"context_line":"                     instance\u003dinstance)"},{"line_number":799,"context_line":"            if CONF.vif_plugging_is_fatal:"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_6b5a172c","line":796,"updated":"2015-08-29 03:17:40.000000000","message":"you do not need the uuid here as the instance parameter inthe log message will already log the instance uuid","commit_id":"71737c491169f1192ac22c07ee746a1052e94740"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7e36a482638aafd34e0d14bc698a0f291a96fb97","unresolved":false,"context_lines":[{"line_number":826,"context_line":""},{"line_number":827,"context_line":"    def cleanup(self, context, instance, network_info, block_device_info\u003dNone,"},{"line_number":828,"context_line":"                destroy_disks\u003dTrue, migrate_data\u003dNone, destroy_vifs\u003dTrue):"},{"line_number":829,"context_line":"        if destroy_vifs:"},{"line_number":830,"context_line":"            self._unplug_vifs(instance, network_info, True)"},{"line_number":831,"context_line":""},{"line_number":832,"context_line":"        retry \u003d True"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_a273ffe6","line":829,"updated":"2015-09-01 16:06:09.000000000","message":"As vladikr pointed out, I think you want the\n\nwith self.virtapi.wait_for_instance_event conte\n\ncontext manager around this _unplug_vifs call, but I\u0027m saying only do that in the case of rebuild where the instance.task_state is REBUILDING.","commit_id":"71737c491169f1192ac22c07ee746a1052e94740"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"a433fcdc1b3526abad12f9ede422e8fe30537ba8","unresolved":false,"context_lines":[{"line_number":4394,"context_line":"        if CONF.vif_plugging_is_fatal:"},{"line_number":4395,"context_line":"            raise exception.VirtualInterfaceCreateException()"},{"line_number":4396,"context_line":""},{"line_number":4397,"context_line":"    def _neutron_failed_unplugging_callback(self, event_name, instance):"},{"line_number":4398,"context_line":"        LOG.error(_LE(\u0027Neutron Reported failure on event \u0027"},{"line_number":4399,"context_line":"                      \u0027%(event)s for instance %(uuid)s\u0027),"},{"line_number":4400,"context_line":"                  {\u0027event\u0027: event_name, \u0027uuid\u0027: instance.uuid},"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_a9a0ce42","line":4397,"updated":"2015-09-01 13:39:27.000000000","message":"I\u0027m a bit confused why is this method needed as its identical to _neutron_failed_callback or am i missing something?","commit_id":"71737c491169f1192ac22c07ee746a1052e94740"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8fd0e3f92666877d23c8e0f4767209fd25d1008a","unresolved":false,"context_lines":[{"line_number":4410,"context_line":"        # anything that might be stale (cache-wise) assume it\u0027s"},{"line_number":4411,"context_line":"        # already up so we don\u0027t block on it."},{"line_number":4412,"context_line":"        return [(event_type, vif[\u0027id\u0027])"},{"line_number":4413,"context_line":"                for vif in network_info if vif.get(\u0027active\u0027, True) is False]"},{"line_number":4414,"context_line":""},{"line_number":4415,"context_line":"    def _create_domain_and_network(self, context, xml, instance, network_info,"},{"line_number":4416,"context_line":"                                   disk_info, block_device_info\u003dNone,"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_a250df5f","line":4413,"updated":"2015-09-01 16:02:19.000000000","message":"This logic is probably different for the network-vif-unplugged case.","commit_id":"71737c491169f1192ac22c07ee746a1052e94740"}]}
