Tentative fix for usehttp2=true

Peter Arrenbrecht peter.arrenbrecht at gmail.com
Thu May 12 15:06:10 CDT 2011


On Thu, May 12, 2011 at 9:59 PM, Peter Arrenbrecht
<peter.arrenbrecht at gmail.com> wrote:
> Here's another failure with the final pushkey request when cloning thg
> from bitbucket:
>
> $ hg clone https://bitbucket.org/tortoisehg/thg/ /tmp/cloned --config
> ui.usehttp2=true --config ui.http2debuglevel=debug
> ...
> reading remaining 6647 of existing chunk
> looping with 7 data remaining
> reading chunk of length 0
> looping with 2 data remaining
> added 11737 changesets with 17160 changes to 1363 files (+1 heads)
> updating to branch default
> 735 files updated, 0 files merged, 0 files removed, 0 files unresolved
> sending GET request for
> /tortoisehg/thg/?cmd=listkeys&namespace=bookmarks to bitbucket.org on
> port 443
> socket appears closed in read
> response read 0 data during _select
> ** unknown exception encountered, please report by visiting
> **  http://mercurial.selenic.com/wiki/BugTracker
> ** Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56) [GCC 4.4.5]
> ** Mercurial Distributed SCM (version 1.8.3+149-7ebdbef38406)
> ** Extensions loaded:
> Traceback (most recent call last):
>  File "./hg", line 38, in <module>
>    mercurial.dispatch.run()
>  File "/home/peo/dev/hg/dev-crew/mercurial/dispatch.py", line 16, in run
>    sys.exit(dispatch(sys.argv[1:]))
>  File "/home/peo/dev/hg/dev-crew/mercurial/dispatch.py", line 36, in dispatch
>    return _runcatch(u, args)
>  File "/home/peo/dev/hg/dev-crew/mercurial/dispatch.py", line 58, in _runcatch
>    return _dispatch(ui, args)
>  File "/home/peo/dev/hg/dev-crew/mercurial/dispatch.py", line 613, in _dispatch
>    cmdpats, cmdoptions)
>  File "/home/peo/dev/hg/dev-crew/mercurial/dispatch.py", line 418, in
> runcommand
>    ret = _runcommand(ui, options, cmd, d)
>  File "/home/peo/dev/hg/dev-crew/mercurial/dispatch.py", line 667, in
> _runcommand
>    return checkargs()
>  File "/home/peo/dev/hg/dev-crew/mercurial/dispatch.py", line 621, in checkargs
>    return cmdfunc()
>  File "/home/peo/dev/hg/dev-crew/mercurial/dispatch.py", line 610, in <lambda>
>    d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
>  File "/home/peo/dev/hg/dev-crew/mercurial/util.py", line 385, in check
>    return func(*args, **kwargs)
>  File "/home/peo/dev/hg/dev-crew/mercurial/commands.py", line 1034, in clone
>    branch=opts.get('branch'))
>  File "/home/peo/dev/hg/dev-crew/mercurial/hg.py", line 362, in clone
>    rb = src_repo.listkeys('bookmarks')
>  File "/home/peo/dev/hg/dev-crew/mercurial/wireproto.py", line 103, in listkeys
>    d = self._call("listkeys", namespace=encoding.fromlocal(namespace))
>  File "/home/peo/dev/hg/dev-crew/mercurial/httprepo.py", line 162, in _call
>    fp = self._callstream(cmd, **args)
>  File "/home/peo/dev/hg/dev-crew/mercurial/httprepo.py", line 113, in
> _callstream
>    resp = self.urlopener.open(req)
>  File "/usr/lib/python2.6/urllib2.py", line 391, in open
>    response = self._open(req, data)
>  File "/usr/lib/python2.6/urllib2.py", line 409, in _open
>    '_open', req)
>  File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
>    result = func(*args)
>  File "/home/peo/dev/hg/dev-crew/mercurial/httpconnection.py", line
> 230, in https_open
>    return self.do_open(self._makesslconnection, req)
>  File "/home/peo/dev/hg/dev-crew/mercurial/httpconnection.py", line
> 201, in do_open
>    r = h.getresponse()
>  File "/home/peo/dev/hg/dev-crew/mercurial/httpclient/__init__.py",
> line 644, in getresponse
>    r._select()
>  File "/home/peo/dev/hg/dev-crew/mercurial/httpclient/__init__.py",
> line 178, in _select
>    self._load_response(self._end_headers)
>  File "/home/peo/dev/hg/dev-crew/mercurial/httpclient/__init__.py",
> line 261, in _load_response
>    http_ver, status = hdrs.split(' ', 1)
> ValueError: need more than 1 value to unpack
> closed connection to bitbucket.org on 443
>

But the same thing works for a smaller repo (or for some other
reason), and here there is no "socket appears closed in read":

reading remaining 124 of existing chunk
looping with 11764 data remaining
reading chunk of length 11749
looping with 7 data remaining
reading chunk of length 0
looping with 2 data remaining
added 227 changesets with 414 changes to 30 files
updating to branch default
29 files updated, 0 files merged, 0 files removed, 0 files unresolved
sending GET request for
/parren/hg-pbranch?cmd=listkeys&namespace=bookmarks to bitbucket.org
on port 443
sent 184
response read 235 data during _select
looping with 5 data remaining
reading chunk of length 0
looping with 2 data remaining
closed connection to bitbucket.org on 443

-parren

> On Thu, May 12, 2011 at 9:24 PM, Peter Arrenbrecht
> <peter.arrenbrecht at gmail.com> wrote:
>> On Thu, May 12, 2011 at 7:12 PM, Augie Fackler <durin42 at gmail.com> wrote:
>>> For anyone experiencing the ssl defect, I've got a proposed fix out
>>> for review at http://codereview.appspot.com/4532054/. If that works,
>>> I'll push it to py-nonblocking-http and mail the corresponding change
>>> for Mercurial. I'd like someone to test this that was experiencing the
>>> defect, since I can't reproduce it myself (but I think I got unit
>>> tests that are about right).
>>
>> Works for me. Thanks,
>> -parren
>>
>>> On Wed, May 11, 2011 at 7:34 AM, Peter Arrenbrecht
>>> <peter.arrenbrecht at gmail.com> wrote:
>>>> On Wed, May 11, 2011 at 2:20 PM, Peter Arrenbrecht
>>>> <peter.arrenbrecht at gmail.com> wrote:
>>>>> On Wed, May 11, 2011 at 2:19 PM, Peter Arrenbrecht
>>>>> <peter.arrenbrecht at gmail.com> wrote:
>>>>>> On Wed, May 11, 2011 at 2:17 PM, Augie Fackler <durin42 at gmail.com> wrote:
>>>>>>>
>>>>>>> On May 11, 2011, at 7:16 AM, Peter Arrenbrecht wrote:
>>>>>>>
>>>>>>>> On Wed, May 11, 2011 at 2:13 PM, Augie Fackler <durin42 at gmail.com> wrote:
>>>>>>>>> Wow, I'm dumb. I'll get a test and fix (probably what you posted) into the upstream library and then get it imported back into hg.
>>>>>>>>
>>>>>>>> Please also look into the read error I mentioned on IRC:
>>>>>>>> http://paste.pocoo.org/show/386790/
>>>>>>>> -parren
>>>>>>>
>>>>>>> Was this repeatable consistently?
>>>>>>
>>>>>> Was and still is. ;)
>>>>>> -parren
>>>>>
>>>>> Saw this with pull/incoming from Bitbucket and on a fresh clone of
>>>>> oplop from Google Code.
>>>>
>>>> Better stack trace here:
>>>>
>>>> using https://bitbucket.org/tortoisehg/thg
>>>> sending capabilities command
>>>> warning: bitbucket.org certificate with fingerprint
>>>> 81:2b:08:90:dc:d3:71:ee:e0:7c:b4:75:ce:9b:6c:48:94:56:a1:fe not
>>>> verified (check hostfingerprints or web.cacerts config setting)
>>>> comparing with https://bitbucket.org/tortoisehg/thg
>>>> sending changegroupsubset command
>>>> Traceback (most recent call last):
>>>>  File "/home/peo/dev/hg/dev-crew/mercurial/dispatch.py", line 58, in _runcatch
>>>>    return _dispatch(ui, args)
>>>>  File "/home/peo/dev/hg/dev-crew/mercurial/dispatch.py", line 613, in _dispatch
>>>>    cmdpats, cmdoptions)
>>>>  File "/home/peo/dev/hg/dev-crew/mercurial/dispatch.py", line 418, in
>>>> runcommand
>>>>    ret = _runcommand(ui, options, cmd, d)
>>>>  File "/home/peo/dev/hg/dev-crew/mercurial/dispatch.py", line 667, in
>>>> _runcommand
>>>>    return checkargs()
>>>>  File "/home/peo/dev/hg/dev-crew/mercurial/dispatch.py", line 621, in checkargs
>>>>    return cmdfunc()
>>>>  File "/home/peo/dev/hg/dev-crew/mercurial/dispatch.py", line 610, in <lambda>
>>>>    d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
>>>>  File "/home/peo/dev/hg/dev-crew/mercurial/util.py", line 385, in check
>>>>    return func(*args, **kwargs)
>>>>  File "/home/peo/dev/hg/dev-crew/mercurial/commands.py", line 2717, in incoming
>>>>    ret = hg.incoming(ui, repo, source, opts)
>>>>  File "/home/peo/dev/hg/dev-crew/mercurial/hg.py", line 472, in incoming
>>>>    return _incoming(display, subreporecurse, ui, repo, source, opts)
>>>>  File "/home/peo/dev/hg/dev-crew/mercurial/hg.py", line 431, in _incoming
>>>>    revs, opts["bundle"], opts["force"])
>>>>  File "/home/peo/dev/hg/dev-crew/mercurial/bundlerepo.py", line 333,
>>>> in getremotechanges
>>>>    cg = other.changegroupsubset(incoming, onlyheads, 'incoming')
>>>>  File "/home/peo/dev/hg/dev-crew/mercurial/wireproto.py", line 123,
>>>> in changegroupsubset
>>>>    bases=bases, heads=heads)
>>>>  File "/home/peo/dev/hg/dev-crew/mercurial/httprepo.py", line 113, in
>>>> _callstream
>>>>    resp = self.urlopener.open(req)
>>>>  File "/usr/lib/python2.6/urllib2.py", line 391, in open
>>>>    response = self._open(req, data)
>>>>  File "/usr/lib/python2.6/urllib2.py", line 409, in _open
>>>>    '_open', req)
>>>>  File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
>>>>    result = func(*args)
>>>>  File "/home/peo/dev/hg/dev-crew/mercurial/httpconnection.py", line
>>>> 232, in https_open
>>>>    return self.do_open(self._makesslconnection, req)
>>>>  File "/home/peo/dev/hg/dev-crew/mercurial/httpconnection.py", line
>>>> 201, in do_open
>>>>    r = h.getresponse()
>>>>  File "/home/peo/dev/hg/dev-crew/mercurial/httpclient/__init__.py",
>>>> line 631, in getresponse
>>>>    r._select()
>>>>  File "/home/peo/dev/hg/dev-crew/mercurial/httpclient/__init__.py",
>>>> line 168, in _select
>>>>    data = self.sock.recv(INCOMING_BUFFER_SIZE)
>>>>  File "/usr/lib/python2.6/ssl.py", line 215, in recv
>>>>    return self.read(buflen)
>>>>  File "/usr/lib/python2.6/ssl.py", line 136, in read
>>>>    return self._sslobj.read(len)
>>>> SSLError: [Errno 2] _ssl.c:1331: The operation did not complete (read)
>>>> abort: _ssl.c:1331: The operation did not complete (read)
>>>>
>>>
>>
>


More information about the Mercurial-devel mailing list