From c62e1b325a536294b3285f8cbcad7d66a415ee23 Mon Sep 17 00:00:00 2001 From: Steve Baker Date: Mon, 16 May 2016 12:59:59 +1200 Subject: [PATCH] Use a weakref for the data object context There are no known circular reference issues caused by storing the context in data objects, but the following changes will refer to data objects in the context, so this change prevents any later issues. Change-Id: I3680e5678003cf339a98fbb7a2b1b387fb2243c0 Related-Bug: #1578854 --- heat/objects/base.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/heat/objects/base.py b/heat/objects/base.py index 6ff8deda5c..816deb6e01 100644 --- a/heat/objects/base.py +++ b/heat/objects/base.py @@ -14,9 +14,26 @@ """Heat common internal object model""" +import weakref + from oslo_versionedobjects import base as ovoo_base class HeatObject(ovoo_base.VersionedObject): OBJ_PROJECT_NAMESPACE = 'heat' VERSION = '1.0' + + @property + def _context(self): + if self._contextref is None: + return + ctxt = self._contextref() + assert ctxt is not None, "Need a reference to the context" + return ctxt + + @_context.setter + def _context(self, context): + if context: + self._contextref = weakref.ref(context) + else: + self._contextref = None