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 commitca475a3dad
) (cherry picked from commit0a223ff59c
)
This commit is contained in:
parent
73ba22632b
commit
3563e75687
|
@ -1323,6 +1323,36 @@ class SolidFireVolumeTestCase(test.TestCase):
|
|||
self.assertTrue(migrated)
|
||||
self.assertEqual({}, updates)
|
||||
|
||||
@data(None, 'Success', 'Error', 'target:{}'.format(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',
|
||||
|
|
|
@ -2076,7 +2076,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