diff options
| author | Dan Smith <danms@us.ibm.com> | 2013-06-17 19:20:44 -0700 |
|---|---|---|
| committer | Chris Behrens <cbehrens@codestud.com> | 2013-06-22 21:20:57 +0000 |
| commit | a9c695d82111702c562f4bb36fb9ea964b9d0913 (patch) | |
| tree | a2909b75d4736b0ee4100b6d5b467a4523f79f63 /nova/objects | |
| parent | cefb0510b8f12dab17126907661d82094c31741d (diff) | |
Fix orphaned instance from get_by_uuid() and _from_db_object()
We need to set _context on the Instance object we create during
get_by_uuid(), but more specifically during _from_db_object().
In order to properly initialize things like nested objects that
themselves need a _context, we should pass it to _from_db_object()
always.
Same thing for InstanceInfoCache.
Related to blueprint unified-object-model
Change-Id: I09ab6b5d7d8961b69294536885e8432943b3a611
Diffstat (limited to 'nova/objects')
| -rw-r--r-- | nova/objects/instance.py | 12 | ||||
| -rw-r--r-- | nova/objects/instance_info_cache.py | 5 |
2 files changed, 10 insertions, 7 deletions
diff --git a/nova/objects/instance.py b/nova/objects/instance.py index de47f648f..55e98e46e 100644 --- a/nova/objects/instance.py +++ b/nova/objects/instance.py @@ -158,7 +158,7 @@ class Instance(base.NovaObject): return base.NovaObject.obj_from_primitive(val) @staticmethod - def _from_db_object(instance, db_inst, expected_attrs=None): + def _from_db_object(context, instance, db_inst, expected_attrs=None): """Method to help with migration to objects. Converts a database entity to a formal object. @@ -185,8 +185,9 @@ class Instance(base.NovaObject): if db_inst['info_cache']: instance['info_cache'] = instance_info_cache.InstanceInfoCache() instance_info_cache.InstanceInfoCache._from_db_object( - instance['info_cache'], db_inst['info_cache']) + context, instance['info_cache'], db_inst['info_cache']) + instance._context = context instance.obj_reset_changes() return instance @@ -207,7 +208,8 @@ class Instance(base.NovaObject): db_inst = db.instance_get_by_uuid(context, uuid, columns_to_join) - return Instance._from_db_object(cls(), db_inst, expected_attrs) + return Instance._from_db_object(context, cls(), db_inst, + expected_attrs) @base.remotable def save(self, context, expected_task_state=None): @@ -240,7 +242,7 @@ class Instance(base.NovaObject): for attr in INSTANCE_OPTIONAL_FIELDS: if hasattr(self, base.get_attrname(attr)): expected_attrs.append(attr) - Instance._from_db_object(self, inst_ref, expected_attrs) + Instance._from_db_object(context, self, inst_ref, expected_attrs) if 'vm_state' in changes or 'task_state' in changes: notifications.send_update(context, old_ref, inst_ref) @@ -282,7 +284,7 @@ class Instance(base.NovaObject): def _make_instance_list(context, inst_list, db_inst_list, expected_attrs): inst_list.objects = [] for db_inst in db_inst_list: - inst_obj = Instance._from_db_object(Instance(), db_inst, + inst_obj = Instance._from_db_object(context, Instance(), db_inst, expected_attrs=expected_attrs) inst_obj._context = context inst_list.objects.append(inst_obj) diff --git a/nova/objects/instance_info_cache.py b/nova/objects/instance_info_cache.py index 6b46559ed..a14175852 100644 --- a/nova/objects/instance_info_cache.py +++ b/nova/objects/instance_info_cache.py @@ -23,16 +23,17 @@ class InstanceInfoCache(base.NovaObject): } @staticmethod - def _from_db_object(info_cache, db_obj): + def _from_db_object(context, info_cache, db_obj): info_cache.instance_uuid = db_obj['instance_uuid'] info_cache.network_info = db_obj['network_info'] info_cache.obj_reset_changes() + info_cache._context = context return info_cache @base.remotable_classmethod def get_by_instance_uuid(cls, context, instance_uuid): db_obj = db.instance_info_cache_get(context, instance_uuid) - return InstanceInfoCache._from_db_object(cls(), db_obj) + return InstanceInfoCache._from_db_object(context, cls(), db_obj) @base.remotable def save(self, context): |
