Customer: When multipath is enabled with Nova, a different codepath is executed for most functions, such as connect_volume and disconnect_volume.
A series of loops exist within connect_volume when multipath is enabled
An iscsiadm discover is ran against the portal information associated with the instance, in our case a portal on the nimble storage array.
For every iqn discovered, _connect_to_iscsi_portal runs and logins to the portal.
In our test scenario, with 183 instances - this results in 183*2 IQN targets being discovered, and logged into, every single time an instance is launched on that node. With multiple instance creation this compounds.
These calls can take upwards of 1 second to run * the number of times.
Additionally there seems to be other code paths with similar loops with iSCSI behaviour.
We may have just addressed the connect_volume loop as well. The IQN of the iSCSI device is always the same, although the portal may be different. iscsi_properties['target_iqn'] contains the target_iqn. Instead of looping through every single IQN to login to, the code now only logs into the IQN's it needs.
such as
for ip, iqn in self._get_target_portals_from_iscsiadm_output(out):
if iqn in iscsi_properties['target_iqn']:
props = iscsi_properties.copy()
props['target_portal'] = ip
props['target_iqn'] = iqn
self._connect_to_iscsi_portal(props)
Customer: When multipath is enabled with Nova, a different codepath is executed for most functions, such as connect_volume and disconnect_volume.
A series of loops exist within connect_volume when multipath is enabled to_iscsi_ portal runs and logins to the portal.
An iscsiadm discover is ran against the portal information associated with the instance, in our case a portal on the nimble storage array.
For every iqn discovered, _connect_
In our test scenario, with 183 instances - this results in 183*2 IQN targets being discovered, and logged into, every single time an instance is launched on that node. With multiple instance creation this compounds.
These calls can take upwards of 1 second to run * the number of times.
Additionally there seems to be other code paths with similar loops with iSCSI behaviour.
We may have just addressed the connect_volume loop as well. The IQN of the iSCSI device is always the same, although the portal may be different. iscsi_propertie s['target_ iqn'] contains the target_iqn. Instead of looping through every single IQN to login to, the code now only logs into the IQN's it needs.
such as
for ip, iqn in self._get_ target_ portals_ from_iscsiadm_ output( out): s['target_ iqn']: s.copy( ) target_ portal' ] = ip to_iscsi_ portal( props)
if iqn in iscsi_propertie
props = iscsi_propertie
props['
props['target_iqn'] = iqn
self._connect_