Hi, HAProxy 2.0-dev4 was released on 2019/05/22. It added 83 new commits after version 2.0-dev3.
This release completes the integration of a few pending features and the ongoing necessary cleanups before 2.0. A few bugs were addressed in the way to deal with certain connection errors, but overall there was nothing dramatic, which indicates we're stabilizing (it has been running flawlessly for 1 week now on haproxy.org). There are a few new features that were already planned. One is the support of event ports as an alternate (read "faster") polling method on Solaris, by Manu. Another one is the replacement of the slow stream processing by a better and more reliable watchdog. It currently only supports Linux however, but a FreeBSD port seems reasonably easy to do. It will detect inter-thread deadlocks as well as tasks stuck looping in an endless list which has been corrupted, and will provoke a panic, dumping all threads states, then doing an abort (in hope to get a core). This will allow the problem to be immediately detected and even the service to be automatically restarted when the service manager supports it. It's also possible to consult all threads' states on the CLI using "show threads". As previously discussed we have also deprecated the very old req* and rsp* directives with warnings suggesting what to use instead. They still work but the goal is to kill them in 2.1, so there's no rush to convert your configs given that 2.0 is LTS but you will be encouraged to progressively adapt your future configs. Likewise "option forceclose" now warns and "resolution_pool_size" is an error (it never existed in any release). WURFL is now HTX-aware. There are some new developer-friendly commands on the CLI when built with -DDEBUG_DEV, they allow to inspect memory areas or send signals, which is convenient during development. It should have been done earlier! Cirrus-CI is enabled to test builds on FreeBSD. To be honest at this point it's still not completely clear to me how to fully use it as their interface is a bit limited but it has the merit of existing. It doesn't build as often as Travis-CI, and it decided to build the last fix after I tagged this release, showing that apparently there's still a build error on FreeBSD, that I don't understand for now. Lots of code cleanups were done, and some old build options were refreshed to match their equivalent makefile option. Overall, aside the possible occasional build issues here and there, it's expected to be a bit more stable than dev3, which I'm currently already satisfied with. Let's set on -dev5 around next Wednesday with the final polishing. Depending on the amount of issues we'll be able to decide on a release date. Please find the usual URLs below : Site index : http://www.haproxy.org/ Discourse : http://discourse.haproxy.org/ Slack channel : https://slack.haproxy.org/ Issue tracker : https://github.com/haproxy/haproxy/issues Sources : http://www.haproxy.org/download/2.0/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/2.0/src/CHANGELOG Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/ Willy --- Complete changelog : Bertrand Jacquin (1): DOC: fix "successful" typo Christopher Faulet (1): BUG/MINOR: http_fetch: Rely on the smp direction for "cookie()" and "hdr()" Emmanuel Hocdet (3): BUILD: makefile: use USE_OBSOLETE_LINKER for solaris BUILD: makefile: remove -fomit-frame-pointer optimisation (solaris) MAJOR: polling: add event ports support (Solaris) Ilya Shipitsin (2): BUILD: enable freebsd builds on cirrus-ci BUILD: travis: add sanitizers to travis-ci builds Olivier Houchard (3): BUG/MEDIUM: streams: Don't use CF_EOI to decide if the request is complete. BUG/MEDIUM: streams: Try to L7 retry before aborting the connection. BUG/MEDIUM: streams: Don't switch from SI_ST_CON to SI_ST_DIS on read0. Tim Duesterhus (3): MEDIUM: Make 'option forceclose' actually warn MEDIUM: Make 'resolution_pool_size' directive fatal BUG/MINOR: mworker: Fix memory leak of mworker_proc members William Lallemand (1): MINOR: init: setenv HAPROXY_CFGFILES Willy Tarreau (61): DOC: management: place "show activity" at the right place MINOR: cli/activity: show the dumping thread ID starting at 1 MINOR: task: export global_task_mask MINOR: cli/debug: add a thread dump function BUG/MINOR: debug: make ha_task_dump() always check the task before dumping it BUG/MINOR: debug: make ha_task_dump() actually dump the requested task MINOR: debug: make ha_thread_dump() and ha_task_dump() take a buffer BUG/MINOR: debug: don't check the call date on tasklets MINOR: thread: implement ha_thread_relax() MINOR: task: put barriers after each write to curr_task MINOR: task: always reset curr_task when freeing a task or tasklet MINOR: stream: detach the stream from its own task on stream_free() MEDIUM: debug/threads: implement an advanced thread dump system REGTEST: extend the check duration on tls_health_checks and mark it slow MINOR: threads/init: synchronize the threads startup MEDIUM: init/mworker: make the pipe register function a regular initcall CLEANUP: memory: make the fault injection code use the OTHER_LOCK label CLEANUP: threads: remove the now unused START_LOCK label MINOR: init/threads: make the global threads an array of structs MINOR: threads: add each thread's clockid into the global thread_info CLEANUP: stream: remove an obsolete debugging test MINOR: tools: add dump_hex() MINOR: debug: implement ha_panic() MINOR: debug/cli: add some debugging commands for developers MINOR: tools: provide a may_access() function and make dump_hex() use it MINOR: debug: make ha_panic() report threads starting at 1 REORG: compat: move some integer limit definitions from standard.h to compat.h REORG: threads: move the struct thread_info from global.h to hathreads.h MINOR: compat: make sure to always define clockid_t MINOR: threads: always place the clockid in the struct thread_info MINOR: threads: add a thread-local thread_info pointer "ti" MINOR: time: move the cpu, mono, and idle time to thread_info MINOR: time: add a function to retrieve another thread's cputime MINOR: debug: report each thread's cpu usage in "show thread" BUILD: threads: only assign the clock_id when supported CLEANUP: time: refine the test on _POSIX_TIMERS MINOR: compat: define a new empty type empty_t for non-implemented fields CLEANUP: time: switch clockid_t to empty_t when not available CLEANUP: objtype: make obj_type() and obj_type_name() take consts MINOR: debug: switch to SIGURG for thread dumps CLEANUP: threads: really move thread_info to hathreads.c MINOR: threads: make threads_{harmless|want_rdv}_mask constant 0 without threads CLEANUP: debug: always report harmless/want_rdv even without threads MINOR: threads: implement ha_tkill() and ha_tkillall() CLEANUP: debug: make use of ha_tkill() and remove ifdefs MINOR: stream: introduce a stream_dump() function and use it in stream_dump_and_crash() MINOR: debug: dump streams when an applet, iocb or stream is known MINOR: threads: add a "stuck" flag to the thread_info struct MINOR: threads: add a timer_t per thread in thread_info MAJOR: watchdog: implement a thread lockup detection mechanism MINOR: stream: remove the cpu time detection from process_stream() MINOR: connection: report the mux names in "haproxy -vv" CLEANUP: mux-h1: use "H1" and not "h1" as the mux's name MINOR: WURFL: do not emit warnings when not configured CONTRIB: wurfl: address 3 build issues in the wurfl dummy library BUG/MEDIUM: init/threads: provide per-thread alloc/free function callbacks BUILD: time: remove the test on _POSIX_C_SOURCE CLEANUP: build: rename some build macros to use the USE_* ones CLEANUP: raw_sock: remove support for very old linux splice bug workaround BUG/MEDIUM: dns: make the port numbers unsigned MEDIUM: config: deprecate the antique req* and rsp* commands mbellomi (8): BUG/MEDIUM: WURFL: segfault in wurfl-get() with missing info. MINOR: WURFL: call header_retireve_callback() in dummy library MINOR: WURFL: fixed Engine load failed error when wurfl-information-list contains wurfl_root_id MINOR: WURFL: shows log messages during module initialization MINOR: WURFL: removes heading wurfl-information-separator from wurfl-get-all() and wurfl-get() results MINOR: WURFL: wurfl_get() and wurfl_get_all() now return an empty string if device detection fails MEDIUM: WURFL: HTX awareness. MINOR: WURFL: module version bump to 2.0 ---