rdiff-backup-bugs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Rdiff-backup-bugs] [bug #27121] rdiff-backup crashes if a file handle i


From: Jérôme Poulin
Subject: [Rdiff-backup-bugs] [bug #27121] rdiff-backup crashes if a file handle is unexpectedly closed
Date: Mon, 27 Jul 2009 19:28:38 +0000
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1

URL:
  <http://savannah.nongnu.org/bugs/?27121>

                 Summary: rdiff-backup crashes if a file handle is
unexpectedly closed
                 Project: rdiff-backup
            Submitted by: ticpu
            Submitted on: Mon 27 Jul 2009 07:28:37 PM GMT
                Category: None
                Severity: 3 - Normal
              Item Group: None
                  Status: None
                 Privacy: Public
             Assigned to: None
             Open/Closed: Open
         Discussion Lock: Any

    _______________________________________________________

Details:

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





    _______________________________________________________

Reply to this item at:

  <http://savannah.nongnu.org/bugs/?27121>

_______________________________________________
  Message sent via/by Savannah
  http://savannah.nongnu.org/





reply via email to

[Prev in Thread] Current Thread [Next in Thread]