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
This commit is contained in:
Steve Baker 2016-05-16 12:59:59 +12:00
parent 0ef5d601c0
commit c62e1b325a
1 changed files with 17 additions and 0 deletions

View File

@ -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