Stop calling multipath -r when attaching/detaching iSCSI volumes
Looking into this more there isn't any documented reason why we do this, and on Ubuntu 16.04 there are issues with timing and devices/symlinks getting messed up when we do the reload of device maps. We shouldn't need to be forcing multipathd to do this, it loads devices on its own. We'll leave in the one in 'wait_for_rw(..)' for now because there is some evidence that you may need to call it to update the rw state of the multipath devices, see: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise _Linux/6/html/Storage_Administration_Guide/ch37s04s02.html Change-Id: Iec58284abdc9bcbf99df5d07289bb9d60a3554d7 Closes-Bug: #1623700
This commit is contained in:
parent
c2bad1f400
commit
e591bc78cc
|
@ -466,7 +466,6 @@ class ISCSIConnector(base.BaseLinuxConnector, base_iscsi.BaseISCSIConnector):
|
|||
target_lun(s) - LUN id of the volume
|
||||
"""
|
||||
if self.use_multipath:
|
||||
self._rescan_multipath()
|
||||
host_device = multipath_device = None
|
||||
host_devices = self._get_device_path(connection_properties)
|
||||
# Choose an accessible host device
|
||||
|
@ -770,8 +769,6 @@ class ISCSIConnector(base.BaseLinuxConnector, base_iscsi.BaseISCSIConnector):
|
|||
props['target_iqn'] = iqn
|
||||
self._disconnect_from_iscsi_portal(props)
|
||||
|
||||
self._rescan_multipath()
|
||||
|
||||
def _get_multipath_iqns(self, multipath_devices, mpath_map):
|
||||
entries = self._get_iscsi_devices()
|
||||
iqns = []
|
||||
|
@ -838,6 +835,3 @@ class ISCSIConnector(base.BaseLinuxConnector, base_iscsi.BaseISCSIConnector):
|
|||
check_exit_code=[0, 1, 21, 255])
|
||||
self._run_iscsiadm_bare(('-m', 'session', '--rescan'),
|
||||
check_exit_code=[0, 1, 21, 255])
|
||||
|
||||
def _rescan_multipath(self):
|
||||
self._run_multipath(['-r'], check_exit_code=[0, 1, 21])
|
||||
|
|
|
@ -407,12 +407,11 @@ class ISCSIConnectorTestCase(test_connector.ConnectorTestCase):
|
|||
'_get_target_portals_from_iscsiadm_output')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_connect_to_iscsi_portal')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_rescan_iscsi')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_rescan_multipath')
|
||||
@mock.patch.object(os.path, 'exists', return_value=True)
|
||||
@mock.patch.object(base.BaseLinuxConnector, '_discover_mpath_device')
|
||||
def test_connect_volume_with_multipath(
|
||||
self, mock_discover_mpath_device, exists_mock,
|
||||
rescan_multipath_mock, rescan_iscsi_mock, connect_to_mock,
|
||||
rescan_iscsi_mock, connect_to_mock,
|
||||
portals_mock, iscsiadm_mock, mock_iscsi_wwn):
|
||||
mock_iscsi_wwn.return_value = test_connector.FAKE_SCSI_WWN
|
||||
location = '10.0.2.15:3260'
|
||||
|
@ -587,7 +586,6 @@ class ISCSIConnectorTestCase(test_connector.ConnectorTestCase):
|
|||
@mock.patch.object(iscsi.ISCSIConnector, '_get_multipath_device_map',
|
||||
return_value={})
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_get_iscsi_devices')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_rescan_multipath')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_run_multipath')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_get_multipath_iqns')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_run_iscsiadm')
|
||||
|
@ -596,8 +594,8 @@ class ISCSIConnectorTestCase(test_connector.ConnectorTestCase):
|
|||
def test_connect_volume_with_multiple_portals_primary_error(
|
||||
self, mock_process_lun_id, mock_discover_mpath_device,
|
||||
mock_iscsiadm, mock_get_iqn, mock_run_multipath,
|
||||
mock_rescan_multipath, mock_iscsi_devices,
|
||||
mock_get_multipath_device_map, mock_devices, mock_exists,
|
||||
mock_iscsi_devices, mock_get_multipath_device_map,
|
||||
mock_devices, mock_exists,
|
||||
mock_scsi_wwn):
|
||||
mock_scsi_wwn.return_value = test_connector.FAKE_SCSI_WWN
|
||||
location1 = '10.0.2.15:3260'
|
||||
|
@ -668,12 +666,11 @@ class ISCSIConnectorTestCase(test_connector.ConnectorTestCase):
|
|||
@mock.patch.object(iscsi.ISCSIConnector, '_connect_to_iscsi_portal')
|
||||
@mock.patch.object(host_driver.HostDriver, 'get_all_block_devices')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_get_iscsi_devices')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_rescan_multipath')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_run_multipath')
|
||||
@mock.patch.object(base.BaseLinuxConnector, '_discover_mpath_device')
|
||||
def test_connect_volume_with_multipath_connecting(
|
||||
self, mock_discover_mpath_device, mock_run_multipath,
|
||||
mock_rescan_multipath, mock_iscsi_devices, mock_devices,
|
||||
mock_iscsi_devices, mock_devices,
|
||||
mock_connect, mock_portals, mock_exists, mock_scsi_wwn):
|
||||
mock_scsi_wwn.return_value = test_connector.FAKE_SCSI_WWN
|
||||
location1 = '10.0.2.15:3260'
|
||||
|
@ -715,10 +712,9 @@ class ISCSIConnectorTestCase(test_connector.ConnectorTestCase):
|
|||
@mock.patch.object(iscsi.ISCSIConnector, '_connect_to_iscsi_portal')
|
||||
@mock.patch.object(host_driver.HostDriver, 'get_all_block_devices')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_get_iscsi_devices')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_rescan_multipath')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_run_multipath')
|
||||
def test_connect_volume_multipath_failed_iscsi_login(
|
||||
self, mock_run_multipath, mock_rescan_multipath,
|
||||
self, mock_run_multipath,
|
||||
mock_iscsi_devices, mock_devices,
|
||||
mock_connect, mock_portals, mock_exists):
|
||||
location1 = '10.0.2.15:3260'
|
||||
|
@ -819,7 +815,6 @@ class ISCSIConnectorTestCase(test_connector.ConnectorTestCase):
|
|||
@mock.patch.object(iscsi.ISCSIConnector,
|
||||
'_get_target_portals_from_iscsiadm_output')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_rescan_iscsi')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_rescan_multipath')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_get_iscsi_devices')
|
||||
@mock.patch.object(host_driver.HostDriver, 'get_all_block_devices')
|
||||
@mock.patch.object(iscsi.ISCSIConnector,
|
||||
|
@ -829,7 +824,7 @@ class ISCSIConnectorTestCase(test_connector.ConnectorTestCase):
|
|||
def test_disconnect_volume_multipath_iscsi(
|
||||
self, exists_mock, multipath_iqn_mock, disconnect_mock,
|
||||
get_all_devices_mock, get_iscsi_devices_mock,
|
||||
rescan_multipath_mock, rescan_iscsi_mock, get_portals_mock,
|
||||
rescan_iscsi_mock, get_portals_mock,
|
||||
get_multipath_device_map_mock):
|
||||
iqn1 = 'iqn.2013-01.ro.com.netapp:node.netapp01'
|
||||
iqn2 = 'iqn.2013-01.ro.com.netapp:node.netapp02'
|
||||
|
@ -852,7 +847,6 @@ class ISCSIConnectorTestCase(test_connector.ConnectorTestCase):
|
|||
@mock.patch.object(iscsi.ISCSIConnector,
|
||||
'_get_target_portals_from_iscsiadm_output')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_rescan_iscsi')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_rescan_multipath')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_get_iscsi_devices')
|
||||
@mock.patch.object(host_driver.HostDriver, 'get_all_block_devices')
|
||||
@mock.patch.object(iscsi.ISCSIConnector,
|
||||
|
@ -863,7 +857,7 @@ class ISCSIConnectorTestCase(test_connector.ConnectorTestCase):
|
|||
def test_disconnect_volume_multipath_iscsi_other_targets(
|
||||
self, exists_mock, multipath_iqn_mock, get_multipath_map_mock,
|
||||
disconnect_mock, get_all_devices_mock, get_iscsi_devices_mock,
|
||||
rescan_multipath_mock, rescan_iscsi_mock, get_portals_mock):
|
||||
rescan_iscsi_mock, get_portals_mock):
|
||||
iqn1 = 'iqn.2010-10.org.openstack:target-1'
|
||||
iqn2 = 'iqn.2010-10.org.openstack:target-2'
|
||||
portal = '10.0.0.1:3260'
|
||||
|
@ -888,7 +882,6 @@ class ISCSIConnectorTestCase(test_connector.ConnectorTestCase):
|
|||
@mock.patch.object(iscsi.ISCSIConnector,
|
||||
'_get_target_portals_from_iscsiadm_output')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_rescan_iscsi')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_rescan_multipath')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_get_iscsi_devices',
|
||||
return_value=[])
|
||||
@mock.patch.object(host_driver.HostDriver, 'get_all_block_devices',
|
||||
|
@ -898,7 +891,7 @@ class ISCSIConnectorTestCase(test_connector.ConnectorTestCase):
|
|||
@mock.patch.object(os.path, 'exists', return_value=True)
|
||||
def test_disconnect_volume_multipath_iscsi_without_other_mp_devices(
|
||||
self, exists_mock, disconnect_mock, get_all_devices_mock,
|
||||
get_iscsi_devices_mock, rescan_multipath_mock, rescan_iscsi_mock,
|
||||
get_iscsi_devices_mock, rescan_iscsi_mock,
|
||||
get_portals_mock, get_multipath_device_map_mock):
|
||||
portal = '10.0.2.15:3260'
|
||||
name = 'volume-00000001'
|
||||
|
@ -917,7 +910,6 @@ class ISCSIConnectorTestCase(test_connector.ConnectorTestCase):
|
|||
@mock.patch.object(iscsi.ISCSIConnector,
|
||||
'_get_target_portals_from_iscsiadm_output')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_rescan_iscsi')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_rescan_multipath')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_get_iscsi_devices')
|
||||
@mock.patch.object(host_driver.HostDriver, 'get_all_block_devices')
|
||||
@mock.patch.object(iscsi.ISCSIConnector,
|
||||
|
@ -925,7 +917,7 @@ class ISCSIConnectorTestCase(test_connector.ConnectorTestCase):
|
|||
@mock.patch.object(os.path, 'exists', return_value=False)
|
||||
def test_disconnect_volume_multipath_iscsi_with_invalid_symlink(
|
||||
self, exists_mock, disconnect_mock, get_all_devices_mock,
|
||||
get_iscsi_devices_mock, rescan_multipath_mock, rescan_iscsi_mock,
|
||||
get_iscsi_devices_mock, rescan_iscsi_mock,
|
||||
get_portals_mock, get_multipath_device_map_mock):
|
||||
# Simulate a broken symlink by returning False for os.path.exists(dev)
|
||||
portal = '10.0.0.1:3260'
|
||||
|
|
Loading…
Reference in New Issue