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
This commit is contained in:
Patrick East 2014-09-29 10:54:22 -07:00
parent f668b347ca
commit 5d22ec17c7

@ -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)