Delete related encryption provider when a volume type is deleting

Currently volume_type_destroy() in api.py does not delete related
encryption provider (if it exists). As a result, 'encryption' table
accumulates orphaned records.
This patch fixes to delete related encryption provider when
a volume type is deleting.

Change-Id: I90962108ced5043d74b7a7984196b14b2a13eeab
Closes-Bug: 1797640
This commit is contained in:
Serhii Rusin 2018-12-05 09:08:44 -05:00
parent 94202a2464
commit f3bc40ec34
2 changed files with 24 additions and 0 deletions

View File

@ -4163,6 +4163,11 @@ def volume_type_destroy(context, id):
update({'deleted': True,
'deleted_at': utcnow,
'updated_at': literal_column('updated_at')})
model_query(context, models.Encryption, session=session).\
filter_by(volume_type_id=id).\
update({'deleted': True,
'deleted_at': utcnow,
'updated_at': literal_column('updated_at')})
model_query(context, models.VolumeTypeProjects, session=session,
read_deleted="int_no").filter_by(
volume_type_id=id).soft_delete(synchronize_session=False)

View File

@ -47,6 +47,25 @@ class VolumeTypeTestCase(test.TestCase):
visible="True")
self.vol_type1_description = self.vol_type1_name + '_desc'
def test_volume_type_destroy_with_encryption(self):
volume_type = volume_types.create(self.ctxt, "type1")
volume_type_id = volume_type.get('id')
encryption = {
'control_location': 'front-end',
'provider': 'fake_provider',
}
db_api.volume_type_encryption_create(self.ctxt, volume_type_id,
encryption)
ret = volume_types.get_volume_type_encryption(self.ctxt,
volume_type_id)
self.assertIsNotNone(ret)
volume_types.destroy(self.ctxt, volume_type_id)
ret = volume_types.get_volume_type_encryption(self.ctxt,
volume_type_id)
self.assertIsNone(ret)
def test_get_volume_type_by_name_with_uuid_name(self):
"""Ensure volume types can be created and found."""
uuid_format_name = uuidutils.generate_uuid()