Hi, HAProxy 2.1-dev2 was released on 2019/10/01. It added 399 new commits after version 2.1-dev1.
Yes, I know. 2.1-dev1 was 2.5 months ago and now we're one-off from 400 commits just for dev2. It is quite a mess. The reality is that we've been spending an insane amount of time away from coding, just doing nasty bug chasing. Most of those who know me by now know how this drives me nuts, because instead of spending time rebuilding the things that are falling apart, we're planting a few nails here and there so that it lasts for yet another release. There are still some pending bugs but since this is a never-ending game and we've merged quite some features, I prefer to issue dev2 now and ease testing than wait for the magical bug-free day. The positive thing is that some very long-lasting issues related to aborted H2 requests and uploads are now dead, and that the checks, eventhough the code it getting uglier each week, now work much better. But all that still needs to be done to address the shutdown vs abort issues, idle connections sharing, sending of H2 CONTINUATION frames to support large response headers in H2 and the complete rewrite of the checks... all these still have to be done and most of them will definitely not be for 2.1 anymore. But overall I'm staying positive. Killing a bug is still an improvement. Since 2.1-dev1, we killed 124 of them, that's almost 2 per day including week-ends, which is quite an amazing score, especially for a vacation period! And since I'm not seeing this trend go significantly down and predict some of us will have less time to spend on this with the upcoming conference, I'd like to urge a code freeze very soon. I'd have set it to yesterday but doing so without prior notification is not friendly and it's my fault for not having seen time fly this fast. So I'll take my share of the responsibility for the situation and accept an extra delay... only for the stuff I've been made aware of. Thus I proclaim that I'm not going to take anything that I've not yet been told about right now, and will stop taking impacting changes past Sunday 13th this month so that we can mostly focus on fixing issues, polishing docs and adding more regtests if possible. Note that this must not be used as an excuse for sending half-tested crap and hoping to fix it later. Now let's have a look at the new goodies in this version : - HTX is now the only supported HTTP mode, the old "legacy" mode was now removed. Good riddance, less maintenance hell! This remains transparent, unless you try to specify "no option http-use-htx" where you'll get an error. - removal of rsprep / reqrep etc... These were the oldest rules, still applying to a whole HTTP line (header or not). Not only they were not very reliable to use (syntax, spaces, ...), but they required to emulate a dummy request when dealing with H2, which didn't make any sense anymore. Plus it was not possible to use case-sensitivity only on the value without having it on the name... - the HTTP/1 mux now supports remapping header names when dealing with a bogus application that is having issues with case sensitivity. Please see "h1-case-adjust" in the doc for this if you're dealing with such issues. - we now support connecting to FastCGI backends. This was a direct outcome of supporting multiplexed connections everywhere, it was too tempting to give it a try. This can help improve resource management for example by limiting the number of concurrent requests much more accurately, and reducing the number of containers deployed in certain environments when a component such as nginx or lighttpd had to be deployed solely to serve as an HTTP-to-FCGI gateway. - the FD cache was completely removed. This was a leftover from the very old "speculative I/O" mode allowing to save a lot of syscalls in callbacks by keeping track of the last polling status. Now that our I/Os are called from top to bottom, it's not needed anymore, and can increase the performance up to ~20% on some artificially tailored workloads, but I still expect 5-10% in real production. - connections take much less memory as the source and destination addresses are now dynamically allocated if needed. That's 128 to 256 bytes saved per connection and per side in the common case. - the thread dump used in panic code can now show Lua backtraces, so that in the event time is wasted in Lua (it should not, unless if you call an external library), it is possible to know the exact line of the Lua code that provoked this. - a trace infrastructure was added to help collect information from the field without having to recompile. Traces can be enabled from the CLI and collect data from several places with varying levels of details, and send them to stdio, log servers or ring buffers. As of dev2, the only source is the H2 mux. - as a bonus from the trace infrastructure, logs can now be sent to a ring buffer (only one, 1 MB for now, just requires config keywords to create more). This can be very convenient in some environments since just issuing a "show events buf0" on the CLI will show everything, and adding "-w -n" after it will work like "tail -f". - the SSL certificate management was significantly reworked to centralize certificate information so that certs are now loaded a single time even if multiple bind lines use them, and perform way less system calls. This is expected to substantially speed up loading of large setups where numbers in the orders of 10k to 100k certs are used. Some extra improvements are still pending on this (no more details, I'd rather avoid saying crap). - a part of the scheduler was improved to support waking up tasklets belonging to another thread. It is a necessary step to deal with inter- thread idle connections, but allowed to simplify quite some parts of the code and to speed up the accept() code. - SPOE now sends a per-thread engine-id allowing to support async mode with threads. - the stats page can now be exported in JSON mode, finally! - add new build target linux-glibc-legacy (for CentOS 6 and older) - new sample fetches and converters: srv_queue, fc_pp_authority, uuid - send-proxy-v2 can now send the authority, allowing to chain layers using SNI. I've intentionally skipped many entries as you can guess, the change log is quite large, but this is what I spotted. And I skipped the 124 bugfixes as they are not new features :-) Thanks to all participants for these efforts, especially the detailed bug reports. Now it's the users' turn to spot bugs and refill our bag! 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.1/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.1/src/CHANGELOG Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/ Willy --- Complete changelog : Adis Nezirovic (1): BUG/MINOR: Missing stat_field_names (since f21d17bb) Anthonin Bonnefoy (1): BUG/MINOR: Fix prometheus '# TYPE' and '# HELP' headers Baptiste Assmann (3): MINOR: cache: add method to cache hash MINOR: cache: allow caching of OPTIONS request BUG/MINOR: action: do-resolve does not yield on requests with body Christopher Faulet (133): MINOR: mux-h2: Don't adjust anymore the amount of data sent in h2_snd_buf() BUG/MINOR: http_fetch: Fix http_auth/http_auth_group when called from TCP rules BUG/MINOR: http_htx: Initialize HTX error messages for TCP proxies BUG/MINOR: cache/htx: Make maxage calculation HTX aware BUG/MINOR: hlua: Make the function txn:done() HTX aware MINOR: proto_htx: Directly call htx_check_response_for_cacheability() MINOR: proto_htx: Rely on the HTX function to apply a redirect rules MINOR: proto_htx: Add the function htx_return_srv_error() MINOR: backend/htx: Don't rewind output data to set the sni on a srv connection MINOR: proto_htx: Don't stop forwarding when there is a post-connect processing DOC: htx: Update comments in HTX files CLEANUP: htx: Remove the unsued function htx_add_blk_type_size() MINOR: htx: Deduce the number of used blocks from tail and head values MINOR: htx: Use an array of char to store HTX blocks MINOR: htx: Slightly update htx_dump() to report better messages DOC: htx: Add internal documentation about the HTX MAJOR: http: Deprecate and ignore the option "http-use-htx" MEDIUM: mux-h2: Remove support of the legacy HTTP mode CLEANUP: h2: Remove functions converting h2 requests to raw HTTP/1.1 ones MINOR: connection: Remove the multiplexer protocol PROTO_MODE_HTX MINOR: stream: Rely on HTX analyzers instead of legacy HTTP ones MEDIUM: http_fetch: Remove code relying on HTTP legacy mode MINOR: config: Remove tests on the option 'http-use-htx' MINOR: stream: Remove tests on the option 'http-use-htx' in stream_new() MINOR: proxy: Remove tests on the option 'http-use-htx' during H1 upgrade MINOR: hlua: Remove tests on the option 'http-use-htx' to reject TCP applets MINOR: cache: Remove tests on the option 'http-use-htx' MINOR: contrib/prometheus-exporter: Remove tests on the option 'http-use-htx' CLEANUP: proxy: Remove the flag PR_O2_USE_HTX MINOR: proxy: Don't adjust connection mode of HTTP proxies anymore MEDIUM: backend: Remove code relying on the HTTP legacy mode MEDIUM: hlua: Remove code relying on the legacy HTTP mode MINOR: http_act: Remove code relying on the legacy HTTP mode MEDIUM: cache: Remove code relying on the legacy HTTP mode MEDIUM: compression: Remove code relying on the legacy HTTP mode MINOR: flt_trace: Remove code relying on the legacy HTTP mode MINOR: stats: Remove code relying on the legacy HTTP mode MAJOR: filters: Remove code relying on the legacy HTTP mode MINOR: stream: Remove code relying on the legacy HTTP mode MAJOR: http: Remove the HTTP legacy code MINOR: hlua: Remove useless test on TX_CON_WANT_* flags MINOR: proto_http: Remove unused http txn flags MINOR: proto_http: Remove the unused flag HTTP_MSGF_WAIT_CONN CLEANUP: proto_http: Group remaining flags of the HTTP transaction CLEANUP: channel: Remove the unused flag CF_WAKE_CONNECT CLEANUP: proto_http: Remove unecessary includes and comments CLEANUP: proto_http: Move remaining code from proto_http.c to proto_htx.c REORG: proto_htx: Move HTX analyzers & co to http_ana.{c,h} files BUG/MINOR: debug: Remove flags CO_FL_SOCK_WR_ENA/CO_FL_SOCK_RD_ENA MINOR: proxy: Remove support of the option 'http-tunnel' DOC: config: Update as a result of the legacy HTTP removal MEDIUM: config: Remove parsing of req* and rsp* directives MINOR: proxy: Remove the unused list of block rules MINOR: proxy/http_ana: Remove unused req_exp/rsp_exp and req_add/rsp_add lists DOC: config: Remove unsupported req* and rsp* keywords MINOR: global: Preset tune.max_http_hdr to its default value MINOR: http: Don't store raw HTTP errors in chunks anymore BUG/MINOR: session: Emit an HTTP error if accept fails only for H1 connection BUG/MINOR: session: Send a default HTTP error if accept fails for a H1 socket CLEANUP: mux-h2: Remove unused flags H2_SF_CHNK_* MINOR: config: Warn only if the option http-use-htx is used with "no" prefix BUG/MEDIUM: mux-h1: Trim excess server data at the end of a transaction BUG/MINOR: mux-h1: Close server connection if input data remains in h1_detach() BUG/MINOR: http_ana: Be sure to have an allocated buffer to generate an error BUG/MINOR: http_htx: Support empty errorfiles MEDIUM: mux-h1: Add the support of headers adjustment for bogus HTTP/1 apps BUG/MEDIUM: lb-chash: Fix the realloc() when the number of nodes is increased BUG/MINOR: hlua/htx: Reset channels analyzers when txn:done() is called BUG/MEDIUM: hlua: Check the calling direction in lua functions of the HTTP class MINOR: hlua: Don't set request analyzers on response channel for lua actions MINOR: hlua: Add a flag on the lua txn to know in which context it can be used BUG/MINOR: hlua: Only execute functions of HTTP class if the txn is HTTP ready BUG/MINOR: htx: Fix free space addresses calculation during a block expansion BUG/MEDIUM: lb-chash: Ensure the tree integrity when server weight is increased BUG/MEDIUM: lua: Fix test on the direction to set the channel exp timeout BUG/MINOR: stats: Wait the body before processing POST requests BUG/MINOR: http-ana: Reset response flags when 1xx messages are handled BUG/MINOR: h1: Properly reset h1m when parsing is restarted BUG/MINOR: mux-h1: Fix size evaluation of HTX messages after headers parsing BUG/MINOR: mux-h1: Don't stop anymore input processing when the max is reached BUG/MINOR: mux-h1: Be sure to update the count before adding EOM after trailers BUG/MEDIUM: cache: Properly copy headers splitted on several shctx blocks BUG/MEDIUM: cache: Don't cache objects if the size of headers is too big BUG/MINOR: mux-h1: Fix a possible null pointer dereference in h1_subscribe() BUG/MINOR: mux-h1: Fix a UAF in cfg_h1_headers_case_adjust_postparser() MINOR: contrib/prometheus-exporter: Report DRAIN/MAINT/NOLB status for servers BUG/MINOR: listener: Fix a possible null pointer dereference BUG/MINOR: ssl: always check for ssl connection before getting its XPRT context MINOR: stats: Add JSON export from the stats page BUG/MINOR: filters: Properly set the HTTP status code on analysis error CLEANUP: mux-h2: Remove unused flag H2_SF_DATA_CHNK BUG/MINOR: acl: Fix memory leaks when an ACL expression is parsed BUG/MINOR: backend: Fix a possible null pointer dereference BUG/MEDIUM: stick-table: Properly handle "show table" with a data type argument MINOR: htx: Add a flag on HTX message to report processing errors MINOR: mux-h1: Report a processing error during output processing MINOR: http-ana: Handle HTX errors first during message analysis MINOR: http-ana: Remove err_state field from http_msg MINOR: config: Support per-proxy and per-server deinit functions callbacks MINOR: config: Support per-proxy and per-server post-check functions callbacks MINOR: http_fetch: Add sample fetches to get auth method/user/pass MINOR: istbuf: Add the function b_isteqi() MINOR: log: Provide a function to emit a log for an application MINOR: http: Add function to parse value of the header Status MEDIUM: mux-h1/h1-htx: move HTX convertion of H1 messages in dedicated file MINOR: h1-htx: Use the same function to copy message payload in all cases MINOR: muxes/htx: Ignore pseudo header during message formatting MINOR: fcgi: Add code related to FCGI protocol MEDIUM: fcgi-app: Add FCGI application and filter MEDIUM: mux-fcgi: Add the FCGI multiplexer MINOR: doc: Add documentation about the FastCGI support BUG/MINOR: build: Fix compilation of mux_fcgi.c when compiled without SSL BUG/MINOR: mux-h2: Be sure to have a connection to unsubcribe BUG/MINOR: mux-fcgi: Be sure to have a connection to unsubcribe CLEANUP: fcgi-app: Remove useless test on fcgi_conf pointer BUG/MINOR: mux-fcgi: Don't compare the filter name in its parsing callback BUG/MAJOR: mux-h2: Handle HEADERS frames received after a RST_STREAM frame BUG/MINOR: stream-int: Process connection/CS errors first in si_cs_send() BUG/MEDIUM: stream-int: Process connection/CS errors during synchronous sends CLEANUP: mux-fcgi: Remove the unused function fcgi_strm_id() BUG/MINOR: mux-fcgi: Use a literal string as format in app_log() BUG/MINOR: mux-h2: Fix missing braces because of traces in h2_detach() BUG/MINOR: mux-h2: Use the dummy error when decoding headers for a closed stream BUG/MAJOR: mux_h2: Don't consume more payload than received for skipped frames BUG/MINOR: mux-h1: Do h2 upgrade only on the first request MINOR: spoe: Improve generation of the engine-id MINOR: spoe: Support the async mode with several threads MINOR: http: Add server name header from HTTP multiplexers CLEANUP: http-ana: Remove the unused function http_send_name_header() MINOR: stats: Add the support of float fields in stats BUG/MINOR: contrib/prometheus-exporter: Return the time averages in seconds DOC: Fix documentation about the cli command to get resolver stats BUG/MINOR: stats: Add a missing break in a switch statement David Carlier (1): BUILD/MINOR: auth: enabling for osx Emeric Brun (1): BUG/MAJOR: ssl: ssl_sock was not fully initialized. Emmanuel Hocdet (12): MINOR: ssl: use STACK_OF for chain certs MINOR: ssl: add extra chain compatibility MINOR: ssl: check private key consistency in loading MINOR: ssl: do not look at DHparam with OPENSSL_NO_DH CLEANUP: ssl: ssl_sock_load_crt_file_into_ckch MINOR: ssl: clean ret variable in ssl_sock_load_ckchn BUILD: ssl: BoringSSL add EVP_PKEY_base_id BUG/MINOR: ssl: fix ressource leaks on error BUG/MINOR: ssl: fix 0-RTT for BoringSSL MINOR: ssl: ssl_fc_has_early should work for BoringSSL MINOR: send-proxy-v2: sends authority TLV according to TLV received BUG/MINOR: build: fix event ports (Solaris) Frédéric Lécaille (2): BUG/MEDIUM: stick-table: Wrong stick-table backends parsing. BUG/MEDIUM: peers: local peer socket not bound. Geoff Simmons (1): MINOR: connection: add the fc_pp_authority fetch -- authority TLV, from PROXYv2 Ilya Shipitsin (7): BUILD: travis-ci: enable daily Coverity scan BUILD: travis-ci: trigger non-mainstream configurations only on daily builds. BUILD: CI: add basic CentOS 6 cirrus build BUILD: CI: skip reg-tests/connection/proxy_protocol_random_fail.vtc on CentOS 6 BUILD: CI: temporarily disable ASAN BUILD: CI: install golang-1.13 when building BoringSSL BUILD: travis-ci: add PCRE2, SLZ build Jerome Magnin (2): BUG/MEDIUM: url32 does not take the path part into account in the returned hash. BUILD: connection: silence gcc warning with extra parentheses Jérôme Magnin (3): DOC: management: document reuse and connect counters in the CSV format DOC: management: document cache_hits and cache_lookups in the CSV format REGTESTS: checks: exclude freebsd target for tcp-check_multiple_ports.vtc Kevin Zhu (1): BUG/MEDIUM: spoe: Use a different engine-id per process Krisztian Kovacs (1): BUG/MEDIUM: namespace: close open namespaces during soft shutdown Krisztián Kovács (kkovacs) (1): BUG/MEDIUM: namespace: fix fd leak in master-worker mode Luca Schimweg (1): MINOR: sample: Add UUID-fetch Lukas Tribus (2): BUG/MINOR: lua: fix setting netfilter mark MINOR: build: add linux-glibc-legacy build TARGET Nenad Merdanovic (1): MINOR: backend: Add srv_queue converter Olivier Houchard (22): BUG/MEDIUM: checks: Don't attempt to receive data if we already subscribed. BUG/CRITICAL: http_ana: Fix parsing of malformed cookies which start by a delimiter BUG/MEDIUM: streams: Don't switch the SI to SI_ST_DIS if we have data to send. MEDIUM: h1: Don't try to subscribe if we managed to read data. MEDIUM: h1: Don't wake the H1 tasklet if we got the whole request. MAJOR: fd: Get rid of the fd cache. MEDIUM: pollers: Remember the state for read and write for each threads. BUG/MEDIUM: proxy: Make sure to destroy the stream on upgrade from TCP to H2 BUG/MEDIUM: fd: Always reset the polled_mask bits in fd_dodelete(). BUG/MEDIUM: pollers: Clear the poll_send bits as well. BUG/MEDIUM: proxy: Don't forget the SF_HTX flag when upgrading TCP=>H1+HTX. BUG/MEDIUM: proxy: Don't use cs_destroy() when freeing the conn_stream. BUG/MEDIUM: mux_pt: Don't call unsubscribe if we did not subscribe. BUG/MEDIUM: h1: Always try to receive more in h1_rcv_buf(). MEDIUM: list: Separate "locked" list from regular list. MINOR: mt_lists: Add new macroes. MEDIUM: servers: Use LIST_DEL_INIT() instead of LIST_DEL(). MINOR: mt_lists: Do nothing in MT_LIST_ADD/MT_LIST_ADDQ if already in list. MINOR: mt_lists: Give MT_LIST_ADD, MT_LIST_ADDQ and MT_LIST_DEL a return value. MEDIUM: tasklets: Make the tasklet list a struct mt_list. TESTS: Add a stress-test for mt_lists. BUG/MEDIUM: tasklets: Make sure we're waking the target thread if it sleeps. Richard Russo (1): BUG/MAJOR: http/sample: use a static buffer for raw -> htx conversion Tim Duesterhus (5): DOC: Add 'Question.md' issue template, discouraging asking questions BUG/MINOR: lua: Properly initialize the buffer's fields for string samples in hlua_lua2(smp|arg) CLEANUP: lua: Get rid of obsolete (size_t *) cast in hlua_lua2(smp|arg) BUG/MEDIUM: lua: Store stick tables into the sample's `t` field CLEANUP: proxy: Remove `proxy_tbl_by_name` William Lallemand (12): MINOR: ssl: merge ssl_sock_load_cert_file() and ssl_sock_load_cert_chain_file() MEDIUM: ssl: use cert_key_and_chain struct in ssl_sock_load_cert_file() MEDIUM: ssl: split the loading of the certificates MEDIUM: ssl: lookup and store in a ckch_node tree MEDIUM: ssl: load DH param in struct cert_key_and_chain BUG/BUILD: ssl: fix build with openssl < 1.0.2 BUG/MEDIUM: ssl: does not try to free a DH in a ckch BUG/MEDIUM: ssl: don't free the ckch in multi-cert bundle BUG/MEDIUM: ssl: open the right path for multi-cert bundle BUG/MINOR: mux-fcgi: silence a gcc warning about null dereference BUILD: ssl: fix a warning when built with openssl < 1.0.2 DOC: replace utf-8 quotes by ascii ones Willy Tarreau (184): BUG/MINOR: dns: remove irrelevant dependency on a client connection MINOR: applet: make appctx use their own pool BUG/MEDIUM: http/htx: unbreak option http_proxy BUG/MINOR: backend: do not try to install a mux when the connection failed BUG/MINOR: checks: do not exit tcp-checks from the middle of the loop MINOR: connection: add conn_get_src() and conn_get_dst() MINOR: frontend: switch to conn_get_{src,dst}() for logging and debugging MINOR: backend: switch to conn_get_{src,dst}() for port and address mapping MINOR: ssl: switch to conn_get_dst() to retrieve the destination address MINOR: tcp: replace various calls to conn_get_{from,to}_addr with conn_get_{src,dst} MINOR: stream-int: use conn_get_{src,dst} in conn_si_send_proxy() MINOR: stream/cli: use conn_get_{src,dst} in "show sess" and "show peers" output MINOR: log: use conn_get_{dst,src}() to retrieve the cli/frt/bck/srv/ addresses MINOR: http/htx: use conn_get_dst() to retrieve the destination address MINOR: lua: use conn_get_{src,dst} to retrieve connection addresses MINOR: http: check the source address via conn_get_src() in sample fetch functions CLEANUP: connection: remove the now unused conn_get_{from,to}_addr() MINOR: connection: add new src and dst fields MINOR: connection: use conn->{src,dst} instead of &conn->addr.{from,to} MINOR: ssl-sock: use conn->dst instead of &conn->addr.to MINOR: lua: switch to conn->dst for a connection's target address MINOR: peers: use conn->dst for the peer's target address MINOR: htx: switch from conn->addr.{from,to} to conn->{src,dst} MINOR: stream: switch from conn->addr.{from,to} to conn->{src,dst} MINOR: proxy: switch to conn->src in error snapshots MINOR: session: use conn->src instead of conn->addr.from MINOR: tcp: replace conn->addr.{from,to} with conn->{src,dst} MINOR: unix: use conn->dst for the target address in ->connect() MINOR: sockpair: use conn->dst for the target address in ->connect() MINOR: log: use conn->{src,dst} instead of conn->addr.{from,to} MINOR: checks: replace conn->addr.to with conn->dst MINOR: frontend: switch from conn->addr.{from,to} to conn->{src,dst} MINOR: http: convert conn->addr.from to conn->src in sample fetches MEDIUM: backend: turn all conn->addr.{from,to} to conn->{src,dst} MINOR: connection: create a new pool for struct sockaddr_storage MEDIUM: connection: make sure all address producers allocate their address MAJOR: connection: remove the addr field MINOR: connection: don't use clear_addr() anymore, just release the address MINOR: stream: add a new target_addr entry in the stream structure MAJOR: stream: store the target address into s->target_addr MINOR: peers: now remove the remote connection setup code MEDIUM: lua: do not allocate the remote connection anymore MEDIUM: backend: always release any existing prior connection in connect_server() MEDIUM: backend: remove impossible cases from connect_server() BUG/MEDIUM: tcp-checks: do not dereference inexisting conn_stream BUG/MEDIUM: protocols: add a global lock for the init/deinit stuff BUG/MINOR: proxy: always lock stop_proxy() BUILD: threads: add the definition of PROTO_LOCK BUG/MINOR: log: make sure writev() is not interrupted on a file output DOC: improve the wording in CONTRIBUTING about how to document a bug fix BUG/MAJOR: queue/threads: avoid an AB/BA locking issue in process_srv_queue() MEDIUM: mux-h2: don't try to read more than needed BUG/MINOR: debug: fix a small race in the thread dumping code MINOR: wdt: also consider that waiting in the thread dumper is normal REGTESTS: checks: make 4be_1srv_health_checks more reliable BUG/MINOR: stream-int: make sure to always release empty buffers after sending BUG/MINOR: stream-int: also update analysers timeouts on activity BUG/MEDIUM: mux-h2: unbreak receipt of large DATA frames BUG/MEDIUM: mux-h2: split the stream's and connection's window sizes BUG/MINOR: mux-h2: don't refrain from sending an RST_STREAM after another one BUG/MINOR: mux-h2: use CANCEL, not STREAM_CLOSED in h2c_frt_handle_data() BUG/MINOR: mux-h2: do not send REFUSED_STREAM on aborted uploads BUG/MEDIUM: mux-h2: do not recheck a frame type after a state transition BUG/MINOR: mux-h2: always send stream window update before connection's BUG/MINOR: mux-h2: always reset rcvd_s when switching to a new frame BUG/MEDIUM: checks: make sure to close nicely when we're the last to speak CLEANUP: mux-h2: move the demuxed frame check code in its own function BUG/MINOR: pools: don't mark the thread harmless if already isolated BUG/MINOR: buffers/threads: always clear a buffer's head before releasing it CLEANUP: buffer: replace b_drop() with b_free() CLEANUP: task: move the cpu_time field to the task-only part MINOR: cli: add two new states to print messages on the CLI MINOR: cli: add cli_msg(), cli_err(), cli_dynmsg(), cli_dynerr() CLEANUP: cli: replace all occurrences of manual handling of return messages MINOR: fd: make sure to mark the thread as not stuck in fd_update_events() MINOR: debug: indicate the applet name when the task is task_run_applet() MINOR: tools: add append_prefixed_str() MINOR: lua: export applet and task handlers MEDIUM: debug: make the thread dump code show Lua backtraces MINOR: list: add LIST_SPLICE() to merge one list into another MINOR: tools: add a DEFNULL() macro to use NULL for empty args REORG: trace: rename trace.c to calltrace.c and mention it's not thread-safe MINOR: sink: create definitions a minimal code for event sinks MINOR: sink: add a support for file descriptors MINOR: trace: start to create a new trace subsystem MINOR: trace: add allocation of buffer-sized trace buffers MINOR: trace/cli: register the "trace" CLI keyword to list the sources MINOR: trace/cli: parse the "level" argument to configure the trace verbosity MINOR: trace/cli: add "show trace" to report trace state and statistics MINOR: trace: implement a very basic trace() function MINOR: trace: add the file name and line number in the prefix MINOR: trace: make trace() now also take a level in argument MINOR: trace: implement a call to a decode function MINOR: trace: add per-level macros to produce traces MINOR: trace: add a definition of typed arguments to trace() MINOR: trace: make sure to always stop the locking when stopping or pausing MINOR: trace: add the possibility to lock on some arguments MINOR: trace: parse the "lock" argument to trace MINOR: trace: retrieve useful pointers and enforce lock-on DOC: management: document the "trace" and "show trace" commands BUILD: trace: make the lockon_ptr const to silence a warning without threads BUG/MEDIUM: mux-h1: do not truncate trailing 0CRLF on buffer boundary BUG/MEDIUM: mux-h1: do not report errors on transfers ending on buffer full BUG/MINOR: mworker: disable SIGPROF on re-exec BUG/MEDIUM: listener/threads: fix an AB/BA locking issue in delete_listener() MINOR: sink: set the fd-type sinks to non-blocking MINOR: tools: add a function varint_bytes() to report the size of a varint MINOR: buffer: add functions to read/write varints from/to buffers MINOR: fd: add fd_write_frag_line() to send a fragmented line to an fd MINOR: sink: now call the generic fd write function MINOR: ring: add a new mechanism for retrieving/storing ring data in buffers MINOR: ring: add a ring_write() function MINOR: ring: add a generic CLI io_handler to dump a ring buffer MINOR: sink: add support for ring buffers MINOR: sink: implement "show events" to show supported sinks and dump the rings MINOR: sink: now report the number of dropped events on output MINOR: trace: support a default callback for the source MINOR: trace: extend the source location to 13 chars MINOR: trace: show thread number and source name in the trace MINOR: trace: change the TRACE() calling convention to put the args and cb last MINOR: tools: add a generic struct "name_desc" for name-description pairs MINOR: trace: replace struct trace_lockon_args with struct name_desc MINOR: trace: change the "payload" level to "data" and move it MINOR: trace: prepend the function name for developer level traces MINOR: trace: also report the trace level in the output MINOR: trace: change the detail_level to per-source verbosity MINOR: mux-h2/trace: register a new trace source with its events MINOR: mux-h2/trace: add the default decoding callback MEDIUM: mux-h2/trace: add lots of traces all over the code MINOR: mux-h2: add functions to convert an h2c/h2s state to a string MINOR: mux-h2/trace: add a new verbosity level "clean" MINOR: mux-h2/trace: only decode the start-line at verbosity other than "minimal" MINOR: mux-h2/trace: always report the h2c/h2s state and flags MINOR: mux-h2/trace: report h2s->id before h2c->dsi for the stream ID CLEANUP: mux-h2/trace: reformat the "received" messages for better alignment CLEANUP: mux-h2/trace: lower-case event names MINOR: trace: extend default event names to 12 chars BUG/MINOR: ring: fix the way watchers are counted MINOR: cli: extend the CLI context with a list and two offsets MINOR: mux-h2/trace: report the connection pointer and state before FRAME_H MEDIUM: ring: implement a wait mode for watchers BUG/MEDIUM: mux-h2/trace: do not dereference h2c->conn after failed idle BUG/MEDIUM: mux-h2/trace: fix missing braces added with traces BUG/MINOR: ring: b_peek_varint() returns a uint64_t, not a size_t CLEANUP: fd: remove leftovers of the fdcache MINOR: fd: add a new "initialized" bit in the fdtab struct MINOR: fd/log/sink: make the non-blocking initialization depend on the initialized bit MEDIUM: log: use the new generic fd_write_frag_line() function MINOR: log: add a target type instead of hacking the address family MEDIUM: log: add support for logging to a ring buffer MEDIUM: fd: remove the FD_EV_POLLED status bit MEDIUM: fd: simplify the fd_*_{recv,send} functions using BTS/BTR MINOR: fd: make updt_fd_polling() a normal function CONTRIB: debug: add new program "poll" to test poll() events BUG/MINOR: checks: stop polling for write when we have nothing left to send BUG/MINOR: checks: start sending the request right after connect() BUG/MINOR: checks: make __event_chk_srv_r() report success before closing BUG/MINOR: checks: do not uselessly poll for reads before the connection is up BUG/MINOR: lb/leastconn: ignore the server weights for empty servers MEDIUM: fd: mark the FD as ready when it's inserted MINOR: fd: add two new calls fd_cond_{recv,send}() MEDIUM: connection: enable reading only once the connection is confirmed MINOR: fd: add two flags ERR and SHUT to describe FD states MEDIUM: fd: do not use the FD_POLL_* flags in the pollers anymore BUG/MEDIUM: connection: don't keep more idle connections than ever needed MINOR: stats: report the number of idle connections for each server BUG/MEDIUM: check/threads: make external checks run exclusively on thread 1 OPTIM: listeners: use tasklets for the multi-queue rings BUILD: makefile: work around yet another GCC fantasy (-Wstring-plus-int) BUG/MEDIUM: checks: make sure the connection is ready before trying to recv CLEANUP: task: remove impossible test CLEANUP: task: cache the task_per_thread pointer MINOR: task: split the tasklet vs task code in process_runnable_tasks() MINOR: task: introduce a thread-local "sched" variable for local scheduler stuff MINOR: h2/trace: indicate 'F' or 'B' to locate the side of an h2c in traces MINOR: h2/trace: report the frame type when known BUG/MINOR: mux-h2: do not wake up blocked streams before the mux is ready MINOR: time: add timeofday_as_iso_us() to return instant time as ISO MINOR: sink: finally implement support for SINK_FMT_{TIMED,ISO} MINOR: sink: change ring buffer "buf0"'s format to "timed" BUG/MEDIUM: mux-h2: don't reject valid frames on closed streams BUG/MEDIUM: fcgi: fix missing list tail in sample fetch registration BUG/MEDIUM: fd: HUP is an error only when write is active Revert "MINOR: cache: allow caching of OPTIONS request" n...@users.noreply.github.com (1): DOC: fixed typo in management.txt ---