Handle NotImplementedError for image cache cloning
The base driver throws NotImplementedError, so if a driver does not override create_cloned_volume the image caching needs to handle this and treat it like a general cloning failure to failback to the default handling. Change-Id: I06ad0e71e6c502945975629141ec573110482954 Closes-bug: #1642394
This commit is contained in:
parent
327e4b8555
commit
80b93f24b2
|
@ -781,6 +781,7 @@ class CreateVolumeFlowManagerGlanceCinderBackendCase(test.TestCase):
|
|||
self.test_create_from_image_volume(location=False)
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
@mock.patch('cinder.image.image_utils.TemporaryImages.fetch')
|
||||
@mock.patch('cinder.volume.flows.manager.create_volume.'
|
||||
'CreateVolumeFromSpecTask.'
|
||||
|
@ -907,6 +908,36 @@ class CreateVolumeFlowManagerImageCacheTestCase(test.TestCase):
|
|||
image_meta=image_meta
|
||||
)
|
||||
|
||||
@ddt.data(
|
||||
NotImplementedError('Driver does not support clone'),
|
||||
exception.CinderException('Error during cloning'))
|
||||
def test_create_from_image_clone_failure(
|
||||
self, effect, mock_get_internal_context,
|
||||
mock_create_from_img_dl, mock_create_from_src,
|
||||
mock_handle_bootable, mock_fetch_img):
|
||||
mock_get_internal_context.return_value = None
|
||||
volume = fake_volume.fake_volume_obj(self.ctxt)
|
||||
mock_create_from_src.side_effect = effect
|
||||
|
||||
image_id = fakes.IMAGE_ID
|
||||
image_meta = {'virtual_size': '1073741824'}
|
||||
|
||||
manager = create_volume_manager.CreateVolumeFromSpecTask(
|
||||
self.mock_volume_manager,
|
||||
self.mock_db,
|
||||
self.mock_driver,
|
||||
image_volume_cache=self.mock_cache
|
||||
)
|
||||
|
||||
model, result = manager._create_from_image_cache(self.ctxt,
|
||||
None,
|
||||
volume,
|
||||
image_id,
|
||||
image_meta)
|
||||
|
||||
self.assertIsNone(model)
|
||||
self.assertFalse(result)
|
||||
|
||||
def test_create_from_image_bigger_size(
|
||||
self, mock_get_internal_context,
|
||||
mock_create_from_img_dl, mock_create_from_src,
|
||||
|
|
|
@ -685,9 +685,12 @@ class CreateVolumeFromSpecTask(flow_utils.CinderTask):
|
|||
cache_entry['volume_id']
|
||||
)
|
||||
return model_update, True
|
||||
except NotImplementedError:
|
||||
LOG.warning(_LW('Backend does not support creating image-volume '
|
||||
'clone. Image will be downloaded from Glance.'))
|
||||
except exception.CinderException as e:
|
||||
LOG.warning(_LW('Failed to create volume from image-volume cache, '
|
||||
'will fall back to default behavior. Error: '
|
||||
'image will be downloaded from Glance. Error: '
|
||||
'%(exception)s'), {'exception': e})
|
||||
return None, False
|
||||
|
||||
|
|
Loading…
Reference in New Issue