From c9b77a973e1018d47a85b0bfbc9cdf07a1997b4a Mon Sep 17 00:00:00 2001 From: Rafael Monnerat <rafael@nexedi.com> Date: Fri, 10 Aug 2012 19:06:38 +0900 Subject: [PATCH] Set socket timeout for taskdistributions RPC calls If socket timeout is not set the call can never receive a response and system become locked for ever waiting a reply from task distribution server. --- erp5/util/taskdistribution/__init__.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/erp5/util/taskdistribution/__init__.py b/erp5/util/taskdistribution/__init__.py index baa60353a5..2891dcd8ab 100644 --- a/erp5/util/taskdistribution/__init__.py +++ b/erp5/util/taskdistribution/__init__.py @@ -95,16 +95,21 @@ def patchRPCParser(error_handler): parser_klass.feed = verbose_feed class RPCRetry(object): - def __init__(self, proxy, retry_time, logger): + def __init__(self, proxy, retry_time, logger, timeout=120): super(RPCRetry, self).__init__() self._proxy = proxy self._retry_time = retry_time self._logger = logger self.__rpc_lock = threading.Lock() + self.timeout = timeout def _RPC(self, func_id, args=()): - with self.__rpc_lock: - return getattr(self._proxy, func_id)(*args) + default_timeout = socket.getdefaulttimeout() + socket.setdefaulttimeout(self.timeout) + try: + return getattr(self._proxy, func_id)(*args) + finally: + socket.setdefaulttimeout(default_timeout) def _retryRPC(self, func_id, args=()): retry_time = self._retry_time -- 2.30.9