def onReceiveFail(self, failure):
e = failure.value
if isinstance(e, defer.CancelledError):
return
retry, level, msg = (False, None, None) # NOT USED.
self._errorMsgCheck(e.message)
# Handle errors on which we should retry the receive.
if 'OperationTimeout' in e.message:
retry, level, msg = (
True,
logging.DEBUG,
"OperationTimeout on {}"
.format(self.config.id))
elif isinstance(e, ConnectError):
retry, level, msg = (
isinstance(e, TimeoutError),
logging.WARN,
"network error on {}: {}"
.format(self.config.id, e.message or 'timeout'))
if isinstance(e, TimeoutError):
self.network_failures += 1
# Handle errors on which we should start over.
else:
retry, level, msg = (
False,
logging.WARN,
"receive failure on {}: {}"
.format(self.config.id, e))
if self.data_deferred and not self.data_deferred.called:
self.data_deferred.errback(failure)
LOG.log(level, msg)
if self.network_failures >= MAX_NETWORK_FAILURES:
yield self.stop()
self.reset()
if retry:
self.receive()
else:
yield self.restart()
defer.returnValue(None)
评论列表
文章目录