bugrdiff-backup - Bugs: bug #27121, rdiff-backup crashes if a file...

 
 

bug #27121: rdiff-backup crashes if a file handle is unexpectedly closed

Submitter:  Jérôme Poulin <ticpu>
Submitted:  Mon 27 Jul 2009 07:28:37 PM UTC
   
 
Category:  None Severity:  3 - Normal
Item Group:  None Status:  Wont Fix
Privacy:  Public Assigned to:  None
Open/Closed:  Closed
* Mandatory Fields

Add a New Comment Rich Markup
   

Mon 24 Feb 2020 02:59:30 PM UTC, comment #1: 

Sorry, but starting to care about people fiddling with gdb at run-time isn't going to happen. Closing.

Eric L. <ericzolf>
Group administrator
Mon 27 Jul 2009 07:28:37 PM UTC, original submission:  

I know it's not something common, but I was seeing a very big file being backed up and I didn't want to wait for the full transfer to finish, the backup was started a while ago so I didn't want to restart to include a new exclude, I entered python in gdb and closed the file handle, to my surprise, instead of just skipping the file, Python gave a nice backtrace (and finally I added an exclude.)
I guess a try/except should be added for IOErrors around those lines even if it's not something common so rdiff-backup can handle such case.

Processing changed file root/some/very/big/file
Exception '[Errno 9] Bad file descriptor' raised of class '<type 'exceptions.IOError'>':
  File "/usr/lib/python2.5/site-packages/rdiff_backup/robust.py", line 32, in check_common_error
    try: return function(*args)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 1415, in read
    def read(self, length = -1): return self.file.read(length)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/hash.py", line 47, in read
    buf = self.fileobj.read(length)

Sending back exception [Errno 9] Bad file descriptor of type <type 'exceptions.IOError'>:
  File "/usr/lib/python2.5/site-packages/rdiff_backup/connection.py", line 335, in answer_request
    result = apply(eval(request.function_string), argument_list)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/connection.py", line 485, in readfromid
    if length is None: return cls.vfiles[id].read()
  File "/usr/lib/python2.5/site-packages/rdiff_backup/iterfile.py", line 302, in read
    if not self.addtobuffer(): break
  File "/usr/lib/python2.5/site-packages/rdiff_backup/iterfile.py", line 318, in addtobuffer
    self.addfromfile("c")
  File "/usr/lib/python2.5/site-packages/rdiff_backup/iterfile.py", line 224, in addfromfile
    [Globals.blocksize])
  File "/usr/lib/python2.5/site-packages/rdiff_backup/robust.py", line 32, in check_common_error
    try: return function(*args)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 1415, in read
    def read(self, length = -1): return self.file.read(length)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/hash.py", line 47, in read
    buf = self.fileobj.read(length)

Exception '[Errno 9] Bad file descriptor' raised of class '<type 'exceptions.IOError'>':
  File "/usr/lib/python2.5/site-packages/rdiff_backup/robust.py", line 32, in check_common_error
    try: return function(*args)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 105, in copy
    if rpin.isreg(): return copy_reg_file(rpin, rpout, compress)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 133, in copy_reg_file
    return rpout.write_from_fileobj(rpin.open("rb"), compress = compress)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 1195, in write_from_fileobj
    copyfileobj(fp, outfp)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 62, in copyfileobj
    inbuf = inputfp.read(blocksize)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 1415, in read
    def read(self, length = -1): return self.file.read(length)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/iterfile.py", line 118, in read
    if not self.addtobuffer(): break
  File "/usr/lib/python2.5/site-packages/rdiff_backup/iterfile.py", line 133, in addtobuffer
    type, data = self.iwf._get()
  File "/usr/lib/python2.5/site-packages/rdiff_backup/iterfile.py", line 414, in _get
    if not self.buf: self.buf += self.file.read()
  File "/usr/lib/python2.5/site-packages/rdiff_backup/connection.py", line 518, in read
    return self.connection.VirtualFile.readfromid(self.id, length)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/connection.py", line 450, in _call_
    return apply(self.connection.reval, (self.name,) + args)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/connection.py", line 370, in reval
    if isinstance(result, Exception): raise result

Sending back exception [Errno 9] Bad file descriptor of type <type 'exceptions.IOError'>:
  File "/usr/lib/python2.5/site-packages/rdiff_backup/connection.py", line 335, in answer_request
    result = apply(eval(request.function_string), argument_list)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/backup.py", line 243, in patch_and_increment
    ITR(diff.index, diff)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/rorpiter.py", line 281, in _call_
    last_branch.fast_process(*args)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/backup.py", line 692, in fast_process
    if self.patch_to_temp(mirror_rp, diff_rorp, tf):
  File "/usr/lib/python2.5/site-packages/rdiff_backup/backup.py", line 553, in patch_to_temp
    result = self.patch_snapshot_to_temp(diff_rorp, new)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/backup.py", line 582, in patch_snapshot_to_temp
    (diff_rorp, new))
  File "/usr/lib/python2.5/site-packages/rdiff_backup/robust.py", line 32, in check_common_error
    try: return function(*args)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 105, in copy
    if rpin.isreg(): return copy_reg_file(rpin, rpout, compress)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 133, in copy_reg_file
    return rpout.write_from_fileobj(rpin.open("rb"), compress = compress)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 1195, in write_from_fileobj
    copyfileobj(fp, outfp)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 62, in copyfileobj
    inbuf = inputfp.read(blocksize)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 1415, in read
    def read(self, length = -1): return self.file.read(length)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/iterfile.py", line 118, in read
    if not self.addtobuffer(): break
  File "/usr/lib/python2.5/site-packages/rdiff_backup/iterfile.py", line 133, in addtobuffer
    type, data = self.iwf._get()
  File "/usr/lib/python2.5/site-packages/rdiff_backup/iterfile.py", line 414, in _get
    if not self.buf: self.buf += self.file.read()
  File "/usr/lib/python2.5/site-packages/rdiff_backup/connection.py", line 518, in read
    return self.connection.VirtualFile.readfromid(self.id, length)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/connection.py", line 450, in _call_
    return apply(self.connection.reval, (self.name,) + args)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/connection.py", line 370, in reval
    if isinstance(result, Exception): raise result

Exception '[Errno 9] Bad file descriptor' raised of class '<type 'exceptions.IOError'>':
  File "/usr/lib/python2.5/site-packages/rdiff_backup/Main.py", line 304, in error_check_Main
    try: Main(arglist)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/Main.py", line 324, in Main
    take_action(rps)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/Main.py", line 280, in take_action
    elif action == "backup": Backup(rps[0], rps[1])
  File "/usr/lib/python2.5/site-packages/rdiff_backup/Main.py", line 343, in Backup
    backup.Mirror_and_increment(rpin, rpout, incdir)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/backup.py", line 51, in Mirror_and_increment
    DestS.patch_and_increment(dest_rpath, source_diffiter, inc_rpath)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/connection.py", line 450, in _call_
    return apply(self.connection.reval, (self.name,) + args)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/connection.py", line 370, in reval
    if isinstance(result, Exception): raise result

Traceback (most recent call last):
  File "/usr/bin/rdiff-backup", line 30, in <module>
    rdiff_backup.Main.error_check_Main(sys.argv[1:])
  File "/usr/lib/python2.5/site-packages/rdiff_backup/Main.py", line 304, in error_check_Main
    try: Main(arglist)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/Main.py", line 324, in Main
    take_action(rps)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/Main.py", line 280, in take_action
    elif action == "backup": Backup(rps[0], rps[1])
  File "/usr/lib/python2.5/site-packages/rdiff_backup/Main.py", line 343, in Backup
    backup.Mirror_and_increment(rpin, rpout, incdir)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/backup.py", line 51, in Mirror_and_increment
    DestS.patch_and_increment(dest_rpath, source_diffiter, inc_rpath)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/connection.py", line 450, in _call_
    return apply(self.connection.reval, (self.name,) + args)
  File "/usr/lib/python2.5/site-packages/rdiff_backup/connection.py", line 370, in reval
    if isinstance(result, Exception): raise result
IOError: [Errno 9] Bad file descriptor
Fatal Error: Lost connection to the remote system

Jérôme Poulin <ticpu>

 

(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach Files:
   
   
Comment:
   

No files currently attached

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -email is unavailable- added by ericzolf (Posted a comment)
  • -email is unavailable- added by ticpu (Submitted the item)
  •  

    There are 0 votes so far. Votes easily highlight which items people would like to see resolved in priority, independently of the priority of the item set by tracker managers.

    Only logged-in users can vote.

     

    Follow 2 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2020-02-24 ericzolf StatusNone Wont Fix
        Open/ClosedOpen Closed

    Back to the top

    Powered by Savane 3.13-4448.
    Corresponding source code