]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Fix race condition in ISCSIConnector disconnect_volume
authorPatrick East <patrick.east@purestorage.com>
Mon, 29 Sep 2014 17:54:22 +0000 (10:54 -0700)
committerPatrick East <patrick.east@purestorage.com>
Mon, 29 Sep 2014 18:04:09 +0000 (11:04 -0700)
The list of devices returned by driver.get_all_block_devices() will
sometimes contain broken symlinks as the SCSI device has been deleted
but the udev rule for the symlink has not yet completed.

Adding in a check to os.path.exists() will ensure that we will not
consider the broken symlinks as an “in use” device.

Change-Id: Ibb869e10976f894f9e18e9edec6739c2c3bea68c
Closes-Bug: #1375382

cinder/brick/initiator/connector.py

index b58e726b2d67b8e8777e65520ace4f025bce4ddb..fb7277791270478bd780f06b435c93544e3eb5e0 100644 (file)
@@ -291,7 +291,8 @@ class ISCSIConnector(InitiatorConnector):
                          {'portal': connection_properties['target_portal'],
                           'iqn': connection_properties['target_iqn']})
         devices = self.driver.get_all_block_devices()
-        devices = [dev for dev in devices if dev.startswith(device_prefix)]
+        devices = [dev for dev in devices if dev.startswith(device_prefix)
+                   and os.path.exists(dev)]
 
         if not devices:
             self._disconnect_from_iscsi_portal(connection_properties)