This patch refactors iSCSI connect code changing the approach to one
that relies primarily on sysfs, instead of CLI tools, to retrieve all
the required information: devices from the connection, multipath system
device name, multipath name, the WWN for the block devices...
By doing so, not only do we fix a good number of bugs, but we also
improve the reliability and speed of the mechanism.
A good example of improvements and benefits achieved by this patch are:
- Clean all leftovers on exceptions on a connection.
- Parallelize logins on multipath to increase speed on flaky network
connections.
- As long as there is at least one good path when working with multipath
we will return a multipath device instead of a single path device,
which helps with temporary flaky connections.
- Don't use the rescan retry parameter as log in retry on multipath
connections so both single and multipath cases are consistent.
- We no longer rely on just one device to get the wwn and look for the
multipath. This would be problematic with flaky connections.
- No more querying iSCSI devices for their WWN (page 0x83) removing
delays and issue on flaky connections.
- It's no longer a problem for the mechanism the fact that a device
exists but is not accessible.
- We use links in `/dev/disk/by-id` to get the WWID on connect, so we
make sure there are no leftovers on disconnect, but we no longer use
symlinks from `/dev/disk/by-path`, `/dev/disk/by-id`, or `/dev/mapper`
to find devices.
- We no longer need to rely on the WWN to determine the multipath, we
have the session and the LUN, so we trace the devices and from those
we get if they belong to a multipath.
- Stop polluting the logs with unnecessary exceptions from checking if
the node or session exist.
- Action retries will now only log the final exception instead of
logging all the exceptions.
- Warn when a multipath could not be formed and a single device is being
used, as performance will be degraded.
- We no longer do global rescans on single connections that could be
bringing in unrelated and unwanted devices (`iscsiadm -T iqn -p portal
--rescan`).
- Fix scan mechanism that would not request all scans when the same iqn
was shareed between portals and could send a scan request to the wrong
IP if they shared the same iqn.
- When doing single pathed connections we could end with a multipath
because we didn't clean up unfruitful connections.
It's worth mentioning that this patch does not touch the extend
operation.
Change-Id: Ia1c47bfaa7bc3544a5feba6a8a30faf2f132b8d7