Here when you use libvirt driver with tap interfaces, it creates a tap interface on the host but doesn't clean up the interface and leaves in-tact and creates another same named interface on the new host.
In _do_build_and_run_instance when RescheduledException is called, manager checks if the network port needs to be de-allocated for a different host or not using deallocate_networks_on_reschedule() which is hard coded to return False. If this is changed to return true or set via conf file configuration to allow being changed for specific mech drivers in neutron then it would be helpful to not only clean up the tap interface properly but also also mech drivers in neutron to re-create new ports on new host instead of shifting and re-using same ports which fails.
tested on master and stable/liberty and fails in both cases, so may need back porting.
Duplicated with this bug: https:/ /bugs.launchpad .net/nova/ +bug/1510979