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