summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Prince <dan.prince@rackspace.com>2011-05-31 14:38:12 -0400
committerDan Prince <dan.prince@rackspace.com>2011-05-31 14:38:12 -0400
commit7beafb1aafac97e6dfc28108062785465cc8f577 (patch)
treead0ede656833d168a2b66a64c44c1e7597320bc6
parent2155f2b1ab22c6183ab5266e16a675f1469fca50 (diff)
Use a new instance_metadata_delete_all DB api call to delete existing
metadata when updating a server.
-rw-r--r--nova/db/sqlalchemy/api.py22
1 files changed, 14 insertions, 8 deletions
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index ea84e96e7..8df96cbf4 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -1013,8 +1013,9 @@ def instance_update(context, instance_id, values):
session = get_session()
metadata = values.get('metadata')
if metadata is not None:
+ instance_metadata_delete_all(context, instance_id)
instance_metadata_update_or_create(context, instance_id,
- values.pop('metadata'), True)
+ values.pop('metadata'))
with session.begin():
instance_ref = instance_get(context, instance_id, session=session)
instance_ref.update(values)
@@ -2555,6 +2556,17 @@ def instance_metadata_delete(context, instance_id, key):
@require_context
+def instance_metadata_delete_all(context, instance_id):
+ session = get_session()
+ session.query(models.InstanceMetadata).\
+ filter_by(instance_id=instance_id).\
+ filter_by(deleted=False).\
+ update({'deleted': True,
+ 'deleted_at': datetime.datetime.utcnow(),
+ 'updated_at': literal_column('updated_at')})
+
+
+@require_context
def instance_metadata_get_item(context, instance_id, key):
session = get_session()
@@ -2571,8 +2583,7 @@ def instance_metadata_get_item(context, instance_id, key):
@require_context
-def instance_metadata_update_or_create(context, instance_id, metadata,
- purge=False):
+def instance_metadata_update_or_create(context, instance_id, metadata):
session = get_session()
original_metadata = instance_metadata_get(context, instance_id)
@@ -2589,9 +2600,4 @@ def instance_metadata_update_or_create(context, instance_id, metadata,
"deleted": 0})
meta_ref.save(session=session)
- if purge:
- for key in original_metadata.keys():
- if not key in metadata.keys():
- instance_metadata_delete(context, instance_id, key)
-
return metadata