File try-harder-for-multipath.diff of Package openstack-nova
Index: nova/virt/libvirt/volume.py
===================================================================
--- nova/virt/libvirt/volume.py.orig
+++ nova/virt/libvirt/volume.py
@@ -346,9 +346,13 @@ 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
connection_info['data']['multipath_id'] = \
- multipath_device.split('/')[-1]
+ multipath_device.replace('/dev/disk/by-id/dm-name-', '')
connection_info['data']['host_device'] = host_device
return self.get_config(connection_info, disk_info)
@@ -415,7 +419,7 @@ class LibvirtISCSIVolumeDriver(LibvirtBa
multipath_device = None
if self.use_multipath:
if 'multipath_id' in iscsi_properties:
- multipath_device = ('/dev/mapper/%s' %
+ multipath_device = ('/dev/disk/by-id/dm-name-%s' %
iscsi_properties['multipath_id'])
else:
multipath_device = self._get_multipath_device_name(host_device)
@@ -451,7 +455,7 @@ class LibvirtISCSIVolumeDriver(LibvirtBa
LOG.warn(_LW("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])
@@ -471,7 +475,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)
@@ -612,7 +616,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