From b5dcf3392a5489c3221aa3f191ab49b324e7ac91 Mon Sep 17 00:00:00 2001 From: Kiall Mac Innes Date: Fri, 21 Jun 2013 13:30:53 +0100 Subject: [PATCH] Handle publication failures in the TCP transport correctly --- beaver/transports/tcp_transport.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/beaver/transports/tcp_transport.py b/beaver/transports/tcp_transport.py index bfb1075d..1b7a0bd6 100644 --- a/beaver/transports/tcp_transport.py +++ b/beaver/transports/tcp_transport.py @@ -1,8 +1,10 @@ # -*- coding: utf-8 -*- import socket +import errno import time from beaver.transports.base_transport import BaseTransport +from beaver.transports.exception import TransportException class TcpTransport(BaseTransport): @@ -51,5 +53,18 @@ def callback(self, filename, lines, **kwargs): if kwargs.get('timestamp', False): del kwargs['timestamp'] - for line in lines: - self._sock.send(self.format(filename, line, timestamp, **kwargs) + "\n") + try: + for line in lines: + self._sock.send(self.format(filename, line, timestamp, **kwargs) + "\n") + except socket.error, e: + self.invalidate() + + if isinstance(e.args, tuple): + if e[0] == errno.EPIPE: + raise TransportException('Connection appears to have been lost') + + raise TransportException('Socket Error: %s', e.args) + except Exception: + self.invalidate() + + raise TransportException('Unspecified exception encountered') # TRAP ALL THE THINGS!