linuxscsi: Only raise and log multipathd errors when required
Logging and then ignoring multipathd errors when it isn't enforced is confusing to operators investigating attach or detach issues. Change-Id: Ib234e585da5644d87fcf1ef6bcb95f2871dc6b32 (cherry picked from commitbdfe6b43cb
) (cherry picked from commitd09dc9e51c
) (cherry picked from commitffe0cbfc93
)
This commit is contained in:
parent
9d3ce01eab
commit
892583b388
|
@ -205,13 +205,13 @@ class LinuxSCSI(executor.Executor):
|
|||
# code and just printed the error message in stdout.
|
||||
if out and out.startswith('error receiving packet'):
|
||||
raise putils.ProcessExecutionError('', out, 1, cmd, None)
|
||||
|
||||
except putils.ProcessExecutionError as err:
|
||||
if enforce_multipath:
|
||||
LOG.error('multipathd is not running: exit code %(err)s',
|
||||
{'err': err.exit_code})
|
||||
if enforce_multipath:
|
||||
raise
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def get_dm_name(self, dm):
|
||||
|
|
|
@ -913,20 +913,59 @@ loop0 0"""
|
|||
self.assertEqual(expected, result)
|
||||
|
||||
@mock.patch('os_brick.privileged.rootwrap.execute', return_value=('', ''))
|
||||
def test_is_multipath_running_default_executor(self, mock_exec):
|
||||
def test_is_multipath_running(self, mock_exec):
|
||||
res = linuxscsi.LinuxSCSI.is_multipath_running(False, None, mock_exec)
|
||||
self.assertTrue(res)
|
||||
mock_exec.assert_called_once_with(
|
||||
'multipathd', 'show', 'status', run_as_root=True, root_helper=None)
|
||||
|
||||
@mock.patch.object(linuxscsi, 'LOG')
|
||||
@mock.patch('os_brick.privileged.rootwrap.execute')
|
||||
def test_is_multipath_running_failure_exit_code_0(self, mock_exec):
|
||||
def test_is_multipath_running_failure(
|
||||
self, mock_exec, mock_log
|
||||
):
|
||||
mock_exec.side_effect = putils.ProcessExecutionError()
|
||||
self.assertRaises(putils.ProcessExecutionError,
|
||||
linuxscsi.LinuxSCSI.is_multipath_running,
|
||||
True, None, mock_exec)
|
||||
mock_log.error.assert_called_once()
|
||||
|
||||
@mock.patch.object(linuxscsi, 'LOG')
|
||||
@mock.patch('os_brick.privileged.rootwrap.execute')
|
||||
def test_is_multipath_running_failure_exit_code_0(
|
||||
self, mock_exec, mock_log
|
||||
):
|
||||
mock_exec.return_value = ('error receiving packet', '')
|
||||
self.assertRaises(putils.ProcessExecutionError,
|
||||
linuxscsi.LinuxSCSI.is_multipath_running,
|
||||
True, None, mock_exec)
|
||||
mock_exec.assert_called_once_with(
|
||||
'multipathd', 'show', 'status', run_as_root=True, root_helper=None)
|
||||
mock_log.error.assert_called_once()
|
||||
|
||||
@mock.patch.object(linuxscsi, 'LOG')
|
||||
@mock.patch('os_brick.privileged.rootwrap.execute')
|
||||
def test_is_multipath_running_failure_not_enforcing_multipath(
|
||||
self, mock_exec, mock_log
|
||||
):
|
||||
mock_exec.side_effect = putils.ProcessExecutionError()
|
||||
res = linuxscsi.LinuxSCSI.is_multipath_running(False, None, mock_exec)
|
||||
mock_exec.assert_called_once_with(
|
||||
'multipathd', 'show', 'status', run_as_root=True, root_helper=None)
|
||||
self.assertFalse(res)
|
||||
mock_log.error.assert_not_called()
|
||||
|
||||
@mock.patch.object(linuxscsi, 'LOG')
|
||||
@mock.patch('os_brick.privileged.rootwrap.execute')
|
||||
def test_is_multipath_running_failure_not_enforcing_exit_code_0(
|
||||
self, mock_exec, mock_log
|
||||
):
|
||||
mock_exec.return_value = ('error receiving packet', '')
|
||||
res = linuxscsi.LinuxSCSI.is_multipath_running(False, None, mock_exec)
|
||||
mock_exec.assert_called_once_with(
|
||||
'multipathd', 'show', 'status', run_as_root=True, root_helper=None)
|
||||
self.assertFalse(res)
|
||||
mock_log.error.assert_not_called()
|
||||
|
||||
def test_get_device_info(self):
|
||||
ret = "/dev/sg0 scsi1 channel=1 id=0 lun=0 [em]\n"
|
||||
|
|
Loading…
Reference in New Issue