File try-harder-for-multipath.diff of Package openstack-nova-doc
Index: nova/virt/libvirt/volume.py
===================================================================
--- nova/virt/libvirt/volume.py.orig
+++ nova/virt/libvirt/volume.py
@@ -351,6 +351,10 @@ class LibvirtISCSIVolumeDriver(LibvirtBa
multipath_device = self._get_multipath_device_name(host_device)
if multipath_device is not None:
+ # Wait for multipath device name to appear
+ if not os.path.exists(multipath_device):
+ raise exception.NovaException(_("mpath iSCSI device not found at %s")
+ % (host_device))
host_device = multipath_device
conf.source_type = "block"
@@ -397,7 +401,7 @@ class LibvirtISCSIVolumeDriver(LibvirtBa
LOG.warn(_("Unable to delete volume device %s"), device_name)
def _remove_multipath_device_descriptor(self, disk_descriptor):
- disk_descriptor = disk_descriptor.replace('/dev/mapper/', '')
+ disk_descriptor = disk_descriptor.replace('/dev/disk/by-id/dm-name-', '')
try:
self._run_multipath(['-f', disk_descriptor],
check_exit_code=[0, 1])
@@ -417,7 +421,7 @@ class LibvirtISCSIVolumeDriver(LibvirtBa
block_devices = self.connection.get_all_block_devices()
devices = []
for dev in block_devices:
- if "/mapper/" in dev:
+ if "/dev/disk/by-id/dm-name-" in dev:
devices.append(dev)
else:
mpdev = self._get_multipath_device_name(dev)
@@ -565,7 +569,7 @@ class LibvirtISCSIVolumeDriver(LibvirtBa
mpath_line = [line for line in out.splitlines()
if "scsi_id" not in line] # ignore udev errors
if len(mpath_line) > 0 and len(mpath_line[0]) > 0:
- return "/dev/mapper/%s" % mpath_line[0].split(" ")[0]
+ return "/dev/disk/by-id/dm-name-%s" % mpath_line[0].split(" ")[0]
return None