NetApp SolidFire: Fix retype to SolidFire
Cinder can successfully retype an attached volume from SolidFire
to different backends, but the other way around was failing. This patch
fixes this issue, allowing retype operation for attached volumes from
other backends to SolidFire.
Change-Id: I75b828198a2af707d59120f29704a81ba9f2b553
Closes-bug: #1859652
(cherry picked from commit ca475a3dad
)
This commit is contained in:
parent
cc9014ab42
commit
0a223ff59c
|
@ -1342,6 +1342,35 @@ class SolidFireVolumeTestCase(test.TestCase):
|
|||
self.assertTrue(migrated)
|
||||
self.assertEqual({}, updates)
|
||||
|
||||
@data(None, 'Success', 'Error', f'target:{f_uuid[0]}')
|
||||
@mock.patch.object(solidfire.SolidFireDriver, '_get_sf_volume')
|
||||
@mock.patch.object(solidfire.SolidFireDriver, '_get_sfaccount')
|
||||
def test_attach_volume(self, mig_status, mock_get_sfaccount,
|
||||
mock_get_sf_volume):
|
||||
mock_get_sfaccount.return_value = self.fake_sfaccount
|
||||
i_uuid = 'fake_instance_uuid'
|
||||
ctx = context.get_admin_context()
|
||||
type_fields = {}
|
||||
vol_type = fake_volume.fake_volume_type_obj(ctx, **type_fields)
|
||||
utc_now = timeutils.utcnow().isoformat()
|
||||
vol_fields = {
|
||||
'id': f_uuid[0],
|
||||
'created_at': utc_now,
|
||||
'volume_type': vol_type,
|
||||
'volume_type_id': vol_type.id,
|
||||
'migration_status': mig_status,
|
||||
}
|
||||
vol = fake_volume.fake_volume_obj(ctx, **vol_fields)
|
||||
sf_vol = self.fake_sfvol
|
||||
mock_get_sf_volume.return_value = sf_vol
|
||||
|
||||
sfv = solidfire.SolidFireDriver(configuration=self.configuration)
|
||||
sfv.attach_volume(ctx, vol, i_uuid, 'fake_host', '/dev/sdf')
|
||||
self.assertEqual(sf_vol['attributes']['attached_to'],
|
||||
i_uuid)
|
||||
mock_get_sfaccount.assert_called()
|
||||
mock_get_sf_volume.assert_called()
|
||||
|
||||
def test_retype_with_qos_spec(self):
|
||||
test_type = {'name': 'sf-1',
|
||||
'qos_specs_id': 'fb0576d7-b4b5-4cad-85dc-ca92e6a497d1',
|
||||
|
|
|
@ -2086,7 +2086,14 @@ class SolidFireDriver(san.SanISCSIDriver):
|
|||
sfaccount = self._get_sfaccount(volume['project_id'])
|
||||
params = {'accountID': sfaccount['accountID']}
|
||||
|
||||
sf_vol = self._get_sf_volume(volume['id'], params)
|
||||
# In a retype of an attached volume scenario, the volume id will be
|
||||
# as a target on 'migration_status', otherwise it'd be None.
|
||||
migration_status = volume.get('migration_status')
|
||||
if migration_status and 'target' in migration_status:
|
||||
__, vol_id = migration_status.split(':')
|
||||
else:
|
||||
vol_id = volume['id']
|
||||
sf_vol = self._get_sf_volume(vol_id, params)
|
||||
if sf_vol is None:
|
||||
LOG.error("Volume ID %s was not found on "
|
||||
"the SolidFire Cluster while attempting "
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
fixes:
|
||||
- |
|
||||
Fixed `bug #1859652 <https://bugs.launchpad.net/cinder/+bug/1859652>`_
|
||||
to allow retyping an attached volume to SolidFire.
|
Loading…
Reference in New Issue