Merge "DBMS: Fix volume deletion with MySQL"

This commit is contained in:
Zuul 2020-04-17 17:13:33 +00:00 committed by Gerrit Code Review
commit db20a5a148
3 changed files with 24 additions and 0 deletions

View File

@ -315,6 +315,10 @@ class DBPersistence(persistence_base.PersistenceDriverBase):
volume.volume_type.qos_specs_id)
else:
LOG.debug('hard deleting volume %s', volume.id)
for model in (models.VolumeMetadata, models.VolumeAdminMetadata):
query = sqla_api.model_query(objects.CONTEXT, model)
query.filter_by(volume_id=volume.id).delete()
query = sqla_api.model_query(objects.CONTEXT, models.Volume)
query.filter_by(id=volume.id).delete()
if delete_type:

View File

@ -120,6 +120,21 @@ class TestDBPersistence(base.BasePersistenceTest):
cinder_ovos.VolumeType)
self.assertEqual('__DEFAULT__', self.persistence.DEFAULT_TYPE.name)
def test_delete_volume_with_metadata(self):
vols = self.create_volumes([{'size': i, 'name': 'disk%s' % i,
'metadata': {'k': 'v', 'k2': 'v2'},
'admin_metadata': {'k': '1'}}
for i in range(1, 3)])
self.persistence.delete_volume(vols[0])
res = self.persistence.get_volumes()
self.assertListEqualObj([vols[1]], res)
for model in (dbms.models.VolumeMetadata,
dbms.models.VolumeAdminMetadata):
query = dbms.sqla_api.model_query(self.context, model)
res = query.filter_by(volume_id=vols[0].id).all()
self.assertEqual([], res)
class TestMemoryDBPersistence(TestDBPersistence):
PERSISTENCE_CFG = {'storage': 'memory_db'}

View File

@ -0,0 +1,5 @@
---
fixes:
- |
Bug #1868148: Volume deletion no longer fails due to DB constraints when
using the DBMS metadata persistence plugin with a MySQL backend.