summaryrefslogtreecommitdiff
path: root/heat/objects
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2017-03-15 03:35:08 +0000
committerGerrit Code Review <review@openstack.org>2017-03-15 03:35:08 +0000
commit4dc101f10ef2e41123812d8be0733b160d5c8331 (patch)
treeccf37f5df3b1ba2094252d2b508ef55f515ff8eb /heat/objects
parent954b3bf901347123da9ad5ce0dbd6d3a137dcbde (diff)
parent283b2d39852f735e74724e72b16d5815bdea061e (diff)
downloadheat-4dc101f10ef2e41123812d8be0733b160d5c8331.tar.gz
Merge "Eager load event's resource prop. data when appropiate"
Diffstat (limited to 'heat/objects')
-rw-r--r--heat/objects/event.py25
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 {}