From: Patrick East Date: Mon, 29 Sep 2014 17:54:22 +0000 (-0700) Subject: Fix race condition in ISCSIConnector disconnect_volume X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=5d22ec17c7548f3de85ba9e3ad54ce5799dc5fff;p=openstack-build%2Fcinder-build.git Fix race condition in ISCSIConnector disconnect_volume 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 --- diff --git a/cinder/brick/initiator/connector.py b/cinder/brick/initiator/connector.py index b58e726b2..fb7277791 100644 --- a/cinder/brick/initiator/connector.py +++ b/cinder/brick/initiator/connector.py @@ -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)