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

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

Re: [rdiff-backup-users] rdiff-backup, broken symlinks and python 2.4?


From: Alexander 'Leo' Bergolth
Subject: Re: [rdiff-backup-users] rdiff-backup, broken symlinks and python 2.4?
Date: Tue, 11 Nov 2008 15:43:01 +0100
User-agent: Thunderbird 2.0.0.14 (X11/20080501)

On 11/09/2008 10:54 AM, Andreas Olsson wrote:
On Sunday 09 November 2008 04:17:45 Andrew Ferguson wrote:
On Nov 8, 2008, at 9:04 PM, Andreas Olsson wrote:
When I upgraded my servers running Ubuntu 6.06 and Ubuntu 4.0 to use
s/Ubuntu 4.0/Debian 4.0/

Try updating your version of python-pyxattr. What *should* be
happening is that the extended attribute calls are working on the
symlink, and not the target of the symlink. Since the warning makes
sense if the later is happening (target of the symlink), I suspect a
bug in python-pyxattr or lower. (Or maybe older Ubuntu don't even
support xattr on symlink).

You are right, this is due to a bug in older versions of pyxattr. It seems to have been fixed in pyxattr 0.2.2. Unfortunately Ubuntu 6.06 and Debian 4.0 supplies slightly older versions; 0.2 and 0.2.1, that is.

When I installed the most recent version of pyxattr on an Ubuntu 6.06 system it had no trouble properly handling extended attributes on symlinks.

I'm also experiencing problems with extended attributes on symlinks.
rdiff-backup even dies with an exception because listxattr returns garbage on some symlinks. (See the attached debugger excerpt.)

Maybe there should be a way to turn off xattrs on symlinks for use on systems stuck with old versions of pyxattr?

Cheers,
--leo
--
e-mail   ::: Leo.Bergolth (at) wu-wien.ac.at
fax      ::: +43-1-31336-906050
location ::: Computer Center | Vienna University of Economics | Austria

Exception '[Errno 34] Numerical result out of range' raised of class 
'exceptions.IOError':
  File "/usr/lib/python2.4/site-packages/rdiff_backup/robust.py", line 32, in 
check_common_error
    try: return function(*args)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rpath.py", line 1123, in 
append
    return self.__class__(self.conn, self.base, self.index + (ext,))
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rpath.py", line 868, in 
__init__
    else: self.setdata()
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rpath.py", line 893, in 
setdata
    if self.lstat(): self.conn.rpath.setdata_local(self)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rpath.py", line 1470, in 
setdata_local
    if Globals.eas_conn: rpath.data['ea'] = ea_get(rpath)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/eas_acls.py", line 584, 
in rpath_ea_get
    ea.read_from_rp(rp)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/eas_acls.py", line 74, in 
read_from_rp
    try: self.attr_dict[attr] = rp.conn.xattr.getxattr(rp.path, attr, 
rp.issym())

Exception '[Errno 34] Numerical result out of range' raised of class 
'exceptions.IOError':
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 304, in 
error_check_Main
    try: Main(arglist)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 324, in 
Main
    take_action(rps)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 280, in 
take_action
    elif action == "backup": Backup(rps[0], rps[1])
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 343, in 
Backup
    backup.Mirror_and_increment(rpin, rpout, incdir)
  File "/usr/lib/python2.4/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.4/site-packages/rdiff_backup/backup.py", line 241, in 
patch_and_increment
    for diff in rorpiter.FillInIter(source_diffiter, dest_rpath):
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rorpiter.py", line 177, 
in FillInIter
    for rp in rpiter:
  File "/usr/lib/python2.4/site-packages/rdiff_backup/backup.py", line 103, in 
get_diffs
    for dest_sig in dest_sigiter:
  File "/usr/lib/python2.4/site-packages/rdiff_backup/backup.py", line 166, in 
get_sigs
    for src_rorp, dest_rorp in cls.CCPP:
  File "/usr/lib/python2.4/site-packages/rdiff_backup/backup.py", line 320, in 
next
    source_rorp, dest_rorp = self.iter.next()
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rorpiter.py", line 92, in 
Collate2Iters
    try: relem1 = riter1.next()
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rorpiter.py", line 342, 
in next
    next_elem = self.iter.next()
  File "/usr/lib/python2.4/site-packages/rdiff_backup/selection.py", line 132, 
in Iterate_fast
    try: rpath, val = diryield_stack[-1].next()
  File "/usr/lib/python2.4/site-packages/rdiff_backup/selection.py", line 120, 
in diryield
    rpath.append, (filename,))
  File "/usr/lib/python2.4/site-packages/rdiff_backup/robust.py", line 32, in 
check_common_error
    try: return function(*args)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rpath.py", line 1123, in 
append
    return self.__class__(self.conn, self.base, self.index + (ext,))
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rpath.py", line 868, in 
__init__
    else: self.setdata()
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rpath.py", line 893, in 
setdata
    if self.lstat(): self.conn.rpath.setdata_local(self)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rpath.py", line 1470, in 
setdata_local
    if Globals.eas_conn: rpath.data['ea'] = ea_get(rpath)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/eas_acls.py", line 584, 
in rpath_ea_get
    ea.read_from_rp(rp)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/eas_acls.py", line 74, in 
read_from_rp
    try: self.attr_dict[attr] = rp.conn.xattr.getxattr(rp.path, attr, 
rp.issym())

Traceback (most recent call last):
  File "/usr/bin/rdiff-backup", line 44, in ?
    rdiff_backup.Main.error_check_Main(sys.argv[1:])
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 304, in 
error_check_Main
    try: Main(arglist)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 324, in 
Main
    take_action(rps)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 280, in 
take_action
    elif action == "backup": Backup(rps[0], rps[1])
  File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 343, in 
Backup
    backup.Mirror_and_increment(rpin, rpout, incdir)
  File "/usr/lib/python2.4/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.4/site-packages/rdiff_backup/backup.py", line 241, in 
patch_and_increment
    for diff in rorpiter.FillInIter(source_diffiter, dest_rpath):
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rorpiter.py", line 177, 
in FillInIter
    for rp in rpiter:
  File "/usr/lib/python2.4/site-packages/rdiff_backup/backup.py", line 103, in 
get_diffs
    for dest_sig in dest_sigiter:
  File "/usr/lib/python2.4/site-packages/rdiff_backup/backup.py", line 166, in 
get_sigs
    for src_rorp, dest_rorp in cls.CCPP:
  File "/usr/lib/python2.4/site-packages/rdiff_backup/backup.py", line 320, in 
next
    source_rorp, dest_rorp = self.iter.next()
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rorpiter.py", line 92, in 
Collate2Iters
    try: relem1 = riter1.next()
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rorpiter.py", line 342, 
in next
    next_elem = self.iter.next()
  File "/usr/lib/python2.4/site-packages/rdiff_backup/selection.py", line 132, 
in Iterate_fast
    try: rpath, val = diryield_stack[-1].next()
  File "/usr/lib/python2.4/site-packages/rdiff_backup/selection.py", line 120, 
in diryield
    rpath.append, (filename,))
  File "/usr/lib/python2.4/site-packages/rdiff_backup/robust.py", line 32, in 
check_common_error
    try: return function(*args)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rpath.py", line 1123, in 
append
    return self.__class__(self.conn, self.base, self.index + (ext,))
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rpath.py", line 868, in 
__init__
    else: self.setdata()
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rpath.py", line 893, in 
setdata
    if self.lstat(): self.conn.rpath.setdata_local(self)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/rpath.py", line 1470, in 
setdata_local
    if Globals.eas_conn: rpath.data['ea'] = ea_get(rpath)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/eas_acls.py", line 584, 
in rpath_ea_get
    ea.read_from_rp(rp)
  File "/usr/lib/python2.4/site-packages/rdiff_backup/eas_acls.py", line 74, in 
read_from_rp
    try: self.attr_dict[attr] = rp.conn.xattr.getxattr(rp.path, attr, 
rp.issym())
IOError: [Errno 34] Numerical result out of range

> /usr/lib/python2.4/site-packages/rdiff_backup/eas_acls.py(79)read_from_rp()


(Pdb) rp.path
'/usr/share/man/man1/lpq.1.gz'
(Pdb) attr
''
(Pdb) rp.issym()
True
(Pdb) attr_list
('', '', '', '', '\xe0+\x90\xb7\xe0[\xf6\xb7)', '', '', 
'l\x16\xb2\t\xd4\\\xcf\t\xe41\xe5\t')
(Pdb) rp.conn.xattr.listxattr(rp.path, rp.issym())
('', '', '', '', '\xff\xff\xff\xff', '', '', '', ')', '', '', 
'\xdcd\x9f\t\x04\xea\x7f\t\xdcT\xf2\t')
(Pdb) rp.conn.xattr.listxattr(rp.path, False)
()

# getfattr -h -d /usr/share/man/man1/lpq.1.gz
# getfattr -d /usr/share/man/man1/lpq.1.gz

reply via email to

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