I've still not found a proper way to fix this, but I would like to share the attached patch that will allow to easily reproduce the issue on a simple devstack node. It consists of three parts:
1. Patch nova/virt/libvirt/driver.py to insert a single error when spawning an instance. This will trigger a Reschedule and let spawning succeed on the second attempt.
2. Patch nova/scheduler/utils.py so that the Reschedule may happen on the same host again. The default behaviour will exclude the hosts where the instance has been scheduled first, which would imply that one needs a multi-node setup in order to reproduce this issue.
3. Add some debugging output to nova/compute/manager.py
The first instance booted after applying this patch (and restarting n-cond & n-cpu) will be running fine but with two addresses allocated.
It looks to me like the first address is generated properly in the n-cpu manager, but is then treated correctly in the conductor during rescheduling.
I've still not found a proper way to fix this, but I would like to share the attached patch that will allow to easily reproduce the issue on a simple devstack node. It consists of three parts:
1. Patch nova/virt/ libvirt/ driver. py to insert a single error when spawning an instance. This will trigger a Reschedule and let spawning succeed on the second attempt. utils.py so that the Reschedule may happen on the same host again. The default behaviour will exclude the hosts where the instance has been scheduled first, which would imply that one needs a multi-node setup in order to reproduce this issue. manager. py
2. Patch nova/scheduler/
3. Add some debugging output to nova/compute/
The first instance booted after applying this patch (and restarting n-cond & n-cpu) will be running fine but with two addresses allocated.
It looks to me like the first address is generated properly in the n-cpu manager, but is then treated correctly in the conductor during rescheduling.