From fc561270d8600ae4ce914acf90eb560601732ca8 Mon Sep 17 00:00:00 2001 From: Joe Gordon Date: Thu, 7 Mar 2013 00:41:48 +0000 Subject: Delete instance metadata when delete VM * like everything else instance metadata is just soft deleted. * This doesn't soft delete instance_system_metadata (bug 1153827) Fix bug 1092408 Change-Id: Iebc2c7e055a110e5067829569127a272a1a92a87 --- nova/db/sqlalchemy/api.py | 4 +++- nova/tests/test_db_api.py | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index c98cb716e..88c2d9915 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -1475,10 +1475,12 @@ def instance_destroy(context, instance_uuid, constraint=None): session.query(models.SecurityGroupInstanceAssociation).\ filter_by(instance_uuid=instance_uuid).\ soft_delete() - session.query(models.InstanceInfoCache).\ filter_by(instance_uuid=instance_uuid).\ soft_delete() + session.query(models.InstanceMetadata).\ + filter_by(instance_uuid=instance_uuid).\ + soft_delete() return instance_ref diff --git a/nova/tests/test_db_api.py b/nova/tests/test_db_api.py index 1653e942c..8c047f05c 100644 --- a/nova/tests/test_db_api.py +++ b/nova/tests/test_db_api.py @@ -327,6 +327,21 @@ class DbApiTestCase(DbTestCase): system_meta = db.instance_system_metadata_get(ctxt, instance['uuid']) self.assertEqual('baz', system_meta['original_image_ref']) + def test_delete_instance_metadata_on_instance_destroy(self): + ctxt = context.get_admin_context() + + # Create an instance with some metadata + values = {'metadata': {'host': 'foo', 'key1': 'meow'}, + 'system_metadata': {'original_image_ref': 'blah'}} + instance = db.instance_create(ctxt, values) + instance_meta = db.instance_metadata_get(ctxt, instance['uuid']) + self.assertEqual('foo', instance_meta['host']) + self.assertEqual('meow', instance_meta['key1']) + db.instance_destroy(ctxt, instance['uuid']) + instance_meta = db.instance_metadata_get(ctxt, instance['uuid']) + # Make sure instance metadata is deleted as well + self.assertEqual({}, instance_meta) + def test_instance_update_unique_name(self): otherprojectcontext = context.RequestContext(self.user_id, "%s2" % self.project_id) -- cgit