[Erp5-report] r39557 kazuhiko - in /erp5/trunk/products/ERP5Type: Tool/ patches/
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Oct 27 11:48:24 CEST 2010
Author: kazuhiko
Date: Wed Oct 27 11:48:21 2010
New Revision: 39557
URL: http://svn.erp5.org?rev=39557&view=rev
Log:
memcache.Client._get() should raises an Exception instead of returning None, in case of connection errors or missing values.
Modified:
erp5/trunk/products/ERP5Type/Tool/MemcachedTool.py
erp5/trunk/products/ERP5Type/patches/memcache_client.py
Modified: erp5/trunk/products/ERP5Type/Tool/MemcachedTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Tool/MemcachedTool.py?rev=39557&r1=39556&r2=39557&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Tool/MemcachedTool.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/Tool/MemcachedTool.py [utf8] Wed Oct 27 11:48:21 2010
@@ -171,12 +171,11 @@ if memcache is not None:
encoded_key = encodeKey(key)
result = self.local_cache.get(key, MARKER)
if result is MARKER:
- result = self.memcached_connection.get(encoded_key)
- if result is None:
+ try:
+ result = self.memcached_connection.get(encoded_key)
+ except memcache.Client.MemcachedConnectionError:
self._initialiseConnection()
result = self.memcached_connection.get(encoded_key)
- if result is None:
- raise KeyError, 'Key %s (was %s) not found.' % (encoded_key, key)
self.local_cache[key] = result
return result
Modified: erp5/trunk/products/ERP5Type/patches/memcache_client.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/patches/memcache_client.py?rev=39557&r1=39556&r2=39557&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/patches/memcache_client.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/patches/memcache_client.py [utf8] Wed Oct 27 11:48:21 2010
@@ -1,11 +1,11 @@
# -*- coding: utf-8 -*-
# Code based on python-memcached-1.45
try:
- import memcache
+ from memcache import _Host, Client, _Error
except ImportError:
pass
else:
- memcache._Host._SOCKET_TIMEOUT = 10 # wait more than 3s is safe
+ _Host._SOCKET_TIMEOUT = 10 # wait more than 3s is safe
# always return string
# https://bugs.launchpad.net/python-memcached/+bug/509712
def readline(self):
@@ -20,8 +20,52 @@ else:
self.mark_dead('Connection closed while reading from %s'
% repr(self))
self.buffer = ''
- return '' #None
+ # (patch)
+ # return None
+ return ''
buf += data
self.buffer = buf[index+2:]
return buf[:index]
- memcache._Host.readline = readline
+ _Host.readline = readline
+
+ # Client._get() should raises an Exception instead of returning
+ # None, in case of connection errors or missing values.
+ class MemcachedConnectionError(Exception):
+ pass
+ Client.MemcachedConnectionError = MemcachedConnectionError
+
+ import socket
+ def _get(self, cmd, key):
+ self.check_key(key)
+ server, key = self._get_server(key)
+ if not server:
+ # (patch)
+ # return None
+ raise MemcachedConnectionError
+ self._statlog(cmd)
+
+ try:
+ server.send_cmd("%s %s" % (cmd, key))
+ rkey = flags = rlen = cas_id = None
+ if cmd == 'gets':
+ rkey, flags, rlen, cas_id, = self._expect_cas_value(server)
+ if rkey:
+ self.cas_ids[rkey] = cas_id
+ else:
+ rkey, flags, rlen, = self._expectvalue(server)
+
+ if not rkey:
+ # (patch)
+ # return None
+ raise KeyError
+ value = self._recv_value(server, flags, rlen)
+ server.expect("END")
+ except (_Error, socket.error), msg:
+ if isinstance(msg, tuple): msg = msg[1]
+ server.mark_dead(msg)
+ # (patch)
+ # return None
+ raise MemcachedConnectionError
+ return value
+
+ Client._get = _get
More information about the Erp5-report
mailing list