ср, 7 авг. 2024 г. в 18:48, Willy Tarreau <w...@1wt.eu>: > Hi, > > HAProxy 3.1-dev5 was released on 2024/08/07. It added 88 new commits > after version 3.1-dev4. > > There were quite a bunch of fixes this time, spread over various areas > (h2, analysers, jwt, quic, 0-rtt, queues, traces), though nothing exciting > at this point. >
I'm not sure about roadmap of aws-lc support in HAProxy, but from my observation it reached parity with QuicTLS (*) performance of OpenSSL-1.1.1 (in some cases even 20% faster due to assembler implementation) (*) being actively developed by AWS (derived from BoringSSL) (*) all major QUIC features implemented (*) no LTS cycles (( > > We've got a report of a user facing higher loads due to one of the new > safety rules enforcements in the HTTP spec mandating that requests that > contain both Transfer-Encoding and Content-Length had to work in close > mode (to avoid smuggling on possible incompatible intermediary HTTP/1.0 > proxies), so we've added an option to relax this rule when the chain is > trusted. > > On the QUIC side, Chacha20 and 0-RTT were fixed when using the aws-lc > crypto library. A new ruleset "quic-initial" allows to filter packets > during the QUIC handshake. The currently supported actions are "reject", > "accept", "dgram-drop" (for a silent drop), and "send-retry" (to force > a retry when in 0-RTT for example). It can significantly help against > abuses or simply to enforce source-based filtering so that the client > cannot even engage in a handshake. The quic traces will now also indicate > how long a stream spent waiting for flow control, buffers, etc, which > should help us explain why certain requests appear to be slow. Some > Cubic-specific info are now also dumped in "show quic". > > The traces now permit some sources to follow other ones, so that when > a source automatically triggers, the followers will automatically be > enabled as well. One use case is to track the session, allowing to > watch a communication between the frontend and the backend without > being disturbed by the rest of the traffic. We've verified that we > can follow a series of requests from a front QUIC connection to an > HTTP/2 backend. This will allow us to simplify some captures. Also > a new meta-source "all" is supported for some "trace" commands, to > set the sink, the level and the source to follow. This will save a > lot of debugging commands. > > A new pair of sample fetch functions, fs.debug_str() and bs.debug_str() > can be used to complete the logs with useful debugging info from the > lower layers (stream ID, flow-control etc). It appears important to > continue to provide detailed troubleshooting elements because it has > happened quite a few times since we have muxes that some logs would > report an error, a timeout or something unusual and that it was a bit > hard to figure what happened at the lower layers. Obviously with > protocols like H2 and QUIC we can't tell the whole history but it should > help quite a bit. For example the stream's pause times mentioned above > will be there so it will be possible to correlate the request timers > with some such elements. > > A more significant change concerns the loading of configuration files. > Previously they were opened and parsed on the fly just once. With the > pending master startup changes, the starting process will need to check > in the global section if it's supposed to be the master process and stop > there, and the worker will parse its own config. Since /dev/stdin works > and is supported, it's not possible to open it twice. Instead it was > decided that the config is pre-loaded in memory and processed from there > so that it stays buffered. The config size in memory is not much of a > concern given the huge amplification factor (40 to 100x) of a config > represented in memory, so the temporary extra copy of the text-based one > is small. There could be pitfalls, though and it's always interesting to > know if you find something that breaks it. We already know that loading > /dev/zero will make it eat a lot of RAM for example, but we'll rather > address all corner cases as a whole than each of them individually. > > And the rest is as usual, some build fixes, CI updates and doc updates. > > Quite honestly, if you're running large configs and/or are streaming your > configs over SSH to a remote daemon for example, or doing anything fancy, > your feedback on the config loading changes is really important to those > working on this. Normally you should not notice a difference at this step. > > Please find the usual URLs below : > Site index : https://www.haproxy.org/ > Documentation : https://docs.haproxy.org/ > Wiki : https://github.com/haproxy/wiki/wiki > Discourse : https://discourse.haproxy.org/ > Slack channel : https://slack.haproxy.org/ > Issue tracker : https://github.com/haproxy/haproxy/issues > Sources : https://www.haproxy.org/download/3.1/src/ > Git repository : https://git.haproxy.org/git/haproxy.git/ > Git Web browsing : https://git.haproxy.org/?p=haproxy.git > Changelog : https://www.haproxy.org/download/3.1/src/CHANGELOG > Dataplane API : > https://github.com/haproxytech/dataplaneapi/releases/latest > Pending bugs : https://www.haproxy.org/l/pending-bugs > Reviewed bugs : https://www.haproxy.org/l/reviewed-bugs > Code reports : https://www.haproxy.org/l/code-reports > Latest builds : https://www.haproxy.org/l/dev-packages > > Willy > --- > Complete changelog : > Amaury Denoyelle (23): > MINOR: quic: delay Retry emission on quic-force-retry > MEDIUM: quic: implement quic-initial rules > MINOR: quic: support ACL for quic-initial rules > MINOR: quic: pass quic_dgram as obj_type for quic-initial rules > MINOR: quic: implement reject quic-initial action > MINOR: quic: implement send-retry quic-initial rules > BUG/MEDIUM: quic: fix invalid conn reject with CONNECTION_REFUSED > BUG/MEDIUM: quic: prevent conn freeze on 0RTT undeciphered content > MINOR: flags/mux-quic: decode qcc and qcs flags > BUG/MINOR: quic: fix fc_rtt/srtt values > BUG/MIONR: quic: fix fc_lost > BUG/MINOR: h1: do not forward h2c upgrade header token > BUG/MINOR: h2: reject extended connect for h2c protocol > MINOR: quic: convert qc_stream_desc release field to flags > MINOR: quic: implement function to check if STREAM is fully acked > BUG/MEDIUM: quic: handle retransmit for standalone FIN STREAM > MINOR: quic: enforce ACK reception is handled in order > MINOR: mux-quic: define dump functions for QCC and QCS > MINOR: mux-quic: implement debug string for logs > MINOR: quic: dump quic_conn debug string for logs > MINOR: time: define tot_time structure > MINOR: mux-quic: measure QCS lifetime and its blocking state > BUG/MINOR: quic: prevent freeze after early QCS closure > > Aurelien DARRAGON (3): > MEDIUM: sink: assume sft appctx stickiness > BUG/MEDIUM: server/addr: fix tune.events.max-events-at-once event > miss and leak > MINOR: server: ensure max_events_at_once > 0 in server_atomic_sync() > > Christopher Faulet (9): > BUG/MEDIUM: jwt: Clear SSL error queue on error when checking the > signature > DOC: config: Add documentation about spop mode for backends > BUG/MEDIUM: stconn: Report error on SC on send if a previous SE > error was set > BUG/MEDIUM: mux-pt/mux-h1: Release the pipe on connection error on > sending path > BUILD: mux-pt: Use the right name for the sedesc variable > BUG/MEDIUM: http-ana: Report error on write error waiting for the > response > BUG/MEDIUM: h2: Only report early HTX EOM for tunneled streams > BUG/MEDIUM: mux-h2: Propagate term flags to SE on error in > h2s_wake_one_stream > BUG/MEDIUM: peer: Notify the applet won't consume data when it waits > for sync > > Frederic Lecaille (7): > BUG/MINOR: quic: Lack of precision when computing K (cubic only cc) > MINOR: quic: Add information to "show quic" for CUBIC cc. > MINOR: quic: Dump TX in flight bytes vs window values ratio. > MINOR: tcp_sample: Move TCP low level sample fetch function to > control layer > MINOR: quic: Define ->get_info() control layer callback for QUIC > BUG/MINOR: quic: Too shord datagram during O-RTT handshakes (aws-lc > only) > BUG/MINOR: quic: Too short datagram during packet building failures > (aws-lc only) > > Ilia Shipitsin (4): > CI: add weekly QUIC Interop regression against AWS-LC > CI: harden NetBSD builds by ERR=1 > DEV: coccinelle: add a test to detect unchecked strdup() > BUG/MINOR: fcgi-app: handle a possible strdup() failure > > Valentine Krasnobaeva (9): > MINOR: cfgparse: add struct cfgfile to represent config in memory > REORG: tools: move list_append_word to cfgparse > MINOR: startup: adapt list_append_word to use cfgfile > MINOR: cfgparse: add load_cfg_in_mem > MINOR: cfgparse: load_cfg_in_mem: take in account file size > MINOR: tools: add fgets_from_mem > MEDIUM: startup: make read_cfg() return immediately on ENOMEM > MEDIUM: startup: load and parse configs from memory > MINOR: startup: rename readcfgfile in parse_cfg > > William Lallemand (7): > MEDIUM: ssl/quic: implement quic crypto with EVP_AEAD > MINOR: quic: rename confusing wording aes to hp > MEDIUM: quic: add key argument to header protection crypto functions > MEDIUM: quic: implement CHACHA20_POLY1305 for AWS-LC > BUG/MEDIUM: ssl: reactivate 0-RTT for AWS-LC > BUG/MEDIUM: ssl: 0-RTT initialized at the wrong place for AWS-LC > BUILD: ssl: replace USE_OPENSSL_AWSLC by OPENSSL_IS_AWSLC > > Willy Tarreau (26): > MEDIUM: h1: allow to preserve keep-alive on T-E + C-L > BUILD: cfgparse-quic: fix build error on Solaris due to missing > netinet/in.h > MINOR: queue: add a function to check for TOCTOU after queueing > BUG/MEDIUM: queue: deal with a rare TOCTOU in > assign_server_and_queue() > BUG/MINOR: stconn: bs.id and fs.id had their dependencies incorrect > DOC: configuration: fix alphabetical ordering of {bs,fs}.aborted > MINOR: stconn: add a new pair of sf functions {bs,fs}.debug_str > MINOR: mux-h2: implement the debug string for logs > BUG/MINOR: trace/quic: enable conn/session pointer recovery from > quic_conn > BUG/MINOR: trace/quic: permit to lock on frontend/connect/session etc > BUG/MEDIUM: trace: fix null deref in lockon mechanism since > TRACE_ENABLED() > BUG/MINOR: trace: automatically start in waiting mode with "start > <evt>" > BUG/MINOR: trace/quic: make "qconn" selectable as a lockon criterion > BUG/MINOR: quic/trace: make quic_conn_enc_level_init() emit NEW not > CLOSE > MINOR: trace: support setting the sink and level for all sources at > once > MINOR: session/trace: enable very minimal session tracing > MEDIUM: trace: implement a "follow" mechanism > MINOR: trace: move the known trace context into a dedicated struct > MINOR: trace: add a per-source helper to pre-fill the context > MINOR: mux-h2: add a trace context filling helper > MINOR: mux-h1: add a trace context filling helper > MINOR: mux-quic: don't leave dangling pointer after freeing qcs->sd > MINOR: mux-quic: add a trace context filling helper > MINOR: mux-h1/trace: add a state trace on stream creation/upgrade > MINOR: mux-h2/trace: add a state trace on stream creation/destruction > MINOR: mux-h3/trace: add a state trace on stream creation/destruction > > --- > > >