708733e495
After some changes to the FC connector we have introduced a regression on the way we do the scans, and we end up scanning using wildcards even though we shouldn't. The targets in the "initiator_target_map" don't mean that they are all connected, so we must take that into account. With the current code, if we have the following connections: HBA host7 ---- SWITCH ---- port W (channel 0, target 2) \--- SWITCH ---- port X (channel 0, target 3) HBA host8 ---- SWITCH ---- port Y (channel 0, target 2) \--- SWITCH ---- port Z (channel 0, target 3) We will end up with the following scans 8 scans for LUN L: - - L > host7 - - L > host7 0 2 L > host7 0 3 L > host7 0 2 L > host8 0 3 L > host8 - - L > host8 - - L > host8 Which correspond to the responses from _get_hba_channel_scsi_target like this: port Y port Z port W port X host7 ... ['-','-',L] ['-','-',L] ['0','2',L] ['0','3',L] host8 ... ['0','2',L] ['0','3',L] ['-','-',L] ['-','-',L] And we should only be doing 4 scans: 0 2 L > host7 0 3 L > host7 0 2 L > host8 0 3 L > host8 Most storage arrays get their target ports automatically detected by the Linux FC initiator and sysfs gets populated with that information, but there are some that don't. We'll do a narrow scan using the channel, target, and LUN for the former and a wider scan for the latter. If all paths to a former type of array were down on the system boot the array could look like it's of the latter type and make us bring us unwanted volumes into the system by doing a broad scan. To prevent this from happening Cinder drivers can use the "enable_wildcard_scan" key in the connection information to let us know they don't want us to do broad scans even if no target ports are found (because they know the cause is there's no connection). Close-Bug: #1849504 Related-Bug: #1765000 Related-Bug: #1828440 Change-Id: I5dbefaff43fb902b15117b443fc92f7b6a6ad8c9 |
||
---|---|---|
.. | ||
encryptors | ||
initiator | ||
local_dev | ||
privileged | ||
remotefs | ||
tests | ||
__init__.py | ||
exception.py | ||
executor.py | ||
i18n.py | ||
utils.py | ||
version.py |