[Top][All Lists]
[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