From 38f302883e8e08457f9e4fd93d4ecdb6dff77de2 Mon Sep 17 00:00:00 2001 From: ben Date: Fri, 31 May 2002 08:24:24 +0000 Subject: Added resuming bug fixes git-svn-id: http://svn.savannah.nongnu.org/svn/rdiff-backup/trunk@114 2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109 --- rdiff-backup/rdiff_backup/robust.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'rdiff-backup/rdiff_backup/robust.py') diff --git a/rdiff-backup/rdiff_backup/robust.py b/rdiff-backup/rdiff_backup/robust.py index d7040dc..fe1a316 100644 --- a/rdiff-backup/rdiff_backup/robust.py +++ b/rdiff-backup/rdiff_backup/robust.py @@ -1,4 +1,4 @@ -import tempfile, errno +import tempfile, errno, signal execfile("hardlink.py") ####################################################################### @@ -79,7 +79,7 @@ class RobustAction: class Robust: - """Contains various file operations made safer using tempfiles""" + """Contains various methods designed to make things safer""" null_action = RobustAction(None, None, None) def chain(*robust_action_list): """Return chain tying together a number of robust actions @@ -122,9 +122,9 @@ class Robust: final_vals.append(ra.final_func(init_val)) return final_vals def error(exc, ran_init, init_val): - for ra, init_val in zip(ras_with_started_inits, init_return_vals): + for ra, init_val in zip(ras_with_started_inits, init_vals): ra.error_handler(exc, 1, init_val) - for ra in ras_with_started_inits[len(init_return_vals):]: + for ra in ras_with_started_inits[len(init_vals):]: ra.error_handler(exc, None, None) return RobustAction(init, final, error) @@ -251,6 +251,10 @@ class Robust: 'ENOTDIR', 'ENAMETOOLONG', 'EINTR', 'ENOTEMPTY', 'EIO', 'ETXTBSY', 'ESRCH', 'EINVAL'])): Log.exception() + conn = Globals.backup_writer + if conn is not None: # increment error count + ITR_exists = conn.Globals.is_not_None('ITR') + if ITR_exists: conn.Globals.ITR.increment_stat('Errors') if error_handler: return error_handler(exc, *args) else: Log.exception(1, 2) @@ -265,9 +269,23 @@ class Robust: dir_listing.sort() return dir_listing + def signal_handler(signum, frame): + """This is called when signal signum is caught""" + raise SignalException(signum) + + def install_signal_handlers(): + """Install signal handlers on current connection""" + for signum in [signal.SIGQUIT, signal.SIGHUP, signal.SIGTERM]: + signal.signal(signum, Robust.signal_handler) + MakeStatic(Robust) +class SignalException(Exception): + """SignalException(signum) means signal signum has been received""" + pass + + class TracebackArchive: """Save last 10 caught exceptions, so they can be printed if fatal""" _traceback_strings = [] -- cgit v1.2.1