[Mercurial 2.2.2 error]

Matt Mackall mpm at selenic.com
Sun Mar 17 16:41:58 CDT 2013


On Thu, 2013-03-14 at 16:48 +0700, Quan Thanh Nguyen wrote:
> Dear Mercurial development team
> 
> I'm using Mercurial 2.2.2 with Python 2.5.1. I install Python and 
> Mercurial from Mercurial source release on Ubuntu 10.04.
> My Mercurial server use apache2 with ssl protocol. When I use 'push' 
> command the error happening:
> 
>    File 
> "<mercurial_path>/lib/python2.5/site-packages/mercurial/keepalive.py", 
> line 259, in do_open
>      raise urllib2.URLError(err)
> URLError: <urlopen error (8, 'EOF occurred in violation of protocol')>
> abort: error: EOF occurred in violation of protocol
> 
> -----------------------------------------------------------------------------------------------------------------------------------------
> I tried to debug and I get some information:
> This error happen when attribute _start_transaction of class 
> KeepAliveHandler in keepalive.py file call 'h.send(data)' with empty data.
> And I modified the source code of _start_transaction attribute:
> 
> --- keepalive.py        2013-03-14 16:45:46.984593616 +0700
> +++ keepalive.py.modify 2013-03-14 16:45:33.520094059 +0700
> @@ -353,7 +353,8 @@
>               h.putheader(k, v)
>           h.endheaders()
>           if req.has_data():
> -            h.send(data)
> +           if len(data) > 0:
> +               h.send(data)

I put some instrumentation here and it appears that we send a harmless
zero-length data chunk on _most pushes_, which means this is very
unlikely to be the problem. In other words, if there were a problem
here, we would be hearing about it 5000 times a day for the past 7
years. 

These "EOF" errors almost always mean something is wrong with the server
config.

-- 
Mathematics is the supreme nostalgia of our time.




More information about the Mercurial-devel mailing list