[ANNOUNCE] haproxy 1.3.14.2 and 1.3.13.2

From: Willy Tarreau <w#1wt.eu>
Date: Mon, 21 Jan 2008 00:37:28 +0100


Hi all,

Due to a bug recently discovered when using sepoll on linux 2.6, I have released 1.3.14.2 and 1.3.13.2 with several bugfixes, among which the one concerning the bug above.

This bug is caused by epoll() returning EPOLLIN|EPOLLHUP even when there are large amounts of data left to be read, just because the socket receive buffer was large enough to detect the end of connection. This EPOLLHUP alone was enough to indicate an end of read while there was sometimes data pending there to be read. In theory, it should also have happened with epoll() but in practise, it seems like it needs a lot of work factoring to encounter the problem, and only sepoll achieves this factoring.

The resulting effect is that when a client closes the connection before the server finishes sending its data, the client might retrieve a trucated object. This can easily be triggered by using "option forceclose" with a fast client and a slow server.

In practise, you should either upgrade or you disable sepoll with the "nosepoll" keyword in the global section.

Well in the end it's somewhat fortunate that this problem was encountered, because :

  1. it made me read sites explaining all differences in implementations of POLLHUP on various OS/versions
  2. the only solution I found to fix it was to make *POLLHUP and *POLLERR sticky, which finally saved the last empty read() in most cases, resulting in a slight performance increase in sepoll even on small objects.

I took this opportunity to merge other pending fixes, as well as Krzysztof's work on option inversion (not backported to 1.3.13 though). I also updated the documentation in 1.3.14. It's almost finished, only the log section remains to be completed. I'm quite happy to have had so much useful time for this doc. I will soon remove the old ones to avoid any confusion.

For 1.3.14.2, I've also updated the GNU makefile to the new rewritten version. It's still compatible with the old one at a variable-level, but will certainly help distro packagers a lot (at least it did for me).

Here's the CHANGELOG extract for 1.3.14.2 :

And here it is for 1.3.13.2 :

It's likely the last 1.3.13 version that I release. Please try to update to 1.3.14.X if you're still on 1.3.13.X.

I've rebuilt a Linux/x86 binary for 1.3.14.2, but that's all.

Please find updates here :

   http://haproxy.1wt.eu/download/1.3/src/       (sources + changelog)
   http://haproxy.1wt.eu/download/1.3/doc/configuration.txt.gz   (doc)
   http://haproxy.1wt.eu/download/1.3/bin/          (linux/x86 binary)

Regards,
Willy Received on 2008/01/21 00:37

This archive was generated by hypermail 2.2.0 : 2008/01/21 01:15 CET