[Erp5-report] r24285 - /erp5/trunk/products/ERP5Type/Tool/MemcachedTool.py

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Oct 22 16:00:23 CEST 2008


Author: kazuhiko
Date: Wed Oct 22 16:00:16 2008
New Revision: 24285

URL: http://svn.erp5.org?rev=24285&view=rev
Log:
Use thread local variable instead of volatile variable to keep memcached dict, otherwise it sometimes disappears and causes many connections to memcached.

Modified:
    erp5/trunk/products/ERP5Type/Tool/MemcachedTool.py

Modified: erp5/trunk/products/ERP5Type/Tool/MemcachedTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Tool/MemcachedTool.py?rev=24285&r1=24284&r2=24285&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Tool/MemcachedTool.py (original)
+++ erp5/trunk/products/ERP5Type/Tool/MemcachedTool.py Wed Oct 22 16:00:16 2008
@@ -26,6 +26,7 @@
 #
 ##############################################################################
 
+from threading import local
 from Products.ERP5Type.Tool.BaseTool import BaseTool
 from Products.ERP5Type import Permissions, _dtmldir
 from AccessControl import ClassSecurityInfo
@@ -62,6 +63,8 @@
   DELETE_ACTION = 'delete'
   MEMCACHED_MINIMUM_KEY_CHAR_ORD = ord(' ')
   
+  memcached_dict_pool = local()
+
   class MemcachedDict(TM):
     """
       Present memcached similarly to a dictionary (not all method are
@@ -266,10 +269,11 @@
         Return used memcached dict.
         Create it if does not exist.
       """
-      dictionary = getattr(self, '_v_memcached_dict', None)
-      if dictionary is None:
+      try:
+        dictionary = memcached_dict_pool.memcached_dict
+      except AttributeError:
         dictionary = MemcachedDict(self.getServerAddressList())
-        self._v_memcached_dict = dictionary
+        memcached_dict_pool.memcached_dict = dictionary
       return dictionary
   
     security.declareProtected(Permissions.AccessContentsInformation, 'getMemcachedDict')
@@ -290,8 +294,6 @@
         Set a memcached server address.
       """
       self.setServerAddressList([value, ])
-      self.server_address_list = [value, ]
-      self._v_memcached_dict = None
   
     security.declareProtected(Permissions.AccessContentsInformation, 'getServerAddress')
     def getServerAddress(self):
@@ -320,7 +322,10 @@
         to reconnect to memcached.
       """
       self.server_address_list = value
-      self._v_memcached_dict = None
+      try:
+        del(memcached_dict_pool.memcached_dict)
+      except AttributeError:
+        pass
 
 else:  
   # Placeholder memcache tool




More information about the Erp5-report mailing list