Soft delete virtual_interfaces when instance is destroyed
Like the other reference table entries for an instance, we should soft_delete virtual_interfaces when destroying an instance. Failing to do so can lead to archive issues due to the referential constraint. Change-Id: I04355bdec5477b4c144105fea130089fe1ae6772 Closes-Bug: #1823781
This commit is contained in:
parent
083eb4bc75
commit
1af9de4e6e
|
@ -1806,6 +1806,8 @@ def instance_destroy(context, instance_uuid, constraint=None):
|
|||
model_query(context, models.Migration).\
|
||||
filter_by(instance_uuid=instance_uuid).\
|
||||
soft_delete()
|
||||
model_query(context, models.VirtualInterface).filter_by(
|
||||
instance_uuid=instance_uuid).soft_delete()
|
||||
model_query(context, models.InstanceIdMapping).filter_by(
|
||||
uuid=instance_uuid).soft_delete()
|
||||
# NOTE(snikitin): We can't use model_query here, because there is no
|
||||
|
|
|
@ -2574,6 +2574,21 @@ class InstanceTestCase(test.TestCase, ModelsObjectComparatorMixin):
|
|||
self.assertTrue(instance.deleted)
|
||||
self.assertEqual(0, len(migrations))
|
||||
|
||||
def test_delete_virtual_interfaces_on_instance_destroy(self):
|
||||
# Create the instance.
|
||||
ctxt = context.get_admin_context()
|
||||
uuid = uuidsentinel.uuid1
|
||||
db.instance_create(ctxt, {'uuid': uuid})
|
||||
# Create the VirtualInterface.
|
||||
db.virtual_interface_create(ctxt, {'instance_uuid': uuid})
|
||||
# Make sure the vif is tied to the instance.
|
||||
vifs = db.virtual_interface_get_by_instance(ctxt, uuid)
|
||||
self.assertEqual(1, len(vifs))
|
||||
# Destroy the instance and verify the vif is gone as well.
|
||||
db.instance_destroy(ctxt, uuid)
|
||||
self.assertEqual(
|
||||
0, len(db.virtual_interface_get_by_instance(ctxt, uuid)))
|
||||
|
||||
def test_instance_update_and_get_original(self):
|
||||
instance = self.create_instance_with_args(vm_state='building')
|
||||
(old_ref, new_ref) = db.instance_update_and_get_original(self.ctxt,
|
||||
|
|
Loading…
Reference in New Issue