Skip to content

Commit

Permalink
Fix for bug 887712
Browse files Browse the repository at this point in the history
Check weather the instance_id passed into instance_update() is a model id
or a UUID.

Change-Id: Ic361299cdbfa5c3786815753c47a8e4f3ba6d494
  • Loading branch information
Adrian Smith committed Nov 29, 2011
1 parent da003c1 commit 9f643c8
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 7 deletions.
1 change: 1 addition & 0 deletions Authors
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
Aaron Lee <aaron.lee@rackspace.com>
Adam Gandelman <adamg@canonical.com>
Adam Johnson <adjohn@gmail.com>
Adrian Smith <adrian_f_smith@dell.com>
Ahmad Hassan <ahmad.hassan@hp.com>
Alex Meade <alex.meade@rackspace.com>
Alexander Sakhnov <asakhnov@mirantis.com>
Expand Down
17 changes: 10 additions & 7 deletions nova/db/sqlalchemy/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -1571,21 +1571,24 @@ def instance_get_all_hung_in_rebooting(context, reboot_window, session=None):
@require_context
def instance_update(context, instance_id, values):
session = get_session()

if utils.is_uuid_like(instance_id):
instance_ref = instance_get_by_uuid(context, instance_id,
session=session)
else:
instance_ref = instance_get(context, instance_id, session=session)

metadata = values.get('metadata')
if metadata is not None:
instance_metadata_update(context,
instance_id,
instance_ref['id'],
values.pop('metadata'),
delete=True)
with session.begin():
if utils.is_uuid_like(instance_id):
instance_ref = instance_get_by_uuid(context, instance_id,
session=session)
else:
instance_ref = instance_get(context, instance_id, session=session)
instance_ref.update(values)
instance_ref.save(session=session)
return instance_ref

return instance_ref


def instance_add_security_group(context, instance_uuid, security_group_id):
Expand Down
36 changes: 36 additions & 0 deletions nova/tests/test_db_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,3 +156,39 @@ def test_network_create_safe(self):
self.assertEqual(36, len(network.uuid))
db_network = db.network_get(ctxt, network.id)
self.assertEqual(network.uuid, db_network.uuid)

def test_instance_update_with_instance_id(self):
""" test instance_update() works when an instance id is passed """
ctxt = context.get_admin_context()

# Create an instance with some metadata
metadata = {'host': 'foo'}
values = {'metadata': metadata}
instance = db.instance_create(ctxt, values)

# Update the metadata
metadata = {'host': 'bar'}
values = {'metadata': metadata}
db.instance_update(ctxt, instance.id, values)

# Retrieve the metadata to ensure it was successfully updated
instance_meta = db.instance_metadata_get(ctxt, instance.id)
self.assertEqual('bar', instance_meta['host'])

def test_instance_update_with_instance_uuid(self):
""" test instance_update() works when an instance UUID is passed """
ctxt = context.get_admin_context()

# Create an instance with some metadata
metadata = {'host': 'foo'}
values = {'metadata': metadata}
instance = db.instance_create(ctxt, values)

# Update the metadata
metadata = {'host': 'bar'}
values = {'metadata': metadata}
db.instance_update(ctxt, instance.uuid, values)

# Retrieve the metadata to ensure it was successfully updated
instance_meta = db.instance_metadata_get(ctxt, instance.id)
self.assertEqual('bar', instance_meta['host'])

0 comments on commit 9f643c8

Please sign in to comment.