From 3f6a251faf324209247a868c91a9bacdea427db1 Mon Sep 17 00:00:00 2001 From: bescoto Date: Sat, 19 Nov 2005 03:10:03 +0000 Subject: Error reporting cleanup git-svn-id: http://svn.savannah.nongnu.org/svn/rdiff-backup/trunk@684 2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109 --- rdiff-backup/rdiff_backup/connection.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'rdiff-backup/rdiff_backup/connection.py') diff --git a/rdiff-backup/rdiff_backup/connection.py b/rdiff-backup/rdiff_backup/connection.py index 99b8f72..dadbcd5 100644 --- a/rdiff-backup/rdiff_backup/connection.py +++ b/rdiff-backup/rdiff_backup/connection.py @@ -31,6 +31,7 @@ except ImportError: pass class ConnectionError(Exception): pass class ConnectionReadError(ConnectionError): pass +class ConnectionWriteError(ConnectionError): pass class ConnectionQuit(Exception): pass @@ -197,14 +198,17 @@ class LowLevelPipeConnection(Connection): def _write(self, headerchar, data, req_num): """Write header and then data to the pipe""" - self.outpipe.write(headerchar + chr(req_num) + - C.long2str(long(len(data)))) - self.outpipe.write(data) - self.outpipe.flush() + try: + self.outpipe.write(headerchar + chr(req_num) + + C.long2str(long(len(data)))) + self.outpipe.write(data) + self.outpipe.flush() + except IOError: raise ConnectionWriteError() def _read(self, length): """Read length bytes from inpipe, returning result""" - return self.inpipe.read(length) + try: return self.inpipe.read(length) + except IOError: raise ConnectionReadError() def _s2l_old(self, s): """Convert string to long int""" @@ -228,11 +232,9 @@ class LowLevelPipeConnection(Connection): if not len(header_string) == 9: raise ConnectionReadError("Truncated header string (problem " "probably originated remotely)") - try: - format_string, req_num, length = (header_string[0], - ord(header_string[1]), - C.str2long(header_string[2:])) - except IndexError: raise ConnectionError() + format_string, req_num, length = (header_string[0], + ord(header_string[1]), + C.str2long(header_string[2:])) if format_string == "q": raise ConnectionQuit("Received quit signal") data = self._read(length) @@ -337,6 +339,8 @@ class PipeConnection(LowLevelPipeConnection): def extract_exception(self): """Return active exception""" + if robust.is_routine_fatal(sys.exc_info()[1]): + raise # Fatal error--No logging necessary, but connection down if log.Log.verbosity >= 5 or log.Log.term_verbosity >= 5: log.Log("Sending back exception %s of type %s: \n%s" % (sys.exc_info()[1], sys.exc_info()[0], -- cgit v1.2.1