[openstack-dev] [nova] vif unplugging when deleting instance while resizing

Chris Friesen chris.friesen at windriver.com
Fri Oct 30 23:53:44 UTC 2015


On 10/30/2015 03:11 PM, Chris Friesen wrote:

>  From what I can tell, in stable/kilo with neutron when doing a resize we will
> only unplug the vifs on the source side when confirming the resize.  The code
> path looks like:
>
> compute.manager.ComputeManager.confirm_resize()
>      compute.manager.ComputeManager._confirm_resize()
>          virt.libvirt.driver.LibvirtDriver.confirm_migration()
>              virt.libvirt.driver.LibvirtDriver._cleanup_resize()
>                  virt.libvirt.driver.LibvirtDriver.unplug_vifs()
>
> I'm concerned that if we delete the instance before the vm_state hits RESIZED,
> then we will not ever confirm the resize on the host.  (I think this could
> happen since the instance host is set to the destination in
> compute.manager.ComputeManager.resize_instance(), but the vm_state isn't set to
> RESIZED until compute.manager.ComputeManager._finish_resize().
>
> Then the audit from bug 1392527 runs and cleans up the instance files left on
> the host, but we're left with the vswitch port still in use because nobody
> unplugged it.
>
> Can anyone poke holes in the description above?
>
> The above is all supposition, I haven't reproduced it or gone through it in
> enough detail to be certain that this is what's happening.  That's the next step.

Some evidence to support the above theory...

I put a "pdb.set_trace()" in _finish_resize() right before the line with

instance.vm_state = vm_states.RESIZED

I then triggered a cold migration, and when it hit the debug statement I ran 
"nova delete <instance>" from the CLI and then let the nova-compute process 
continue.

This results in the instance being deleted, but a vswitch port is left open on 
the source host.

Chris



More information about the OpenStack-dev mailing list