[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