Hi,
HAProxy 1.9.5 was released on 2019/03/19. It added 81 new commits
after version 1.9.4. I'm sorry it took longer than initially expected
but the complexity of certain bugs creates some reluctance to issue an
intermediary release when you don't fully trust the pending fixes yet.
Only well trusted fixes were merged in this version, others are still
under observation.
Several of them were rather important bugs that are now fixed in 1.9.5 :
- a double free on the unique-id header which can crash the process
when this feature is used. This was added as a fix for a memory leak
on the same feature.
- a bug in the SPOP health check handler which may make haproxy try
to use features the agent advertises but which are not implementer,
making it crash.
- the SPOE per-thread initialization would rely on a wrong agent
pointer derivated from the last one known when parsing the
configuration, making it fail if more than one agent is declared.
- upon exit of the old process, it could happen that a thread quits
while a single other one hold a lock and never releases it, causing
it to fail acquiring it again later and not being able to quit.
Issue reported and fixed by Richard Russo.
- a crash may happen upon exit if a thread closes a listener FD at
the exact same moment antoher thread tries to accept() a pending
connection on it. Issue reported and fixed by Richard Russo.
- a crash could happen with an H2 frontend triggering an error in
the cache because the error response didn't contain a start line
and no analyser was set anymore to add it while the H2 mux used
to expect it.
- there was a small but serious race condition in H2 by which if both
the connection and the upper layer stream close at the exact same
instant, the mux might try to dereference a just closed stream and
crash the process. It was not witnessed though, only found in the
code.
- in case a task is migrated to another thread while being moved out
of the run queue on another one, the scheduler could leave the run
queue spinlock in an inconsistent state. Not observed either but the
possibility looks real (e.g. in checks).
- a bug affects the stats code from 1.5 and above when POST requests are
supported (when admin mode is enabled) : some large POST requests may
end up in a situation where the applet waits for more body and the
analyser cannot send it because the buffer is considered full. This
ultimately freezes the session. Now it is verified that the body length
doesn't exceed what can fit in a request buffer.
There were a number of less important issues related to per-thread
initialization and ordering of initialization depending on the configuration
(e.g. some elements which need to know the thread count which were initialized
too early). Some sample fetch functions would fail in HTX (body_len, base,
and a few others). The MacOS build should be OK now. Interim HTTP 1xx
responses were failing in H2+HTX. There was an issue in H2+HTX+chunked
H1 messages sometimes causing the END_STREAM flag to be lost and the
client or server to time out. Some regex-based HTTP actions would not
work well in HTX mode. There was a race in the remote thread wakeup code
which could sometimes miss a wakeup, randomly causing excessive delays
in certain inter-thread operations like dequeueing pending connections.
The rest is less important or doesn't have an immediately visible effect.
As usual, everyone is encouraged to upgrade.
We still have some difficult changes to do around the abortonclose option
and related stuff which depends on the distinction between the end of a
request and its abortion. Some of this stuff will eventually have to be
backported to 1.9 but don't wait for this to arrive before upgrading as
it's not even done for 2.0-dev and once done, it will require some long
observation first!
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/1.9/src/
Git repository : http://git.haproxy.org/git/haproxy-1.9.git/
Git Web browsing : http://git.haproxy.org/?p=haproxy-1.9.git
Changelog : http://www.haproxy.org/download/1.9/src/CHANGELOG
Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/
Willy
---
Complete changelog :
Ben51Degrees (1):
BUG: 51d: In Hash Trie, multi header matching was affected by the header
names stored globaly.
Bertrand Jacquin (2):
DOC: ssl: Clarify when pre TLSv1.3 cipher can be used
DOC: ssl: Stop documenting ciphers example to use
Christopher Faulet (32):
BUG/MAJOR: spoe: Don't try to get agent config during SPOP healthcheck
BUG/MINOR: config: Reinforce validity check when a process number is
parsed
BUG/MEDIUM: proto_htx: Fix data size update if end of the cookie is
removed
BUG/MEDIUM: mux-h2/htx: Always set CS flags before exiting h2_rcv_buf()
MINOR: h2/htx: Set the flag HTX_SL_F_BODYLESS for messages without body
BUG/MINOR: mux-h1: Add "transfer-encoding" header on outgoing requests if
needed
BUG/MINOR: mux-h2: Don't add ":status" pseudo-header on trailers
BUG/MINOR: proto-htx: Consider a XFER_LEN message as chunked by default
BUG/MEDIUM: h2/htx: Correctly handle interim responses when HTX is enabled
MINOR: mux-h2: Set HTX extra value when possible
BUG/MEDIUM: mux-h1: Report the right amount of data xferred in
h1_rcv_buf()
BUG/MINOR: channel: Set CF_WROTE_DATA when outgoing data are skipped
MINOR: htx: Add function to drain data from an HTX message
MINOR: channel/htx: Add function to skips output bytes from an HTX channel
BUG/MAJOR: cache/htx: Set the start-line offset when a cached object is
served
BUG/MEDIUM: cache: Get objects from the cache only for GET and HEAD
requests
BUG/MINOR: cache/htx: Return only the headers of cached objects to HEAD
requests
BUG/MINOR: mux-h1: Always initilize h1m variable in h1_process_input()
BUG/MEDIUM: proto_htx: Fix functions applying regex filters on HTX
messages
BUG/MINOR: mux-h1: Don't report an error on EOS if no message was received
BUG/MINOR: stats/htx: Call channel_add_input() when response headers are
sent
BUG/MINOR: lua/htx: Use channel_add_input() when response data are added
BUG/MINOR: lua/htx: Don't forget to call htx_to_buf() when appropriate
MINOR: stats: Add the status code STAT_STATUS_IVAL to handle invalid
requests
MINOR: stats: Move stuff about the stats status codes in stats files
BUG/MINOR: stats: Be more strict on what is a valid request to the stats
applet
BUG/MAJOR: spoe: Fix initialization of thread-dependent fields
BUG/MAJOR: stats: Fix how huge POST data are read from the channel
BUG/MEDIUM: mux-h2: Always wakeup streams with no id to avoid frozen
streams
MINOR: mux-h2: Set REFUSED_STREAM error to reset a stream if no data was
never sent
MINOR: muxes: Report the Last read with a dedicated flag
MINOR: proto-http/proto-htx: Make error handling clearer during data
forwarding
Dragan Dosen (3):
BUG/MEDIUM: http_fetch: fix the "base" and "base32" fetch methods in HTX
mode
BUG/MEDIUM: http_fetch: fix "req.body_len" and "req.body_size" fetch
methods in HTX mode
BUG/MEDIUM: 51d: fix possible segfault on deinit_51degrees()
Frédéric Lécaille (1):
DOC: Remove tabs and fixed punctuation.
Lukas Tribus (1):
BUG/MINOR: ssl: fix warning about ssl-min/max-ver support
Olivier Houchard (11):
BUILD/MEDIUM: initcall: Fix build on MacOS.
BUG/MEDIUM: servers: Use atomic operations when handling curr_idle_conns.
BUG/MEDIUM: servers: Add a per-thread counter of idle connections.
BUG/MAJOR: listener: Make sure the listener exist before using it.
BUG/MEDIUM: logs: Only attempt to free startup_logs once.
MINOR: fd: Remove debugging code.
BUG/MEDIUM: listeners: Don't call fd_stop_recv() if fd_updt is NULL.
MEDIUM: threads: Use __ATOMIC_SEQ_CST when using the newer atomic API.
BUG/MAJOR: tasks: Use the TASK_GLOBAL flag to know if we're in the global
rq.
BUG/MEDIUM: tasks: Make sure we wake sleeping threads if needed.
MINOR: cfgparse: Add a cast to make gcc happier.
Richard Russo (1):
BUG/MAJOR: fd/threads, task/threads: ensure all spin locks are unlocked
Willy Tarreau (29):
BUG/MINOR: spoe: do not assume agent->rt is valid on exit
BUG/MINOR: lua: initialize the correct idle conn lists for the SSL sockets
BUG/MEDIUM: spoe: initialization depending on nbthread must be done last
BUG/MEDIUM: server: initialize the idle conns list after parsing the
config
CLEANUP: server: fix indentation mess on idle connections
BUG/MEDIUM: server: initialize the orphaned conns lists and tasks at the
end
BUG/MINOR: mux-h1: verify the request's version before dropping
connection: keep-alive
BUG/MAJOR: stream: avoid double free on unique_id
BUILD/MINOR: stream: avoid a build warning with threads disabled
BUILD/MINOR: tools: fix build warning in the date conversion functions
BUILD/MINOR: peers: remove an impossible null test in intencode()
BUILD/MINOR: htx: fix some potential null-deref warnings with
http_find_stline
BUG/MEDIUM: htx: count the amount of copied data towards the final count
BUG/MEDIUM: mux-h2/htx: send an empty DATA frame on empty HTX trailers
BUG/MEDIUM: h2: advertise to servers that we don't support push
BUG/MINOR: listener: keep accept rate counters accurate under saturation
MINOR: global: keep a copy of the initial rlim_fd_cur and rlim_fd_max
values
BUG/MINOR: init: never lower rlim_fd_max
BUG/MINOR: checks: make external-checks restore the original
rlim_fd_cur/max
BUG/MINOR: mworker: be careful to restore the original rlim_fd_cur/max on
reload
BUG/MAJOR: mux-h2: fix race condition between close on both ends
MINOR: htx: unconditionally handle parsing errors in requests or responses
MINOR: mux-h2: always pass HTX_FL_PARSING_ERROR between h2s and buf on RX
BUG/MEDIUM: h2/htx: verify that :path doesn't contain invalid chars
BUG/MEDIUM: threads/fd: do not forget to take into account epoll_fd/pipes
REGTEST: fix a spurious "nbthread 4" in the connection test
BUILD: Makefile: allow the reg-tests target to be verbose
BUILD: Makefile: resolve LEVEL before calling run-regtests
BUG/MINOR: http/counters: fix missing increment of fe->srv_aborts
---