From: Duncan Thomas Date: Wed, 2 Mar 2016 10:08:52 +0000 (+0200) Subject: Continue volume delete on encryption key delete errors X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=e4bf3e0cc00db52e7bc19be7707d2677a72cd62f;p=openstack-build%2Fcinder-build.git Continue volume delete on encryption key delete errors If there is a problem removing the encryption key from the key manager (e.g. because the key has been manually deleted already) then the volume delete should not fail - this leaves undeletable volumes. Just log a warning and continue instead. Closes-bug: 1552169 Change-Id: Id3571cbfa7c66787573cf750735be33a440d15dc --- diff --git a/cinder/tests/unit/test_volume.py b/cinder/tests/unit/test_volume.py index 6cf65569b..bf0c133a1 100644 --- a/cinder/tests/unit/test_volume.py +++ b/cinder/tests/unit/test_volume.py @@ -7710,6 +7710,19 @@ class ImageVolumeCacheTestCase(BaseVolumeTestCase): volume['id']) self.assertIsNone(entry) + def test_delete_volume_with_keymanager_exception(self): + volume_params = { + 'host': 'some_host', + 'size': 1 + } + volume_api = cinder.volume.api.API() + volume = tests_utils.create_volume(self.context, **volume_params) + + with mock.patch.object( + volume_api.key_manager, 'delete_key') as key_del_mock: + key_del_mock.side_effect = Exception("Key not found") + volume_api.delete(self.context, volume) + @ddt.ddt class DiscardFlagTestCase(BaseVolumeTestCase): diff --git a/cinder/volume/api.py b/cinder/volume/api.py index 4fba50a8d..a4b1be424 100644 --- a/cinder/volume/api.py +++ b/cinder/volume/api.py @@ -425,8 +425,8 @@ class API(base.Base): try: self.key_manager.delete_key(context, encryption_key_id) except Exception as e: - msg = _("Unable to delete encrypted volume: %s.") % e.msg - raise exception.InvalidVolume(reason=msg) + LOG.warning(_LW("Unable to delete encryption key for " + "volume: %s."), e.msg, resource=volume) self.volume_rpcapi.delete_volume(context, volume,