Skip to content

Commit

Permalink
Prevent create volume from snapshot with bad size
Browse files Browse the repository at this point in the history
Prevent to create a volume from a snapshot with a volume size less
than the snapshot size.

Check if a volume size is specified that it is less than
the snapshot size.

Raise a exception if it's lesser.

Fixes bug 1161841

Change-Id: Ic1afbfb025ce0b3906c35c6c50a71734d74a9851
  • Loading branch information
Jean-Baptiste RANSY committed Apr 4, 2013
1 parent b7986d0 commit cabca4f
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
14 changes: 14 additions & 0 deletions cinder/tests/test_volume.py
Expand Up @@ -253,6 +253,20 @@ def test_create_volume_from_snapshot(self):
self.volume.delete_snapshot(self.context, snapshot_id)
self.volume.delete_volume(self.context, volume_src['id'])

def test_create_volume_from_snapshot_fail_bad_size(self):
"""Test volume can't be created from snapshot with bad volume size."""
volume_api = cinder.volume.api.API()
snapshot = dict(id=1234,
status='available',
volume_size=10)
self.assertRaises(exception.InvalidInput,
volume_api.create,
self.context,
size=1,
name='fake_name',
description='fake_desc',
snapshot=snapshot)

def test_create_volume_with_invalid_exclusive_options(self):
"""Test volume create with multiple exclusive options fails."""
volume_api = cinder.volume.api.API()
Expand Down
5 changes: 4 additions & 1 deletion cinder/volume/api.py
Expand Up @@ -104,7 +104,10 @@ def create(self, context, size, name, description, snapshot=None,
raise exception.InvalidSnapshot(reason=msg)
if not size:
size = snapshot['volume_size']

elif size < snapshot['volume_size']:
msg = _("Volume size cannot be lesser than"
" the Snapshot size")
raise exception.InvalidInput(reason=msg)
snapshot_id = snapshot['id']
else:
snapshot_id = None
Expand Down

0 comments on commit cabca4f

Please sign in to comment.