Adam Litke has uploaded a new change for review. Change subject: sdm: Move create_volume parent uuids into separate type ......................................................................
sdm: Move create_volume parent uuids into separate type The schema defines the parent volume reference used in SDM.create_volume as a distinct type (ParentVolumeInfo). Implement this in the code. Parent volume parameters are not required but if provided, both must be defined. Change-Id: I81aa1be73cb66ef6ca00d5b6a1997defd9aa8a48 Signed-off-by: Adam Litke <ali...@redhat.com> --- M tests/storage_sdm_create_volume_test.py M vdsm/storage/sdm/api/create_volume.py 2 files changed, 41 insertions(+), 18 deletions(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/30/55830/1 diff --git a/tests/storage_sdm_create_volume_test.py b/tests/storage_sdm_create_volume_test.py index 079b155..af9a552 100644 --- a/tests/storage_sdm_create_volume_test.py +++ b/tests/storage_sdm_create_volume_test.py @@ -87,9 +87,7 @@ return dict(sd_id=str(uuid.uuid4()), img_id=str(uuid.uuid4()), vol_id=str(uuid.uuid4()), virtual_size=2048, vol_format='RAW', disk_type='SYSTEM', - description='test vol', - parent_img_id=volume.BLANK_UUID, - parent_vol_id=volume.BLANK_UUID, initial_size='0') + description='test vol', initial_size='0') class CreateVolumeTests(VdsmTestCase): @@ -156,23 +154,40 @@ storage.sdm.api.create_volume.CreateVolumeInfo, info) def test_default_parameter(self): - defaults = dict( - description='', - parent_img_id=volume.BLANK_UUID, - parent_vol_id=volume.BLANK_UUID, - initial_size=0 - ) - info = _get_vol_info() - for k in defaults.iterkeys(): - del info[k] + del info['description'] + del info['initial_size'] info_obj = storage.sdm.api.create_volume.CreateVolumeInfo(info) - for k, v in defaults.iteritems(): - self.assertEqual(v, getattr(info_obj, k)) + self.assertEqual('', info_obj.description) + self.assertEqual(0, info_obj.initial_size) + self.assertEqual(volume.BLANK_UUID, info_obj.parent.vol_id) + self.assertEqual(volume.BLANK_UUID, info_obj.parent.img_id) def test_bad_enum_value(self): info = _get_vol_info() info['vol_format'] = 'foo' self.assertRaises(se.InvalidParameterException, storage.sdm.api.create_volume.CreateVolumeInfo, info) + + +class ParentVolumeInfoTests(VdsmTestCase): + + def test_no_params(self): + obj = storage.sdm.api.create_volume.ParentVolumeInfo({}) + self.assertEqual(volume.BLANK_UUID, obj.vol_id) + self.assertEqual(volume.BLANK_UUID, obj.img_id) + + def test_incomplete_params_raises(self): + self.assertRaises(exception.MissingParameter, + storage.sdm.api.create_volume.ParentVolumeInfo, + {'vol_id': 'foo'}) + self.assertRaises(exception.MissingParameter, + storage.sdm.api.create_volume.ParentVolumeInfo, + {'img_id': 'foo'}) + + def test_complete_params(self): + params = {'vol_id': 'foo', 'img_id': 'bar'} + obj = storage.sdm.api.create_volume.ParentVolumeInfo(params) + for key, val in params.items(): + self.assertEqual(val, getattr(obj, key)) diff --git a/vdsm/storage/sdm/api/create_volume.py b/vdsm/storage/sdm/api/create_volume.py index a2c895a..53453c5 100644 --- a/vdsm/storage/sdm/api/create_volume.py +++ b/vdsm/storage/sdm/api/create_volume.py @@ -41,7 +41,7 @@ def _run(self): vol_format = volume.name2type(self.vol_info.vol_format) self.sd_manifest.validateCreateVolumeParams( - vol_format, self.vol_info.parent_vol_id) + vol_format, self.vol_info.parent.vol_id) with self.sd_manifest.domain_lock(self.host_id): image_res_ns = sd.getNamespace(self.sd_manifest.sdUUID, @@ -53,7 +53,7 @@ artifacts.create( self.vol_info.virtual_size, vol_format, self.vol_info.disk_type, self.vol_info.description, - self.vol_info.parent_vol_id) + self.vol_info.parent.vol_id) artifacts.commit() @@ -71,11 +71,19 @@ self.vol_format = _enum(params, 'vol_format', vol_types) self.disk_type = _enum(params, 'disk_type', image.DISK_TYPES.values()) self.description = params.get('description', '') - self.parent_img_id = params.get('parent_img_id', volume.BLANK_UUID) - self.parent_vol_id = params.get('parent_vol_id', volume.BLANK_UUID) + self.parent = ParentVolumeInfo(params.get('parent', {})) self.initial_size = params.get('initial_size', 0) +class ParentVolumeInfo(object): + def __init__(self, params): + # The parameters are optional, but if specified both must be given + if ('img_id' in params) != ('vol_id' in params): + raise exception.MissingParameter() + self.img_id = params.get('img_id', volume.BLANK_UUID) + self.vol_id = params.get('vol_id', volume.BLANK_UUID) + + def _required(params, name): if name not in params: raise exception.MissingParameter() -- To view, visit https://gerrit.ovirt.org/55830 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I81aa1be73cb66ef6ca00d5b6a1997defd9aa8a48 Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Adam Litke <ali...@redhat.com> _______________________________________________ vdsm-patches mailing list vdsm-patches@lists.fedorahosted.org https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches