Merge "Handle multiple errors in multipath -l parsing" into stable/queens

This commit is contained in:
Zuul 2018-08-23 15:23:32 +00:00 committed by Gerrit Code Review
commit bf584561af
2 changed files with 40 additions and 1 deletions

View File

@ -429,7 +429,8 @@ class LinuxSCSI(executor.Executor):
lines = out.strip()
lines = lines.split("\n")
lines = [line for line in lines
if not re.match(MULTIPATH_ERROR_REGEX, line)]
if not re.match(MULTIPATH_ERROR_REGEX, line)
and len(line)]
if lines:
mdev_name = lines[0].split(" ")[0]

View File

@ -451,6 +451,44 @@ class LinuxSCSITestCase(base.TestCase):
self.assertEqual("0", info['devices'][1]['id'])
self.assertEqual("3", info['devices'][1]['lun'])
def test_find_multipath_device_with_multiple_errors(self):
def fake_execute(*cmd, **kwargs):
out = ("Jun 21 04:39:26 | 8:160: path wwid appears to have "
"changed. Using old wwid.\n\n"
"Jun 21 04:39:26 | 65:208: path wwid appears to have "
"changed. Using old wwid.\n\n"
"Jun 21 04:39:26 | 65:208: path wwid appears to have "
"changed. Using old wwid.\n"
"3624a93707edcfde1127040370004ee62 dm-84 PURE ,"
"FlashArray\n"
"size=100G features='0' hwhandler='0' wp=rw\n"
"`-+- policy='queue-length 0' prio=1 status=active\n"
" |- 8:0:0:9 sdaa 65:160 active ready running\n"
" `- 8:0:1:9 sdac 65:192 active ready running\n"
)
return out, None
self.linuxscsi._execute = fake_execute
info = self.linuxscsi.find_multipath_device('/dev/sdaa')
self.assertEqual("3624a93707edcfde1127040370004ee62", info["id"])
self.assertEqual("3624a93707edcfde1127040370004ee62", info["name"])
self.assertEqual("/dev/mapper/3624a93707edcfde1127040370004ee62",
info["device"])
self.assertEqual("/dev/sdaa", info['devices'][0]['device'])
self.assertEqual("8", info['devices'][0]['host'])
self.assertEqual("0", info['devices'][0]['channel'])
self.assertEqual("0", info['devices'][0]['id'])
self.assertEqual("9", info['devices'][0]['lun'])
self.assertEqual("/dev/sdac", info['devices'][1]['device'])
self.assertEqual("8", info['devices'][1]['host'])
self.assertEqual("0", info['devices'][1]['channel'])
self.assertEqual("1", info['devices'][1]['id'])
self.assertEqual("9", info['devices'][1]['lun'])
@mock.patch.object(time, 'sleep')
def test_wait_for_rw(self, mock_sleep):
lsblk_output = """3624a93709a738ed78583fd1200143029 (dm-2) 0