paramiko getting offset 0
John Arbash Meinel
john at arbash-meinel.com
Tue Jul 31 23:37:28 BST 2007
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi Robey-
I just spent some time on IRC debugging a knit corruption issue.
Basically, it seems like when we went to append to a .kndx it wrote to the
beginning of a file, rather than writing to the end.
I'm guessing that for some (very weird) reason the stat value returned length
0, or something else.
I was just thinking that for .kndx files, we know that they aren't 0 length if
we have succeeded in reading the header.
So if we go to append and it claims to be 0-bytes long, we know that it is wrong.
Do you think there is a reasonable way to either tell paramiko this, or detect
it somehow so that we can abort the append rather than writing to the wrong
location?
I see that BufferedFile has a ._size attribute.
So, theoretically in bzrlib.transport.sftp we could do:
fout = self._get_sftp().file(path, 'ab')
if mode is not None:
self._get_sftp().chmod(path, mode)
result = fout.tell()
if result == 0:
raise errors.BadMojo('we are appending to a file that claims it should
be empty, but we know it is not')
I don't think we should specifically do that, but I know that at the moment, we
use 'put_non_atomic' if we know that the file doesn't exist, and only use
'append' if we have already read it.
Maybe a 'file_not_empty' flag to append?
Having a .kndx file claim to be 0 length means that we corrupt it. So I would
like to try to be cautious.
John
=:->
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFGr7moJdeBCYSNAAMRApTvAJ44LGQBj9CJzHACIbE4O6Ka/9pWfwCgh846
lyGGRFmZ95cYKuq84h4Hfx4=
=35mC
-----END PGP SIGNATURE-----
More information about the bazaar
mailing list