Skip to content

Commit

Permalink
Update cloned volumes QoS settings.
Browse files Browse the repository at this point in the history
The SolidFire device inherits all settings (including QoS) from
the parent on a clone.  This meant that although we were expecting
QoS to be updated when a clone was issued with a different Volume
Type than the parent volume it was never acted upon.

This change fixes that bug by simply adding the *new* qos settings
to the ModifyVolume call after cloning.

Fixes bug: 1184235

Change-Id: I81786a07312027d543b9f06e54dfbf57e6085bc9
  • Loading branch information
j-griffith committed May 27, 2013
1 parent e3136a3 commit 37fa1ef
Showing 1 changed file with 17 additions and 8 deletions.
25 changes: 17 additions & 8 deletions cinder/volume/drivers/solidfire.py
Expand Up @@ -314,28 +314,37 @@ def _do_clone_volume(self, src_uuid, src_project_id, v_ref):
if src_project_id != v_ref['project_id']:
sfaccount = self._create_sfaccount(v_ref['project_id'])

if 'qos' in sf_vol:
qos = sf_vol['qos']

params = {'volumeID': int(sf_vol['volumeID']),
'name': 'UUID-%s' % v_ref['id'],
'newAccountID': sfaccount['accountID'],
'qos': qos}
'newAccountID': sfaccount['accountID']}
data = self._issue_api_request('CloneVolume', params)

if (('result' not in data) or ('volumeID' not in data['result'])):
raise exception.SolidFireAPIDataException(data=data)
sf_volume_id = data['result']['volumeID']

if (self.configuration.sf_allow_tenant_qos and
v_ref.get('volume_metadata')is not None):
qos = self._set_qos_presets(v_ref)

ctxt = context.get_admin_context()
type_id = v_ref['volume_type_id']
if type_id is not None:
qos = self._set_qos_by_volume_type(ctxt, type_id)

# NOTE(jdg): all attributes are copied via clone, need to do an update
# to set any that were provided
params = {'volumeID': sf_volume_id}

attributes = {'uuid': v_ref['id'],
'is_clone': 'True',
'src_uuid': src_uuid}
if qos:
params['qos'] = qos
for k, v in qos.items():
attributes[k] = str(v)

params = {'volumeID': sf_volume_id,
'attributes': attributes}

params['attributes'] = attributes
data = self._issue_api_request('ModifyVolume', params)

model_update = self._get_model_info(sfaccount, sf_volume_id)
Expand Down

0 comments on commit 37fa1ef

Please sign in to comment.