Hi, HAProxy 1.9-dev6 was released on 2018/11/11. It added 42 new commits after version 1.9-dev5.
This version comes with a small frustration, as I really wanted to include Christopher's HTX work and Olivier's changes on the idle connection management, but I faced a few issues and difficulties merging them together so I'm keeping this stuff out for now and will have to use their help next week to sort this out. However I'm still releasing dev6 because it contains numerous fixes for issues plaguing the previous versions. The positive point of this is that when we're dealing with merging issues, it means that we've got way past the point of agreeing with the design :-) Since dev3 or so, we've faced some (expected) erratic behaviours on the connection and applets sides, as a result of the very tricky changes in the connection management. One of these issues directly involved a bad practice we've been having for years around the use of stream-interface flag SI_FL_WAIT_ROOM which used to convey two signals at once. After the changes, we could only have either the applets or the connections work fine but not both :-/ We managed to finally address this using much more effort, audit and rework than initially imagined, due to deep roots hanging below this flag. The current code is still far from being clean, but it fixes the 100% CPU we've been seeing on pending outgoing connections after the rework. We'll be able to proceed with more cleanups once we're done with the idle connection changes I guess. In parallel I noticed that we've broken TCP splicing. Not once, not twice... At least 5 times since 1.9-dev3! I'm saying "at least" because I could bisect 4 times after reverting each faulty patch and gave up when seeing the 5th. I'm not too much worried because the benefit of all these very difficult changes is that the code becomes more logical and that we can figure a bit easier what to do at certain places. It's just that we still have a lot of antique code having fun with our nerves. So please do not use "option splice-*" for now, it will lead to random connection freezes. I can't say that there really are any new features in this version. Most of the patches address connection issues, recent master-worker issues, and a few new info on the CLI (show proc and a few fields in show info). So overall it's mostly a stability fix on top of -dev5 for those willing to play with it. If we can manage to sort out the few issues met with idle connection changes and rebase the htx code on top of that, I'm fine with emitting a new version early this week. Such changes will provide us with server- side keep-alive when H2 is used on the front, and with the revamped HTTP stack that we'll need to provide end-to-end H2. I also have to review and merge Joseph's cleanups for typos in the doc (it was too late for this one, being busy dealing with connection issues). I'm seeing that we're almost done with merging the pending features, and that's reassuring, as we'll probably have a long testing phase coming. This week will be the one determining if we can still expect to release 1.9 by the end of the month or not. We've noticed that a lot of cleanup is still needed (mostly rename certain types, functions or fields that became completely misleading over time), but that can be done during the testing phase since it's not supposed to incur any functionality change. Bug reports are welcome, and as usual, don't put this on sensitive prod yet! Please find the usual URLs below : Site index : http://www.haproxy.org/ Discourse : http://discourse.haproxy.org/ Sources : http://www.haproxy.org/download/1.9/src/ Git repository : http://git.haproxy.org/git/haproxy.git/ Git Web browsing : http://git.haproxy.org/?p=haproxy.git Changelog : http://www.haproxy.org/download/1.9/src/CHANGELOG Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/ Willy --- Complete changelog : Christopher Faulet (2): MEDIUM: stream-int: Rely only on SI_FL_WAIT_ROOM to stop data receipt MEDIUM: stream-int: Try to read data even if channel's buffer seems to be full Cyril Bonté (2): DOC: split the http-request actions in their own section DOC: split the http-response actions in their own section Lukas Tribus (1): DOC: restore note about "independant" typo William Lallemand (10): BUG/MINOR: cli: forward the whole command on master CLI MINOR: cli: show the number of reload in 'show proc' MINOR: cli: can't connect to the target CLI MEDIUM: mworker: does not create the CLI proxy when no listener MINOR: mworker: displays more information when leaving MEDIUM: mworker: exit with the incriminated exit code MINOR: mworker: displays a message when a worker is forked MEDIUM: mworker: leave when the master die BUG/MEDIUM: mworker: does not abort() in mworker_pipe_register() BUG/MEDIUM: cli: crash when trying to access a worker Willy Tarreau (27): BUG/MEDIUM: tools: fix direction of my_ffsl() BUG/MEDIUM: auth/threads: use of crypt() is not thread-safe MINOR: compat: automatically detect support for crypt_r() MEDIUM: auth/threads: make use of crypt_r() on systems supporting it BUG/MAJOR: stream-int: don't call si_cs_recv() in stream_int_chk_rcv_conn() BUG/MINOR: tasks: make sure wakeup events are properly reported to subscribers MINOR: stats: report the number of active jobs and listeners in "show info" MINOR: stats: report the number of active peers in "show info" MINOR: stats: report the number of currently connected peers CLEANUP: stream-int: retro-document si_cs_io_cb() BUG/MEDIUM: stream-int: don't wake up for nothing during SI_ST_CON MEDIUM: stream: implement stream_buf_available() MEDIUM: appctx: check for allocation attempts in buffer allocation callbacks MINOR: stream-int: rename si_applet_{want|stop|cant}_{get|put} MINOR: stream-int: add si_done_{get,put} to indicate that we won't do it anymore MINOR: stream-int: use si_cant_put() instead of setting SI_FL_WAIT_ROOM MINOR: stream-int: make use of si_done_{get,put}() in shut{w,r} MINOR: stream-int: make it clear that si_ops cannot be null MEDIUM: stream-int: temporarily make si_chk_rcv() take care of SI_FL_WAIT_ROOM MINOR: stream-int: factor the SI_ST_EST state test into si_chk_rcv() MEDIUM: stream-int: make SI_FL_WANT_PUT reflect CF_DONT_READ MEDIUM: stream-int: always call si_chk_rcv() when we make room in the buffer MEDIUM: stream-int: make si_chk_rcv() check that SI_FL_WAIT_ROOM is cleared MINOR: stream-int: replace si_update() with si_update_both() MEDIUM: stream-int: make stream_int_update() aware of the lower layers CLEANUP: stream-int: remove the now unused si->update() function BUG/MINOR: config: better detect the presence of the h2 pattern in npn/alpn ---