Delete volume transfer in volume_destroy function

Doing volume force delete operation on volume-A will change volume-A's
status to 'deleted', so all related data about volume-A should be deleted.
Now current version's volume_destroy function doesn't delete related data
of volume transfer. If there is volume transfer about volume-A, first do
force delete operation on volume A, and thus the volume-A's transfer data
would be residual. So remove the related data of volume transfer in
volume_destroy function.

Change-Id: Id80a6e0cc061fccb02af60706244be043abdd72d
Closes-Bug: #1270785
This commit is contained in:
ling-yun 2014-01-20 18:48:43 +08:00
parent c24e82d046
commit 19d8040d61
2 changed files with 22 additions and 0 deletions

View File

@ -1098,6 +1098,11 @@ def volume_destroy(context, volume_id):
update({'deleted': True,
'deleted_at': now,
'updated_at': literal_column('updated_at')})
model_query(context, models.Transfer, session=session).\
filter_by(volume_id=volume_id).\
update({'deleted': True,
'deleted_at': now,
'updated_at': literal_column('updated_at')})
@require_admin_context

View File

@ -118,3 +118,20 @@ class VolumeTransferTestCase(test.TestCase):
ts = tx_api.get_all(nctxt)
self.assertEqual(len(ts), 0, 'Unexpected transfers listed.')
def test_delete_transfer_with_deleted_volume(self):
#create a volume
volume = utils.create_volume(self.ctxt, id='1',
updated_at=self.updated_at)
#create a transfer
tx_api = transfer_api.API()
transfer = tx_api.create(self.ctxt, volume['id'], 'Description')
t = tx_api.get(self.ctxt, transfer['id'])
self.assertEqual(t['id'], transfer['id'], 'Unexpected transfer id')
#force delete volume
db.volume_destroy(context.get_admin_context(), volume['id'])
#Make sure transfer has been deleted.
self.assertRaises(exception.TransferNotFound,
tx_api.get,
self.ctxt,
transfer['id'])