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).\
|
model_query(context, models.Migration).\
|
||||||
filter_by(instance_uuid=instance_uuid).\
|
filter_by(instance_uuid=instance_uuid).\
|
||||||
soft_delete()
|
soft_delete()
|
||||||
|
model_query(context, models.VirtualInterface).filter_by(
|
||||||
|
instance_uuid=instance_uuid).soft_delete()
|
||||||
model_query(context, models.InstanceIdMapping).filter_by(
|
model_query(context, models.InstanceIdMapping).filter_by(
|
||||||
uuid=instance_uuid).soft_delete()
|
uuid=instance_uuid).soft_delete()
|
||||||
# NOTE(snikitin): We can't use model_query here, because there is no
|
# 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.assertTrue(instance.deleted)
|
||||||
self.assertEqual(0, len(migrations))
|
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):
|
def test_instance_update_and_get_original(self):
|
||||||
instance = self.create_instance_with_args(vm_state='building')
|
instance = self.create_instance_with_args(vm_state='building')
|
||||||
(old_ref, new_ref) = db.instance_update_and_get_original(self.ctxt,
|
(old_ref, new_ref) = db.instance_update_and_get_original(self.ctxt,
|
||||||
|
|
Loading…
Reference in New Issue