bzr log http+urllib does not work, http+pycurl is too slow
Vincent Ladeuil
v.ladeuil+lp at free.fr
Tue Dec 11 20:30:36 GMT 2007
>>>>> "vila" == Vincent Ladeuil <v.ladeuil+lp at free.fr> writes:
>>>>> "bialix" == Alexander Belchenko <bialix at ukr.net> writes:
bialix> I have Trac running as separate python application on separate
bialix> win32 machine.
bialix> I put pack shared repo in the Trac's htdocs directory, so my branches are
bialix> available via http protocol (I use custom port 8000).
bialix> Well, at least `bzr revno http://host:8000/chrome/site/branches/Logic` works
bialix> as expected. But not log command.
bialix> On my client machine I use custom bzr.exe 1.0rc3 compiled without pycurl, so
bialix> I encounter this bug.
vila> <snip/>
bialix> http readv of 930af4714be1e33318bb630b8d626540.pack offsets =>
vila> Using -Dhttp will give us the true ranges requested.
bialix> 14 collapsed 5
bialix> Traceback (most recent call last):
bialix> File "bzrlib\commands.pyc", line 802, in run_bzr_catch_errors
bialix> File "bzrlib\commands.pyc", line 758, in run_bzr
bialix> File "bzrlib\commands.pyc", line 492, in run_argv_aliases
bialix> File "bzrlib\commands.pyc", line 768, in ignore_pipe
bialix> File "bzrlib\builtins.pyc", line 1750, in run
bialix> File "bzrlib\log.pyc", line 189, in show_log
bialix> File "bzrlib\log.pyc", line 303, in _show_log
bialix> File "bzrlib\log.pyc", line 290, in iter_revisions
bialix> File "bzrlib\decorators.pyc", line 127, in read_locked
bialix> File "bzrlib\repository.pyc", line 1003, in get_revisions
bialix> File "bzrlib\decorators.pyc", line 127, in read_locked
bialix> File "bzrlib\repository.pyc", line 1012, in _get_revisions
bialix> File "bzrlib\store\revision\knit.pyc", line 88, in get_revisions
bialix> File "bzrlib\store\revision\knit.pyc", line 104, in
bialix> _get_serialized_revisions
bialix> File "bzrlib\knit.pyc", line 1062, in get_texts
bialix> File "bzrlib\knit.pyc", line 1068, in get_line_list
bialix> File "bzrlib\knit.pyc", line 1086, in _get_content_maps
bialix> File "bzrlib\knit.pyc", line 1051, in _get_record_map
bialix> File "bzrlib\knit.pyc", line 2426, in read_records_iter
bialix> File "bzrlib\knit.pyc", line 2033, in get_raw_records
bialix> File "bzrlib\pack.pyc", line 253, in iter_records
bialix> File "bzrlib\pack.pyc", line 294, in _read_format
bialix> File "bzrlib\pack.pyc", line 221, in _read_line
bialix> File "bzrlib\pack.pyc", line 185, in readline
bialix> File "bzrlib\pack.pyc", line 172, in _next
bialix> File "bzrlib\transport\http\__init__.pyc", line 236, in _readv
bialix> File "bzrlib\transport\http\__init__.pyc", line 318, in _coalesce_readv
bialix> File "bzrlib\transport\http\__init__.pyc", line 281, in get_and_yield
bialix> File "bzrlib\transport\http\_urllib.pyc", line 135, in _get
bialix> File "bzrlib\transport\http\_urllib.pyc", line 75, in _perform
bialix> File "bzrlib\transport\http\_urllib2_wrappers.pyc", line 170,
bialix> in cleanup_pipe
vila> Aaargh. Since we use a persistent connection we have to read
vila> unprocessed bytes left on the socket.
vila> Can you try this patch:
<snip/>
Of course I meant:
=== modified file 'bzrlib/transport/http/_urllib2_wrappers.py'
--- bzrlib/transport/http/_urllib2_wrappers.py 2007-12-06 22:46:16 +0000
+++ bzrlib/transport/http/_urllib2_wrappers.py 2007-12-11 20:29:31 +0000
@@ -134,7 +134,15 @@
"""
if not self.isclosed():
# Make sure nothing was left to be read on the socket
- data = self.read(self.length)
+ pending = 0
+ while self.length and self.length > 1024:
+ data = self.read(1024)
+ pending += len(data)
+ if self.length:
+ self.read(self.length)
+ pending += len(data)
+ if pending:
+ trace.mutter('%s bytes left on the socket', pending)
self.close()
Vincent
More information about the bazaar
mailing list