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
 
openSUSE Build Service is sponsored by