Hi everyone! So it's getting better. When fixing the scheduler issues in the last RC, I messed up with the tree traversal, leading to some tasks waiting in the run queue without being found for a while. This was causing some timeouts and occasionally 100% CPU during normal operation. This is now fixed. Christopher also fixed an issue we had with both the task and applet schedulers in multi-threaded configurations, risking to make some threads spin believing there's some work while there's nothing for them. At the same time, the applet scheduler was modified to have a bound on the number of applets run at once, to avoid high latencies when lots of applets are used (eg: cache).
The master/worker code got several fixes. It doesn't try to call deinit() before calling execvp() because it's pointless, and this is the riskiest function of the whole program, always risking to die somewhere in case something doesn't initialize properly. It would be bad to see the master die upon reload! A few other minor issues were fixed (eg: boot messages were lost till rc3). Overall everything is in good shape. We have analysed and understood the issues in the cache revealed when using HTTP/2, these ones should now be fixed in the following days. Other issues exhibited by HTTP/2 when using redirects and filters uncovered a bug which also affects 1.7 and that we'll fix in the following days as well (several solutions in mind, we're just checking). A few adjustments still have to be done on the cache, and we also need to adjust the way to pin processes and threads to CPUs. There are still a few cleanups to be done on the internal API, some functions and variables still have to be renamed as they cause continued confusion (eg: the global "proxy" variable). I have to add a startup check to detect an HTTP/2 configuration with a buffer smaller than 16kB (this is not permitted by the spec). I'm quite happy with the current progress and the process is going well, with sufficient testers to report corner cases helping narrow down the remaining bugs. I'm not yet convinced we'll need an RC5 but we'll see. It's very likely that next week-end will see 1.8-final if things continue at this speed. At least, despite the bugs above, haproxy.org has been running on RC3 for the last week with HTTP/2 and threads enabled. We're taking a bit of risks to enable two experimental features at once but it's the best way to spot bugs! Something tells me that within a day or two it will be upgraded to the latest snapshot to enable caching as well :-) Last point : if you think you've spotted a regression, it's the last moment to report it. If you expect that someone else will likely find it before the release, you'll experience the "dot 0" syndrome. The rule is simple, if you face a problem, please check if it happens with 1.7. If it does, the problem can be reported a bit later (but we still need to know about it). If it doesn't, it's a regression and it must absolutely be reported as soon as possible. Please find the usual URLs below : Site index : http://www.haproxy.org/ Discourse : http://discourse.haproxy.org/ Sources : http://www.haproxy.org/download/1.8/src/ Git repository : http://git.haproxy.org/git/haproxy-1.8.git/ Git Web browsing : http://git.haproxy.org/?p=haproxy-1.8.git Changelog : http://www.haproxy.org/download/1.8/src/CHANGELOG Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/ Willy --- Complete changelog : Christopher Faulet (14): BUG/MINOR: spoe: check buffer size before acquiring or releasing it MINOR: debug/flags: Add missing flags MINOR: threads: Use __decl_hathreads to declare locks BUG/MINOR: buffers: Fix b_alloc_margin to be "fonctionnaly" thread-safe BUG/MINOR: threads: tid_bit must be a unsigned long CLEANUP: tasks: Remove useless double test on rq_next BUG/MEDIUM: standard: itao_str/idx and quote_str/idx must be thread-local BUG/MINOR: Allocate the log buffers before the proxies startup MINOR: tasks: Use a bitfield to track tasks activity per-thread MAJOR: polling: Use active_tasks_mask instead of tasks_run_queue MINOR: applets: Use a bitfield to track applets activity per-thread MAJOR: polling: Use active_appels_mask instead of applets_active_queue MEDIUM: applets: Don't process more than 200 active applets at once MINOR: stream: Add thread-mask of tasks/FDs/applets in "show sess all" command David Carlier (1): BUG/MEDIUM: deviceatlas: ignore not valuable HTTP request data Frédéric Lécaille (2): DOC: peers: Add a first version of peers protocol v2.1. CONTRIB: Wireshark dissector for HAProxy Peer Protocol. Olivier Houchard (2): MINOR: SSL: Store the ASN1 representation of client sessions. MINOR: ssl: Make sure we don't shutw the connection before the handshake. Tim Duesterhus (1): BUG/MEDIUM: mworker: Fix re-exec when haproxy is started from PATH William Lallemand (9): BUG/MEDIUM: cache: does not cache if no Content-Length BUG/MEDIUM: cache: use msg->sov to forward header MINOR: cache: forward data with headers MINOR: cache: disable cache if shctx_row_data_append fail MINOR: mworker: display an accurate error when the reexec fail BUG/MEDIUM: mworker: wait again for signals when execvp fail BUG/MEDIUM: mworker: does not deinit anymore BUG/MEDIUM: mworker: does not close inherited FD MINOR: tests: add a python wrapper to test inherited fd Willy Tarreau (9): BUILD: thread/pipe: fix build without threads BUG/MAJOR: ebtree/scope: fix insertion and removal of duplicates in scope-aware trees BUG/MAJOR: ebtree/scope: fix lookup of next node in scope-aware trees MINOR: ebtree/scope: add a function to find next node from a parent MINOR: ebtree/scope: simplify the lookup functions by using eb32sc_next_with_parent() MINOR: tools: add a function to dump a scope-aware tree to a file MINOR: tools: improve the DOT dump of the ebtree MINOR: tools: emphasize the node being worked on in the tree dump BUG/MAJOR: ebtree/scope: properly tag upper nodes during insertion ---

