#openstack #nova #live-migration #volume --- Table cinder.volume_attachment, contains which volume_driver. target_lun `()` here maps to `dm-`. Luns are not unique across pod, each node has a target_lun 2 and thus dm-2 connected. os-brick is responsible for connecting volumes; if connection_info it receives contains target_iqns, target_luns etc it will not do a scan and just returns those. `@see os_brick/initiator/connectors/iscsi.py` `nova/virt/libvirt/driver.py -> def _connect_volume` does attaching of volumes using os-brick. Driver exposes some methods that do this and are called elsewhere: `swap_volume`, `attach_volume`, `pre_live_migration`. `pre_live_migration` is called by `nova/compute/manager.py` So in `nova/compute/manager.py` there is a function that does the rollback, and it rollbacks bdm's and deletes volume attachments before it calls `rollback_live_migration_at_destination` which in turn makes an attempt at deleting the actual volume attachment to the node. But at that point all objects have been rollbacked already so it has invalid information. If the code in new versions of openstack isn't any different i'll just make a bug report and see what they come up with.