Dell Powerflex: Add new VOLUME_NOT_MAPPED_ERROR

Dell Powerflex 4.x changed the error code of VOLUME_NOT_MAPPED_ERROR
to 4039. This patch adds that error code.

Closes-Bug: #2046810
Change-Id: I76aa9e353747b1651480efb0f3de11c707fe5abe
(cherry picked from commit 97e89d8578)
(cherry picked from commit 977b8431ee)
This commit is contained in:
happystacker 2023-12-18 14:58:04 +01:00 committed by Jean Pierre Roquesalane
parent 776864b43d
commit 3c570e8be8
3 changed files with 30 additions and 1 deletions

View File

@ -48,6 +48,7 @@ class ScaleIOConnector(base.BaseLinuxConnector):
OK_STATUS_CODE = 200
VOLUME_NOT_MAPPED_ERROR = 84
VOLUME_NOT_MAPPED_ERROR_v4 = 4039
VOLUME_ALREADY_MAPPED_ERROR = 81
VOLUME_ALREADY_MAPPED_ERROR_v4 = 4037
GET_GUID_OP_CODE = io('a', 14)
@ -516,7 +517,8 @@ class ScaleIOConnector(base.BaseLinuxConnector):
if r.status_code != self.OK_STATUS_CODE:
response = r.json()
error_code = response['errorCode']
if error_code == self.VOLUME_NOT_MAPPED_ERROR:
if error_code == self.VOLUME_NOT_MAPPED_ERROR or \
error_code == self.VOLUME_NOT_MAPPED_ERROR_v4:
LOG.warning(
"Ignoring error unmapping volume %(volume_id)s: "
"volume not mapped.", {'volume_id': self.volume_name}

View File

@ -269,6 +269,15 @@ class ScaleIOConnectorTestCase(test_connector.ConnectorTestCase):
self.assertRaises(exception.BrickException, self.test_connect_volume)
def test_error_map_volume_v4(self):
"""Fail to connect with REST API failure (v4)"""
self.mock_calls[self.action_format.format(
'addMappedSdc')] = self.MockHTTPSResponse(
dict(errorCode=self.connector.VOLUME_NOT_MAPPED_ERROR_v4,
message='Test error map volume'), 500)
self.assertRaises(exception.BrickException, self.test_connect_volume)
@mock.patch('os_brick.utils._time_sleep')
def test_error_path_not_found(self, sleep_mock):
"""Timeout waiting for volume to map to local file system"""
@ -313,6 +322,15 @@ class ScaleIOConnectorTestCase(test_connector.ConnectorTestCase):
self.test_disconnect_volume()
def test_disconnect_volume_not_mapped_v4(self):
"""Ignore REST API failure for volume not mapped (v4)"""
self.mock_calls[self.action_format.format(
'removeMappedSdc')] = self.MockHTTPSResponse(
dict(errorCode=self.connector.VOLUME_NOT_MAPPED_ERROR_v4,
message='Test error map volume'), 500)
self.test_disconnect_volume()
@mock.patch.object(os.path, 'exists', return_value=True)
@mock.patch.object(scaleio.ScaleIOConnector, '_find_volume_path')
@mock.patch('os_brick.utils.get_device_size')

View File

@ -0,0 +1,9 @@
---
fixes:
- |
Dell PowerFlex driver `Bug #2046810
<https://bugs.launchpad.net/os-brick/+bug/2046810>`_: Added
new error code for PowerFlex 4.x which was causing this error.
Added handling for the new error code returned from PowerFlex
v4.x and allow the driver to ignore and skip a disconnect
operation when the volume is not mapped.