[Checkins] SVN: mongopersist/trunk/src/mongopersist/zope/container.py Bug: avoid caching MongoDataManager instances in mongo container to avoid
Andrey Lebedev
cvs-admin at zope.org
Thu Apr 19 11:39:33 UTC 2012
Log message for revision 125173:
Bug: avoid caching MongoDataManager instances in mongo container to avoid
multiple MongoDataManagers in the single transaction in multithreaded
environment. Cache IMongoDataManagerProvider instead.
Changed:
U mongopersist/trunk/src/mongopersist/zope/container.py
-=-
Modified: mongopersist/trunk/src/mongopersist/zope/container.py
===================================================================
--- mongopersist/trunk/src/mongopersist/zope/container.py 2012-04-18 14:04:35 UTC (rev 125172)
+++ mongopersist/trunk/src/mongopersist/zope/container.py 2012-04-19 11:39:27 UTC (rev 125173)
@@ -118,17 +118,18 @@
@property
def _m_jar(self):
- if not hasattr(self, '_v_m_jar'):
+ if not hasattr(self, '_v_mdmp'):
# If the container is in a Mongo storage hierarchy, then getting
# the datamanager is easy, otherwise we do an adapter lookup.
if interfaces.IMongoDataManager.providedBy(self._p_jar):
- self._v_m_jar = self._p_jar
- else:
- provider = zope.component.getUtility(
+ return self._p_jar
+
+ # cache result of expensive component lookup
+ self._v_mdmp = zope.component.getUtility(
interfaces.IMongoDataManagerProvider)
- self._v_m_jar = provider.get()
- return self._v_m_jar
+ return self._v_mdmp.get()
+
def get_collection(self):
db_name = self._m_database or self._m_jar.default_database
return self._m_jar.get_collection(db_name, self._m_collection)
More information about the checkins
mailing list