diff options
author | Jenkins <jenkins@review.openstack.org> | 2017-03-15 03:35:08 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2017-03-15 03:35:08 +0000 |
commit | 4dc101f10ef2e41123812d8be0733b160d5c8331 (patch) | |
tree | ccf37f5df3b1ba2094252d2b508ef55f515ff8eb /heat/objects | |
parent | 954b3bf901347123da9ad5ce0dbd6d3a137dcbde (diff) | |
parent | 283b2d39852f735e74724e72b16d5815bdea061e (diff) | |
download | heat-4dc101f10ef2e41123812d8be0733b160d5c8331.tar.gz |
Merge "Eager load event's resource prop. data when appropiate"
Diffstat (limited to 'heat/objects')
-rw-r--r-- | heat/objects/event.py | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/heat/objects/event.py b/heat/objects/event.py index b2c35fd64..ba9908893 100644 --- a/heat/objects/event.py +++ b/heat/objects/event.py @@ -14,14 +14,18 @@ """Event object.""" +from oslo_log import log as logging from oslo_versionedobjects import base from oslo_versionedobjects import fields +from heat.common.i18n import _LI from heat.common import identifier from heat.db.sqlalchemy import api as db_api from heat.objects import base as heat_base from heat.objects import resource_properties_data as rpd +LOG = logging.getLogger(__name__) + class Event( heat_base.HeatObject, @@ -45,16 +49,30 @@ class Event( @staticmethod def _from_db_object(context, event, db_event): + event._resource_properties = None for field in event.fields: if field == 'resource_status_reason': # this works whether db_event is a dict or db ref event[field] = db_event['_resource_status_reason'] else: event[field] = db_event[field] - if db_event['rsrc_prop_data_id'] is not None: - event._resource_properties = None - else: + if db_event['rsrc_prop_data_id'] is None: event._resource_properties = db_event['resource_properties'] or {} + else: + if hasattr(db_event, '__dict__'): + rpd_obj = db_event.__dict__.get('rsrc_prop_data') + elif hasattr(db_event, 'rsrc_prop_data'): + rpd_obj = db_event['rsrc_prop_data'] + else: + rpd_obj = None + if rpd_obj is not None: + # Object is already eager loaded + rpd_obj = ( + rpd.ResourcePropertiesData._from_db_object( + rpd.ResourcePropertiesData(), + context, + rpd_obj)) + event._resource_properties = rpd_obj.data event._context = context event.obj_reset_changes() return event @@ -62,6 +80,7 @@ class Event( @property def resource_properties(self): if self._resource_properties is None: + LOG.info(_LI('rsrp_prop_data lazy load')) rpd_obj = rpd.ResourcePropertiesData.get_by_id( self._context, self.rsrc_prop_data_id) self._resource_properties = rpd_obj.data or {} |