Fix iscsi volumes not being attached

The iscsi target session object returned by wmi can sometimes
be uppercase while the one sent by nova is always lowercase.
String comparisson for these names should take this into
account.

Change-Id: If592f875415e72062c9834fc7d52231856a689bf
Closes-Bug: #1639765
This commit is contained in:
Adelina Tuvenie
2016-11-08 12:03:39 +02:00
parent d7dc109bc5
commit 13fb212ba7
2 changed files with 7 additions and 6 deletions

View File

@@ -354,19 +354,19 @@ class ISCSIInitiatorUtilsTestCase(test_base.OsWinBaseTestCase):
'_get_iscsi_sessions') '_get_iscsi_sessions')
def test_get_iscsi_target_sessions(self, mock_get_iscsi_sessions, def test_get_iscsi_target_sessions(self, mock_get_iscsi_sessions,
target_sessions_found=True): target_sessions_found=True):
fake_session = mock.Mock(TargetNodeName=mock.sentinel.target_name, fake_session = mock.Mock(TargetNodeName="FAKE_TARGET_NAME",
ConnectionCount=1) ConnectionCount=1)
fake_disconn_session = mock.Mock( fake_disconn_session = mock.Mock(
TargetNodeName=mock.sentinel.target_name, TargetNodeName="fake_target_name",
ConnectionCount=0) ConnectionCount=0)
other_session = mock.Mock(TargetNodeName=mock.sentinel.other_target, other_session = mock.Mock(TargetNodeName="other_target_name",
ConnectionCount=1) ConnectionCount=1)
sessions = [fake_session, fake_disconn_session, other_session] sessions = [fake_session, fake_disconn_session, other_session]
mock_get_iscsi_sessions.return_value = sessions mock_get_iscsi_sessions.return_value = sessions
resulted_tgt_sessions = self._initiator._get_iscsi_target_sessions( resulted_tgt_sessions = self._initiator._get_iscsi_target_sessions(
mock.sentinel.target_name) "fake_target_name")
self.assertEqual([fake_session], resulted_tgt_sessions) self.assertEqual([fake_session], resulted_tgt_sessions)

View File

@@ -205,8 +205,9 @@ class ISCSIInitiatorUtils(object):
def _get_iscsi_target_sessions(self, target_name, connected_only=True): def _get_iscsi_target_sessions(self, target_name, connected_only=True):
sessions = self._get_iscsi_sessions() sessions = self._get_iscsi_sessions()
return [session for session in sessions return [session for session in sessions
if session.TargetNodeName == target_name and if session.TargetNodeName
(session.ConnectionCount > 0 or not connected_only)] and session.TargetNodeName.upper() == target_name.upper()
and (session.ConnectionCount > 0 or not connected_only)]
@retry_decorator(error_codes=(iscsierr.ISDSC_SESSION_BUSY, @retry_decorator(error_codes=(iscsierr.ISDSC_SESSION_BUSY,
iscsierr.ISDSC_DEVICE_BUSY_ON_SESSION)) iscsierr.ISDSC_DEVICE_BUSY_ON_SESSION))