summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoe Gordon <jogo@cloudscaling.com>2013-03-07 00:41:48 +0000
committerJoe Gordon <jogo@cloudscaling.com>2013-03-12 13:33:44 -0700
commitfc561270d8600ae4ce914acf90eb560601732ca8 (patch)
tree269b05a20af6e0efa8a89e9671e826e9c2ada37b
parentf0fc1240090938ae9d945bb91bfeda4e5d42ac9c (diff)
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
-rw-r--r--nova/db/sqlalchemy/api.py4
-rw-r--r--nova/tests/test_db_api.py15
2 files changed, 18 insertions, 1 deletions
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)