fails to run after interrupted second backup

Bug #105310 reported by Mark Edgington
4
Affects Status Importance Assigned to Milestone
rdiff-backup (Ubuntu)
Fix Released
Undecided
Unassigned

Bug Description

Binary package hint: rdiff-backup

Running version 1.1.5 (edgy). I sucessfully completed an initial backup to a remote server via SSH. Later, I started another (incremental) backup to the same destination. This was interrupted (probably due to a network problem). Any subsequent attempts to perform a backup to this destination result in the following stacktrace, which occurs soon after starting the command (maybe 15 seconds or so):

Executing ssh -C backupserver rdiff-backup --server
Unable to import module posix1e from pylibacl package.
ACLs not supported on filesystem at /
-----------------------------------------------------------------
Detected abilities for source (read only) file system:
  Access control lists Off
  Extended attributes On
  Case sensitivity On
  Mac OS X style resource forks Off
  Mac OS X Finder information Off
-----------------------------------------------------------------
ACLs not supported by filesystem at rdiff_backups/waldo3/rdiff-backup-data/rdiff-backup.tmp.0
-----------------------------------------------------------------
Detected abilities for destination (read/write) file system:
  Ownership changing Off
  Hard linking On
  fsync() directories On
  Directory inc permissions On
  High-bit permissions On
  Extended filenames On
  Access control lists Off
  Extended attributes On
  Case sensitivity On
  Mac OS X style resource forks Off
  Mac OS X Finder information Off
-----------------------------------------------------------------
Exception '' raised of class 'exceptions.AssertionError':
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 295, in error_check_Main
    try: Main(arglist)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 315, in Main
    take_action(rps)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 271, in take_action
    elif action == "backup": Backup(rps[0], rps[1])
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 328, in Backup
    backup_final_init(rpout)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 425, in backup_final_init
    checkdest_if_necessary(rpout)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 820, in checkdest_if_necessary
    need_check = checkdest_need_check(dest_rp)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 810, in checkdest_need_check
    if not force: curmir_incs[0].conn.regress.check_pids(curmir_incs)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/connection.py", line 448, in __call__
    return apply(self.connection.reval, (self.name,) + args)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/connection.py", line 367, in reval
    for arg in args: self._put(arg, req_num)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/connection.py", line 139, in _put
    else: self._putobj(obj, req_num)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/connection.py", line 144, in _putobj
    self._write("o", pickle.dumps(obj, 1), req_num)
  File "pickle.py", line 1386, in dumps
    Pickler(file, protocol, bin).dump(obj)
  File "pickle.py", line 231, in dump
    self.save(obj)
  File "pickle.py", line 293, in save
    f(self, obj) # Call unbound method with explicit self
  File "pickle.py", line 614, in save_list
    self._batch_appends(iter(obj))
  File "pickle.py", line 647, in _batch_appends
    save(x)
  File "pickle.py", line 293, in save
    f(self, obj) # Call unbound method with explicit self
  File "pickle.py", line 737, in save_inst
    stuff = getstate()
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rpath.py", line 754, in __getstate__
    assert self.conn is Globals.local_connection

Traceback (most recent call last):
  File "/usr/bin/rdiff-backup", line 23, in ?
    rdiff_backup.Main.error_check_Main(sys.argv[1:])
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 295, in error_check_Main
    try: Main(arglist)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 315, in Main
    take_action(rps)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 271, in take_action
    elif action == "backup": Backup(rps[0], rps[1])
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 328, in Backup
    backup_final_init(rpout)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 425, in backup_final_init
    checkdest_if_necessary(rpout)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 820, in checkdest_if_necessary
    need_check = checkdest_need_check(dest_rp)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 810, in checkdest_need_check
    if not force: curmir_incs[0].conn.regress.check_pids(curmir_incs)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/connection.py", line 448, in __call__
    return apply(self.connection.reval, (self.name,) + args)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/connection.py", line 367, in reval
    for arg in args: self._put(arg, req_num)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/connection.py", line 139, in _put
    else: self._putobj(obj, req_num)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/connection.py", line 144, in _putobj
    self._write("o", pickle.dumps(obj, 1), req_num)
  File "/usr/lib/python2.4/pickle.py", line 1386, in dumps
    Pickler(file, protocol, bin).dump(obj)
  File "/usr/lib/python2.4/pickle.py", line 231, in dump
    self.save(obj)
  File "/usr/lib/python2.4/pickle.py", line 293, in save
    f(self, obj) # Call unbound method with explicit self
  File "/usr/lib/python2.4/pickle.py", line 614, in save_list
    self._batch_appends(iter(obj))
  File "/usr/lib/python2.4/pickle.py", line 647, in _batch_appends
    save(x)
  File "/usr/lib/python2.4/pickle.py", line 293, in save
    f(self, obj) # Call unbound method with explicit self
  File "/usr/lib/python2.4/pickle.py", line 737, in save_inst
    stuff = getstate()
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rpath.py", line 754, in __getstate__
    assert self.conn is Globals.local_connection
AssertionError
Fatal Error: Lost connection to the remote system
----------------------------------------

If I change the target directory to something different, then it works again, beginning to backup everything from the beginning. It seems that rdiff-backup should be a bit more robust against connection failures, so as to allow a user to resume where the backup was interrupted from.

Revision history for this message
Andrew Ferguson (adferguson) wrote :

This bug was fixed upstream in CVS on July 8, 2007. It will be fixed in rdiff-backup 1.1.12 and subsequent releases. The use of the --force option is a workaround for this problem.

Revision history for this message
Henrik Nilsen Omma (henrik) wrote :

Fixed upstream in version 1.1.12. --> Hardy now ships with 1.1.14, so I'm assuming we now have the upstream fix. Please reopen if you can confirm this bug on Hardy.

Changed in rdiff-backup:
status: New → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.