[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