[Erp5-report] r39141 vincent - /erp5/trunk/products/ZSQLCatalog/SQLCatalog.py

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Oct 14 14:49:37 CEST 2010


Author: vincent
Date: Thu Oct 14 14:49:30 2010
New Revision: 39141

URL: http://svn.erp5.org?rev=39141&view=rev
Log:
Scope SQLCatalog method caches to instance.

Modified:
    erp5/trunk/products/ZSQLCatalog/SQLCatalog.py

Modified: erp5/trunk/products/ZSQLCatalog/SQLCatalog.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/SQLCatalog.py?rev=39141&r1=39140&r2=39141&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/SQLCatalog.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/SQLCatalog.py [utf8] Thu Oct 14 14:49:30 2010
@@ -101,6 +101,15 @@ except ImportError:
   def getTransactionalVariable():
     return {}
 
+def generateCatalogCacheId(method_id, *args, **kwd):
+  self = args[0]
+  # XXX: getPath is overkill for a unique cache identifier.
+  # What I would like to use instead of it is:
+  #   (self._p_jar.db().database_name, self._p_oid)
+  # but database_name is not unique in at least ZODB 3.4 (Zope 2.8.8).
+  return str((method_id, self.getCacheSequenceNumber(), self.getPath(),
+    args[1:], kwd))
+
 class transactional_cache_decorator:
   """
     Implements singleton-style caching.
@@ -112,7 +121,9 @@ class transactional_cache_decorator:
   def __call__(self, method):
     def wrapper(wrapped_self):
       transactional_cache = getTransactionalVariable()
-      cache_id = self.cache_id
+      cache_id = str((self.cache_id,
+        getInstanceID(wrapped_self),
+      ))
       try:
         result = transactional_cache[cache_id]
       except KeyError:
@@ -935,6 +946,7 @@ class Catalog(Folder,
 
   @caching_instance_method(id='SQLCatalog.getColumnIds',
     cache_factory='erp5_content_long',
+    cache_id_generator=generateCatalogCacheId,
   )
   def _getColumnIds(self):
     keys = set()
@@ -964,6 +976,7 @@ class Catalog(Folder,
   @profiler_decorator
   @caching_instance_method(id='SQLCatalog.getColumnMap',
     cache_factory='erp5_content_long',
+    cache_id_generator=generateCatalogCacheId,
   )
   @profiler_decorator
   def getColumnMap(self):
@@ -983,6 +996,7 @@ class Catalog(Folder,
   @profiler_decorator
   @caching_instance_method(id='SQLCatalog.getColumnIds',
     cache_factory='erp5_content_long',
+    cache_id_generator=generateCatalogCacheId,
   )
   @profiler_decorator
   def getResultColumnIds(self):
@@ -1004,6 +1018,7 @@ class Catalog(Folder,
   @profiler_decorator
   @caching_instance_method(id='SQLCatalog.getSortColumnIds',
       cache_factory='erp5_content_long',
+      cache_id_generator=generateCatalogCacheId,
   )
   @profiler_decorator
   def getSortColumnIds(self):
@@ -1834,6 +1849,7 @@ class Catalog(Folder,
 
   @caching_instance_method(id='SQLCatalog.getTableIndex',
     cache_factory='erp5_content_long',
+    cache_id_generator=generateCatalogCacheId,
   )
   def _getTableIndex(self, table):
     table_index = {}
@@ -2276,6 +2292,7 @@ class Catalog(Folder,
   @profiler_decorator
   @caching_instance_method(id='SQLCatalog._getSearchKeyDict',
     cache_factory='erp5_content_long',
+    cache_id_generator=generateCatalogCacheId,
   )
   @profiler_decorator
   def _getSearchKeyDict(self):




More information about the Erp5-report mailing list