Hi,
HAProxy 2.0-dev3 was released on 2019/05/15. It added 393 new commits
after version 2.0-dev2.
This is another huge version, having been distacted by a number of bugs
lately, this one was postponed a bit too much in my taste. As usual for a
development version, I'll skip over the bugfixes which are uninteresting
for this changelog.
The main points of this release are :
- HTX enabled by default on all proxies. The only showstopper used to
be the lack of ability to upgrade from TCP to HTTP in HTX mode when
branching from a TCP frontend to an HTTP backend. Since it now works
there is no reason for staying in legacy mode anymore. This means
that all features (backend H2 etc) are all implicitly allowed without
the need for an extra option. It is still possible to disable HTX in
case of regression or suspicion using "no option http-use-htx". Keep
in mind that any problem ought to be reported as the intent is to
remove legacy mode with 2.1, so 2.0 will be the last one supporting
both modes.
- HTTP/2 is now supported on HTTP/1 ports (in HTX mode). Whenever the
H2 preface is met on an H1 listener, the connection is automatically
switched to H2.
- significant scheduler improvements to improve fairness between all
tasks in multi-threaded mode. There used to be a situation where some
tasks could starve other ones, which was observable by some CLI commands
timing out too early when doing "echo foo|socat"
- lockup bug detection : if a task loops forever and uses all the CPU, this
is a bug and haproxy will be killed. Similarly if a task locks up for a
long time, haproxy is killed. This is enabled for now in development, and
maybe it will stay enabled by default after the release as it would have
helped a number of users to recover faster from some annoying bugs. If you
see haproxy crash in an abort() and dump a core, first you'll know you've
hit a serious bug and it managed to stop it, second keep in mind that
there are developers who could be interested by knowing what was detected
so please don't erase the trace and the core immediately. I still have
some watchdog code under development that is even able to detect dead
locks and crash the process in this case, I need to polish it.
- Layer 7 retries : <rant> many of you know my disgust for such a feature
essentially requested by incompetent admins trying to hide their horribly
bogus applications and who prefer to shoot themselves in the foot instead
of fixing the code, but there are a few valid (read riskless) use cases.
One of them concerns the use of TCP fastopen to connect to the servers.
It is not usable without such retries. Another one concerns 0-RTT to the
servers where it's highly desirable that haproxy retries itself if the
server ignores the early data. In addition to this there are some more
legitimate users with known idempotent applications (static file servers
and applications using replay-safe transaction numbers) where this can
be understandable. The thing is that all these use cases require exactly
the same mechanism. So now that this was implemented, it will also be
available for those who want to do whatever and who will complain that
haproxy multiplies their payment requests or kills all their servers in
a domino effect. They'd rather not complain here or I may reserve them
a selection of not-so-kind words. It is possible to finely enumerate
the situations where a retry is permitted (see "retry-on"), and a few
status codes are permitted (404 was included as this one is sometimes
requested by content providers). In addition there is a new HTTP request
action "disable-l7-retry" which allows to prevent such retries from
happening (e.g. POST to an application not specifically designed to be
replay-safe). Of course it is not enabled by default.</rant>
- TFO is now supported when talking to servers. It is one of the positive
effects of having L7 retries. Similarly 0-RTT can now be replayed without
going back to the client.
- stick-tables can now be declared inside peers sections. Many of those
using tons of stick-tables have many backends with only one stick-table
line. These backends also pollute the stats. And these stick-tables have
to reference a peers section to be synchronized. We figured that since
it is not possible to synchronize stick-tables between multiple peers
sections, it made quite some sense to be able to declare several of
them directly inside peers sections so that they are easily found,
automatically synchronized, and require less configuration. These ones
will be accessible using the peers section name followed by a slash and
the stick-table name.
- http-request/tcp-request action "do-resolve", which takes an argument,
submits it to the DNS resolvers and sets the result back into a variable.
It can be used to resolve anything on the fly. I already hear some people
asking if we'll become a forward proxy, the response is "no" :-) But
Baptiste had a working demo of something like this just for fun.
- log sampling and load balancing. The idea is to specify intervals of
wider ranges for which logs will be sent to a given server. Thus it
is possible for example to send only 1 log every 100 to a server to
perform some sampling, or to send 1/3 to log server 1, 2/3 to log
server 2 and 3/3 to log server 3 and perform some log load balancing.
It's likely that over the long term we could add some hashing rules so
that logs belonging to a same session end up on the same log server,
but one thing at a time :-)
- it is possible to load sidecar programs from the global section using
the "program" keyword in master-worker mode. They will be monitored by
the master process. This is mainly aimed at simplifying some complex
setups and allowing haproxy + extra components to start/stop together.
For example some may want to load a syslog relay. In the very distant
past we could have imagined loading stud or stunnel to offload SSL.
- idle server connections are better controlled now so that we don't
enter a situation where a single session could collect tons of them
and not reuse them. Some heuristics are applied so that we give back
idle connections more often.
- the WURFL device detection was reintroduced. The Scientiamobile team
has done a pretty good job at addressing all the issues that were
raised and led to their removal so there was no reason to keep them
out anymore. One nice improvement is that they provided a dummy library
which allows to compile their code without any external dependency.
This was the main issue developers were facing, and it turned out to
be quite easy. Thus DeviceAtlas followed on the same principle and
51Degrees said they'll contribute such a thing soon as well. It will
then be possible to detect internal API regressions affecting any of
them during development so that these issues should only be bad
memories by now. We should even enable them in Travis builds by the
way. There are still a few WURFL patches pending for review but
nothing dramatic.
- DeviceAtlas implemented support for HTX mode, so it's already 2.0-ready
as well.
- some systemd unit file changes were brought to ease the activation of
the master socket. My understanding is that it will look at a few config
files to figure the options passed on the command line so it should work
on multiple distros.
- Just like we used to rely on "hard-stop-after" to limit the number of
old processes upon reload, it is now possible to limit the number of
reloads a process survives (see "mworker-max-reloads") before being
actively killed. Those reloading very frequently will probably like
this one!
- new "set-dumpable" global keyword. It tries its best to re-enable
core dumps. It will do the equivalent of "ulimit -c unlimited" and
of enabling dumps after setuid, which should save lots of trouble
to users willing to provide some help on bug reports.
- lots of cleanups and reorganization of the regtests. They have a
real name now, which is more convenient to manipulate them, and their
dependencies are cleaner as they can depend on individual build options.
- I discovered an old SPOA server that Thierry implemented more than one
year ago, and which provides SPOA to Python and Lua programs. I could
verify that it starts so I merged it, it can be useful to a number of
people, including developers who want an example of a more complex
application than the basic examples.
- Travis-CI integration : the patches we push are now automatically tested
in about a dozen of setups (OS, SSL versions) and the reg tests are run.
This has already saved quite some time to detect bugs. Thanks to Ilya
for working on this.
- addressed some build issues, mainly old AIX support and LibreSSL
compatibility issues caused by their creative numbering (they pretend
to be OpenSSL 2.0.0, complicating many compatibility tests). Now it
should not break every morning anymore. Also some build issues of the
"ist" strings affecting at least Cygwin should be addressed now (once
I get a confirmation I can backport this to 1.9).
Yes I know it's a long list. There are still a few things pending but we're
seeing the end of the tunnel. Some SSL layering changes that will be needed
for QUIC were started and are currently being finished. I really want to
have them in 2.0 so that we don't have two distinct architectures to deal
with between 2.0 (which is long-term supported) and 2.1+. Manu has proposed
the support of Solaris' event ports as a much better poller than poll(). I
reviewed it, he's doing the final polishing and should be ready soon. Some
deprecated keywords which do not generate a warning should be addressed as
well or we'll never manage to get rid of them. I know that Christopher is
still addressing some HTX design concepts that could make the long term
maintenance much easier and that I'd rather see merged early. Tim already
has some patches for this. Alec Liu proposed to integrate the support of
SOCKS4. At first I was a bit worried but it turns out the protocol could
be supported in a very non-intrusive way so if it's ready in time I'm fine
with integrating it. I'm aware of a few other things people are working
on, we'll see. I'm not disclosing them to avoid putting needless pressure!
I've also seen based on recent reports and patch submissions that a few
harmless bugs here and there might still be present, but nothing to be
alarmed of. Given that recently we've been working on lots of bug reports
and that things start to cool down, I'm considering that we're getting much
better.
I'd like to emit a new -dev release next week with the rest of the pending
stuff, aiming at a final release by the end of this month. Please do test
and report issues so that we don't get all of them in the last 3 days as
usual. We all know releases slip a bit and I'm fine with this, but at
least I'd like this to be for a good reason. Oh and keep in mind, this
is *development* so please be careful with it. We all really appreciate
to see bugs reported on live traffic but please don't use it as an excuse
for switching all your LBs on it, or it may bite you hard!
I'm going to open a -next branch to collect the pending stuff for 2.1. This
one will periodically be rebased on top of master so that it can become the
next master after the release.
Have fun!
Willy
---
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 :
Apollon Oikonomopoulos (1):
MINOR: systemd: Use the variables from /etc/default/haproxy
Baptiste Assmann (5):
MINOR: proto_tcp: tcp-request content: enable set-dst and set-dst-var
MINOR: dns: dns_requester structures are now in a memory pool
MINOR: dns: move callback affection in dns_link_resolution()
MINOR: obj_type: new object type for struct stream
MINOR: action: new '(http-request|tcp-request content) do-resolve' action
Chris Packham (1):
BUILD: threads: Add __ha_cas_dw fallback for single threaded builds
Christopher Faulet (79):
BUG/MINOR: contrib/prometheus-exporter: Fix applet accordingly to recent
changes
BUG/MINOR: mux-h1: Only skip invalid C-L headers on output
BUG/MINOR: htx: Preserve empty HTX messages with an unprocessed parsing
error
BUG/MINOR: proto_htx: Reset to_forward value when a message is set to DONE
REGTEST: http-capture/h00000: Relax a regex matching the log message
REGTEST: http-messaging/h00000: Fix the test when the HTX is enabled
REGTEST: http-rules/h00003: Use a different client for requests expecting
a 301
REGTEST: log/b00000: Be sure the client always hits its timeout
REGTEST: lua/b00003: Relax the regex matching the log message
REGTEST: lua/b00003: Specify the HAProxy pid when the command ss is
executed
BUG/MEDIUM: spoe: Queue message only if no SPOE applet is attached to the
stream
BUG/MEDIUM: spoe: Return an error if nothing is encoded for fragmented
messages
BUG/MINOR: spoe: Be sure to set tv_request when each message fragment is
encoded
BUG/MEDIUM: htx: Defrag if blocks position is changed and the payloads
wrap
BUG/MEDIUM: htx: Don't crush blocks payload when append is done on a data
block
MEDIUM: htx: Deprecate the option 'http-tunnel' and ignore it in HTX
MINOR: proto_htx: Don't adjust transaction mode anymore in HTX analyzers
BUG/MEDIUM: htx: Fix the process of HTTP CONNECT with h2 connections
MINOR: mux-h1: Simplify handling of 1xx responses
MINOR: stats/htx: Don't add "Connection: close" header anymore in stats
responses
MEDIUM: h1: Add an option to sanitize connection headers during parsing
MEDIUM: mux-h1: Simplify the connection mode management by sanitizing
headers
MINOR: mux-h1: Don't release the conn_stream anymore when h1s is destroyed
BUG/MINOR: mux-h1: Handle the flag CS_FL_KILL_CONN during a shutdown
read/write
MINOR: mux-h2: Add a mux_ops dedicated to the HTX mode
MINOR: muxes: Add a flag to specify a multiplexer uses the HTX
MINOR: stream: Set a flag when the stream uses the HTX
MINOR: http: update the macro IS_HTX_STRM() to check the stream flag
SF_HTX
MINOR: http_fetch/htx: Use stream flags instead of px mode in
smp_prefetch_htx
MINOR: filters/htx: Use stream flags instead of px mode to instanciate a
filter
MINOR: muxes: Rely on conn_is_back() during init to handle front/back conn
MEDIUM: muxes: Add an optional input buffer during mux initialization
MINOR: muxes: Pass the context of the mux to destroy() instead of the
connection
MEDIUM: muxes: Be prepared to don't own connection during the release
MEDIUM: connection: Add conn_upgrade_mux_fe() to handle mux upgrades
MEDIUM: htx: Allow the option http-use-htx to be used on TCP proxies too
MAJOR: proxy/htx: Handle mux upgrades from TCP to HTTP in HTX mode
MAJOR: muxes/htx: Handle inplicit upgrades from h1 to h2
MAJOR: htx: Enable the HTX mode by default for all proxies
REGTEST: Use HTX by default and add '--no-htx' option to disable it
BUG/MEDIUM: muxes: Don't dereference mux context if null in release
functions
BUG/MINOR: mux-h1: Process input even if the input buffer is empty
BUG/MINOR: mux-h1: Don't switch the parser in busy mode if other side has
done
BUG/MEDIUM: mux-h1: Notify the stream waiting for TCP splicing if ibuf is
empty
BUG/MEDIUM: mux-h1: Enable TCP splicing to exchange data only
MINOR: mux-h1: Handle read0 during TCP splicing
BUG/MEDIUM: htx: Don't return the start-line if the HTX message is empty
BUG/MAJOR: http_fetch: Get the channel depending on the keyword used
BUG/MINOR: http_fetch/htx: Allow permissive sample prefetch for the HTX
BUG/MINOR: http_fetch/htx: Use HTX versions if the proxy enables the HTX
mode
BUG/MINOR: contrib/prometheus-exporter: Fix a typo in the run-queue
metric type
MINOR: contrib/prometheus-exporter: Remove usless rate metrics
MINOR: contrib/prometheus-exporter: Rename some metrics to be more usable
MINOR: contrib/prometheus-exporter: Follow best practices about metrics
type
BUG/MEDIUM: h1: Don't parse chunks CRLF if not enough data are available
BUG/MEDIUM: thread/http: Add missing locks in set-map and add-acl HTTP
rules
BUG/MEDIUM: stream: Don't request a server connection if a shutw was
scheduled
BUG/MINOR: 51d: Get the request channel to call CHECK_HTTP_MESSAGE_FIRST()
BUG/MINOR: da: Get the request channel to call CHECK_HTTP_MESSAGE_FIRST()
MINOR: gcc: Fix a silly gcc warning in connect_server()
BUG/MEDIUM: stream: Fix the way early aborts on the client side are
handled
BUG/MINOR: spoe: Don't systematically wakeup SPOE stream in the applet
handler
BUG/MAJOR: muxes: Use the HTX mode to find the best mux for HTTP proxies
only
BUG/MINOR: htx: Exclude TCP proxies when the HTX mode is handled during
startup
BUG/MINOR: http: Call stream_inc_be_http_req_ctr() only one time per
request
MINOR: spoe: Use the sample context to pass frag_ctx info during encoding
BUG/MEDIUM: listener: Fix how unlimited number of consecutive accepts is
handled
MINOR: config: Test validity of tune.maxaccept during the config parsing
CLEANUP: config: Don't alter listener->maxaccept when nbproc is set to 1
BUG/MEDIUM: spoe: Be sure the sample is found before setting its context
BUG/MINOR: mux-h1: Fix the parsing of trailers
BUG/MINOR: htx: Never transfer more than expected in htx_xfer_blks()
MINOR: htx: Split on DATA blocks only when blocks are moved to an HTX
message
MINOR: htx: Don't try to append a trailer block with the previous one
MINOR: htx: Remove support for unused OOB HTX blocks
BUG/MINOR: stream: Attach the read side on the response as soon as
possible
BUG/MEDIUM: http: Use pointer to the begining of input to parse message
headers
MINOR: spoe: Set the argument chunk size to 0 when SPOE variables are
checked
BUG/MEDIUM: mux-h2: Set EOI on the conn_stream during h2_rcv_buf()
David CARLIER (1):
MEDIUM: da: HTX mode support.
David Carlier (2):
BUILD/MINOR: listener: Silent a few signedness warnings.
BUILD/MEDIUM: contrib: Dummy DeviceAtlas API.
Dragan Dosen (7):
BUG/MINOR: haproxy: fix rule->file memory leak
BUG/MINOR: log: properly free memory on logformat parse error and deinit()
BUG/MINOR: checks: free memory allocated for tasklets
BUG/MEDIUM: pattern: fix memory leak in regex pattern functions
MEDIUM: regex: modify regex_comp() to atomically allocate/free the
my_regex struct
BUG/MEDIUM: stick-table: fix regression caused by a change in proxy struct
BUG/MEDIUM: tasks: fix possible segfault on task_destroy()
Emeric Brun (3):
BUG/MEDIUM: peers: fix a case where peer session is not cleanly reset on
release.
MINOR: peers: adds counters on show peers about tasks calls.
MINOR: ssl/cli: async fd io-handlers printable on show fd
Emmanuel Hocdet (1):
MINOR: ssl: Activate aes_gcm_dec converter for BoringSSL
Freddy Spierenburg (1):
DOC: The option httplog is no longer valid in a backend.
Frédéric Lécaille (1):
REGTEST: Missing REQUIRE_VERSION declarations.
Frédéric Lécaille (32):
BUG/MINOR: peers: Really close the sessions with no heartbeat.
CLEANUP: peers: remove useless annoying tabulations.
CLEANUP: peers: replace timeout constants by macros.
REGTEST: Enable again reg tests with HEAD HTTP method usage.
DOC: peers: Peers protocol documentation update.
BUG/MINOR: peers: Missing initializations after peer session shutdown.
MINOR: peers: Add a new command to the CLI for peers.
DOC: update for "show peers" CLI command.
MINOR: log: Extract some code to send syslog messages.
REGTEST: replace LEVEL option by a more human readable one.
REGTEST: rename the reg test files.
REGTEST: adapt some reg tests after renaming.
BUG/MAJOR: stream: Missing DNS context initializations.
MINOR: log: Add "sample" new keyword to "log" lines.
MINOR: log: Enable the log sampling and load-balancing feature.
DOC: log: Document the sampling and load-balancing logging feature.
REGTEST: Add a new reg test for log load-balancing feature.
REGTEST: Make this reg test be Linux specific.
BUILD: travis: TMPDIR replacement.
MINOR: config: Extract the code of "stick-table" line parsing.
BUILD/MINOR: stick-table: Compilation fix.
MEDIUM: stick-table: Stop handling stick-tables as proxies.
MINOR: stick-tables: Add peers process binding computing.
MINOR: stick-table: Add prefixes to stick-table names.
MINOR: peers: Do not emit global stick-table names.
DOC: Update for "table" lines in "peers" section.
REGTEST: Add reg tests for "table" lines in "peers" sections.
REGTEST: Flag some slow reg tests.
REGTEST: Reg tests file renaming.
REGTEST: Wrong renaming for one reg test.
REGTEST: Wrong assumption in IP:port logging test.
BUG/MINOR: log: Wrong log format initialization.
Ilya Shipitsin (11):
REGTESTS: exclude tests that require ssl, pcre if no such feature is
enabled
MEDIUM: enable travis-ci builds
BUG/MEDIUM: servers: fix typo "src" instead of "srv"
BUILD: extend travis-ci matrix
BUILD: remove "build_libressl" duplicate declaration
BUILD: travis-ci: get back to osx without openssl support
BUILD: enable several LibreSSL hacks, including
BUILD: temporarily mark LibreSSL builds as allowed to fail
BUILD: travis-ci bugfixes and improvements
BUILD: add BoringSSL to travis-ci build matrix
BUILD: travis-ci: make TMPDIR global variable in travis-ci
Kevin Zhu (1):
BUG/MEDIUM: spoe: arg len encoded in previous frag frame but len changed
Nenad Merdanovic (3):
MINOR: ssl: Add aes_gcm_dec converter
BUG/MEDIUM: map: Fix memory leak in the map converter
BUG/MINOR: ssl: Fix 48 byte TLS ticket key rotation
Olivier Houchard (55):
BUG/MEDIUM: checks: Don't bother subscribing if we have a connection
error.
BUG/MEDIUM: h2: Don't attempt to recv from h2_process_demux if we
subscribed.
BUG/MEDIUM: streams: Don't remove the SI_FL_ERR flag in si_update_both().
BUG/MEDIUM: streams: Store prev_state before calling si_update_both().
BUG/MEDIUM: stream: Don't clear the stream_interface flags in
si_update_both.
MINOR: initcall: Don't forget to define the __start/stop_init_##stg
symbols.
MINOR: threads: Implement thread_cpus_enabled() for FreeBSD.
BUG/MEDIUM: streams: Only re-run process_stream if we're in a connected
state.
BUG/MEDIUM: stream_interface: Don't bother doing chk_rcv/snd if not
connected.
BUG/MEDIUM: muxes: Make sure we unsubcribed when destroying mux ctx.
BUG/MEDIUM: h2: Make sure we're not already in the send_list in
h2_subscribe().
BUG/MEDIUM: h2: Revamp the way send subscriptions works.
MINOR: connections: Remove the SUB_CALL_UNSUBSCRIBE flag.
BUG/MEDIUM: Threads: Only use the gcc >= 4.7 builtins when using gcc >=
4.7.
BUG/MEDIUM: tasks: Make sure we modify global_tasks_mask with the rq_lock.
MINOR: tasks: Don't consider we can wake task with tasklet_wakeup().
MEDIUM: tasks: No longer use rq.node.leaf_p as a lock.
MINOR: tasks: Don't set the TASK_RUNNING flag when adding in the tasklet
list.
BUG/MEDIUM: applets: Don't use task_in_rq().
MEDIUM: tasks: Merge task_delete() and task_free() into task_destroy().
MEDIUM: tasks: Don't account a destroyed task as a runned task.
MEDIUM: tasks: Use __ha_barrier_store after modifying global_tasks_mask.
MEDIUM: ssl: Give ssl_sock its own context.
MEDIUM: connections: Move some fields from struct connection to
ssl_sock_ctx.
MEDIUM: ssl: provide its own subscribe/unsubscribe function.
MEDIUM: connections: Provide a xprt_ctx for each xprt method.
MEDIUM: ssl: provide our own BIO.
BUILD/medium: ssl: Fix build with OpenSSL < 1.1.0
MINOR: fd: Add a counter of used fds.
MEDIUM: connections: Add a way to control the number of idling
connections.
BUG/MEDIUM: ssl: Return -1 on recv/send if we got EAGAIN.
MINOR: threads: Implement HA_ATOMIC_LOAD().
BUG/MEDIUM: port_range: Make the ring buffer lock-free.
BUG/MEDIUM: ssl: Don't pretend we can retry a recv/send if we got a
shutr/w.
BUG/MEDIUM: channels: Don't forget to reset output in channel_erase().
BUG/MEDIUM: connections: Make sure we remove CO_FL_SESS_IDLE on disown.
BUG/MEDIUM: ssl: Use the early_data API the right way.
BUG/MEDIUM: streams: Don't add CF_WRITE_ERROR if early data were rejected.
MEDIUM: streams: Add the ability to retry a request on L7 failure.
MEDIUM: streams: Add a way to replay failed 0rtt requests.
MEDIUM: streams: Add a new keyword for retry-on, "junk-response"
BUG/MEDIUM: ssl: Don't attempt to use early data with libressl.
MINOR: doc: Document allow-0rtt on the server line.
MINOR: doc: Document the interaction of allow-0rtt and retry-on
0rtt-rejected.
MEDIUM: proto: Change the prototype of the connect() method.
BUG/MEDIUM: servers: Don't use the same srv flag for cookie-set and TFO.
BUG/MEDIUM: h2: Make sure we set send_list to NULL in h2_detach().
BUG/MEDIUM: h2: Don't check send_wait to know if we're in the send_list.
BUG/MEDIUM: streams: Make sur SI_FL_L7_RETRY is set before attempting a
retry.
MEDIUM: streams: Add a new http action, disable-l7-retry.
MINOR: streams: Introduce a new retry-on keyword, all-retryable-errors.
BUG/MEDIUM: connections: Don't forget to set xprt_ctx to NULL on close.
MINOR: h2: Use BUG_ON() to enforce rules in subscribe/unsubscribe.
MINOR: h1: Use BUG_ON() to enforce rules in subscribe/unsubscribe.
MINOR: connections: Use BUG_ON() to enforce rules in
subscribe/unsubscribe.
Ricardo Nabinger Sanchez (1):
BUG/MAJOR: checks: segfault during tcpcheck_main
Rob Allen (1):
BUG/MINOR: mworker/ssl: close OpenSSL FDs on reload
Robin H. Johnson (1):
MINOR: skip get_gmtime where tm is unused
Thierry FOURNIER (14):
MINOR: spoa-server: Clone the v1.7 spoa-example project
MINOR: spoa-server: move some definition from spoa_server.c to
spoa_server.h
MINOR: spoa-server: Externalise debug functions
MINOR: spoe-server: rename "worker" functions
MINOR: spoa-server: Replace the thread init system by processes
MINOR: spoa-server: With debug mode, start only one process
MINOR: spoa-server: Allow registering external processes
MINOR: spoa-server: Allow registering message processors
MINOR: spoa-server: Load files
MINOR: spoa-server: Prepare responses
MINOR: spoa-server: Execute registered callbacks
MINOR: spoa-server: Add Lua processing
MINOR: spoa-server: Add python
MINOR/DOC: spoe-server: Add documentation
Tim Duesterhus (7):
BUILD: extend Travis CI config to support more platforms
CLEANUP: Remove appsession documentation
DOC: Fix typo in keyword matrix
MINOR: systemd: Make use of master socket in systemd unit
BUG/MINOR: vars: Fix memory leak in vars_check_arg
BUG/MINOR: peers: Fix memory leak in cfg_parse_peers
BUG/MINOR: vars: Fix memory leak in vars_check_arg
William Lallemand (28):
BUG/MEDIUM: mworker: don't free the wrong child when not found
REORG: mworker: move serializing functions to mworker.c
REORG: mworker: move signals functions to mworker.c
REORG: mworker: move IPC functions to mworker.c
REORG: mworker: move signal handlers and related functions
REORG: mworker: move mworker_cleanlisteners to mworker.c
MINOR: mworker: calloc mworker_proc structures
MINOR: mworker: don't use children variable anymore
MINOR: cli: export cli_parse_default() definition in cli.h
REORG: mworker/cli: move CLI functions to mworker.c
MEDIUM: mworker-prog: implement program for master-worker
MINOR: mworker/cli: show programs in 'show proc'
BUG/MINOR: cli: correctly handle abns in 'show cli sockets'
MINOR: cli: start addresses by a prefix in 'show cli sockets'
MINOR: cli: export HAPROXY_CLI environment variable
MEDIUM: mworker: store the leaving state of a process
MEDIUM: mworker-prog: implements 'option start-on-reload'
CLEANUP: mworker: remove the type field in mworker_proc
MEDIUM: mworker/cli: export the HAPROXY_MASTER_CLI variable
MINOR: cli: don't add a semicolon at the end of HAPROXY_CLI
MINOR: mworker: export HAPROXY_MWORKER=1 when running in mworker mode
BUG/MINOR: mworker: mworker_kill should apply on every children
BUG/MINOR: mworker: don't exit with an ambiguous value
BUG/MINOR: mworker: ensure that we still quits with SIGINT
MINOR: systemd: support /etc/sysconfig/ for redhat based distrib
MINOR: mworker: support a configurable maximum number of reloads
BUG/MAJOR: ssl: segfault upon an heartbeat request
BUG/MINOR: mworker: use after free when the PID not assigned
Willy Tarreau (130):
REGTEST: remove unexpected "nbthread" statement from Lua test cases
BUILD: Makefile: remove 11-years old workarounds for deprecated options
BUILD: remove 10-years old error message for obsolete option USE_TCPSPLICE
BUILD: Makefile: remove outdated support for dlmalloc
BUILD: Makefile: consider a variable's origin and not its value for the
options list
BUILD: Makefile: also report disabled options in the BUILD_OPTIONS
variable
BUILD: Makefile: shorten default settings declaration
BUILD: Makefile: clean up the target declarations
BUILD: report the whole feature set with their status in haproxy -vv
BUILD: pass all "USE_*" variables as -DUSE_* to the compiler
REGTEST: script: make the script use the new features list
REGTEST: script: remove platform-specific assigments of OPTIONS
BUILD: makefile: work around an old bug in GNU make-3.80
BUILD: makefile: work around another bug in make 3.80
BUILD: http: properly mark some struct as extern
BUILD: chunk: properly declare pool_head_trash as extern
BUILD: cache: avoid a build warning with some compilers/linkers
MINOR: tools: make memvprintf() never pass a NULL target to vsnprintf()
MINOR: tools: add an unsetenv() implementation
BUILD: re-implement an initcall variant without using executable sections
BUILD: use inttypes.h instead of stdint.h
BUILD: connection: fix naming of ip_v field
BUILD: makefile: fix build of IPv6 header on aix51
BUILD: makefile: add _LINUX_SOURCE_COMPAT to build on AIX-51
BUILD: define unsetenv on AIX 5.1
BUILD: Makefile: disable shared cache on AIX 5.1
BUG/MEDIUM: htx: fix random premature abort of data transfers
BUG/MEDIUM: pattern: assign pattern IDs after checking the config validity
BUG/MEDIUM: task/threads: address a fairness issue between local and
global tasks
BUG/MINOR: tasks: make sure the first task to be queued keeps its nice
value
BUG/MINOR: listener: renice the accept ring processing task
MINOR: cli/listener: report the number of accepts on "show activity"
MINOR: cli/activity: report the accept queue sizes in "show activity"
CLEANUP: task: do not export rq_next anymore
MEDIUM: tasks: improve fairness between the local and global queues
MEDIUM: tasks: only base the nice offset on the run queue depth
MINOR: tasks: restore the lower latency scheduling when niced tasks are
present
BUILD: task/thread: fix single-threaded build of task.c
BUILD: cli/threads: fix build in single-threaded mode
BUILD: address a few cases of "static <type> inline foo()"
BUILD: do not specify "const" on functions returning structs or scalars
BUILD: htx: fix a used uninitialized warning on is_cookie2
BUG/MAJOR: lb/threads: fix insufficient locking on round-robin LB
MINOR: init: add a "set-dumpable" global directive to enable core dumps
BUG/MINOR: listener/mq: correctly scan all bound threads under low load
BUG/MEDIUM: tasks: Make sure we set TASK_QUEUED before adding a task to
the rq.
BUG/MAJOR: task: make sure never to delete a queued task
MINOR: task/thread: factor out a wake-up condition
CLEANUP: task: remain consistent when using the task's handler
BUG/MINOR: mworker: disable busy polling in the master process
BUG/MEDIUM: maps: only try to parse the default value when it's present
BUG/MINOR: acl: properly detect pattern type SMP_T_ADDR
Revert "CLEANUP: wurfl: remove dead, broken and unmaintained code"
BUILD: add USE_WURFL to the list of known build options
MINOR: wurfl: indicate in haproxy -vv the wurfl version in use
REGTEST: make the "run-regtests" script search for tests in reg-tests by
default
BUG/MAJOR: lb/threads: fix AB/BA locking issue in round-robin LB
CLEANUP: task: report calls as unsigned in show sess
MINOR: tasks/activity: report the context switch and task wakeup rates
MINOR: stream: measure and report a stream's call rate in "show sess"
MINOR: applet: measure and report an appctx's call rate in "show sess"
REGTEST: exclude osx and generic targets for 40be_2srv_odd_health_checks
REGTEST: relax the IPv6 address format checks in
converters_ipmask_concat_strcmp_field_word
REGTEST: exclude OSX and generic targets from abns_socket.vtc
BUILD: travis: remove the "allow_failures" entry
BUG/MINOR: activity: always initialize the profiling variable
MINOR: activity: make the profiling status per thread and not global
MINOR: activity: enable automatic profiling turn on/off
CLEANUP: standard: use proper const to addr_to_str() and port_to_str()
BUG/MINOR: proto_http: properly reset the stream's call rate on keep-alive
MINOR: connection: make the debugging helper functions safer
MINOR: stream/debug: make a stream dump and crash function
MEDIUM: appctx/debug: force a crash if an appctx spins over itself forever
MEDIUM: stream/debug: force a crash if a stream spins over itself forever
MEDIUM: streams: measure processing time and abort when detecting bugs
BUG/MEDIUM: mux-h2: properly deal with too large headers frames
BUG/MAJOR: map/acl: real fix segfault during show map/acl on CLI
CLEANUP: task: move the task_per_thread definition to task.h
MINOR: activity: report context switch counts instead of rates
MINOR: threads: flatten the per-thread cpu-map
MINOR: init/threads: remove the useless tids[] array
MINOR: init/threads: make the threads array global
BUG/MINOR: stream: also increment the retry stats counter on L7 retries
BUG/MEDIUM: checks: make sure the warmup task takes the server lock
BUG/MINOR: logs/threads: properly split the log area upon startup
MEDIUM: tcp: add the "tfo" option to support TCP fastopen on the server
REGTEST: make the tls_health_checks test much faster
REGTEST: make the "table in peers" test require v2.0
BUG/MINOR: mux-h2: rely on trailers output not input to turn them to
empty data
BUG/MEDIUM: h2/htx: always fail on too large trailers
MEDIUM: mux-h2: discard contents that are to be sent after a shutdown
BUG/MEDIUM: mux-h2/htx: never wait for EOM when processing trailers
BUG/MEDIUM: h2/htx: never leave a trailers block alone with no EOM block
CLEANUP: task: remove unneeded tests before task_destroy()
BUG/MINOR: mux-h2: fix the condition to close a cs-less h2s on the backend
BUILD: ssl: fix again a libressl build failure after the openssl FD leak
fix
CLEANUP: ssl-sock: use HA_OPENSSL_VERSION_NUMBER instead of
OPENSSL_VERSION_NUMBER
BUILD: ssl: make libressl use its own version numbers
CLEANUP: ssl: remove 57 occurrences of useless tests on
LIBRESSL_VERSION_NUMBER
MINOR: ssl: enable aes_gcm_dec on LibreSSL
BUILD: ssl: fix libressl build again after aes-gcm-enc
REORG: ssl: move openssl-compat from proto to common
REORG: ssl: move some OpenSSL defines from ssl_sock to openssl-compat
CLEANUP: ssl: never include openssl/*.h outside of openssl-compat.h
anymore
CLEANUP: ssl: make inclusion of openssl headers safe
CLEANUP: ssl: move the SSL_OP_* and SSL_MODE_* definitions to
openssl-compat
CLEANUP: ssl: remove ifdef around SSL_CTX_get_extra_chain_certs()
CLEANUP: ssl: move all BIO_* definitions to openssl-compat
BUILD: threads: fix again the __ha_cas_dw() definition
BUG/MAJOR: mux-h2: do not add a stream twice to the send list
Revert "BUG/MINOR: vars: Fix memory leak in vars_check_arg"
BUG/MINOR: htx: make sure to always initialize the HTTP method when
parsing a buffer
REGTEST: fix tls_health_checks random failures on MacOS in Travis-CI
MINOR: lists: add LIST_ADDED() to check if an element belongs to a list
CLEANUP: mux-h2: use LIST_ADDED() instead of LIST_ISEMPTY() where relevant
MINOR: mux-h2: add two H2S flags to report the need for shutr/shutw
CLEANUP: mux-h2: simply use h2s->flags instead of ret in
h2_deferred_shut()
CLEANUP: connection: remove the handle field from the wait_event struct
BUG/MINOR: mux-h2: make the do_shut{r,w} functions more robust against
retries
MINOR: mux-h2: remove useless test on stream ID vs last in wake function
MINOR: mux-h2: make h2_wake_some_streams() not depend on the CS flags
MINOR: mux-h2: make h2s_wake_one_stream() the only function to deal with
CS
MINOR: mux-h2: make h2s_wake_one_stream() not depend on temporary CS flags
BUG/MINOR: mux-h2: make sure to honor KILL_CONN in do_shut{r,w}
CLEANUP: mux-h2: don't test for impossible CS_FL_REOS conditions
MINOR: mux-h2: add macros to check multiple stream states at once
MINOR: mux-h2: stop relying on CS_FL_REOS
BUILD: debug: make gcc not complain on the ABORT_NOW() macro
MINOR: debug: add a new BUG_ON macro
BUILD: ist: turn the lower/upper case tables to literal on obsolete
linkers
Yann Cézard (2):
DOC: contrib/modsecurity: Typos and fix the reject example
BUG/MEDIUM: contrib/modsecurity: If host header is NULL, don't try to
strdup it
paulborile (5):
BUILD: wurfl: build fix for 1.9/2.0 code base
CLEANUP: wurfl: removed deprecated methods
DOC: wurfl: added point of contact in MAINTAINERS file
MINOR: wurfl: enabled multithreading mode
MINOR: contrib: dummy wurfl library
---