Welcome! Log In Create A New Profile

Advanced

[ANNOUNCE] haproxy-1.8.4

Posted by Willy Tarreau 
Willy Tarreau
[ANNOUNCE] haproxy-1.8.4
February 08, 2018 02:30PM
Hi,

HAProxy 1.8.4 was released on 2018/02/08. It added 51 new commits
after version 1.8.3.

There are no very important issue fixed in this version but a number
of small and annoying ones. Overall I'd say that it's quite good and
it can start to make sense to try it for those who hesitated or were
waiting for the initial stability issues to be addressed.

One of the main changes touches the polling system in threaded mode.
While we started with a unified poller when using kqueue and epoll, it
appears that it wasn't the best idea because some threads cannot sleep
due to the activity of others, especially when these other ones are
dealing with long processing (eg: SSL). So we had to change this to
have a per-thread poller and to change the way the polling updates are
propagated down the layers. This possibly seems a bit scary like this
(and it would have scared me as well) but in the end the changes are
not that big and better match the way it works for a single thread.
Thanks to this change we don't face anymore the situation where all
threads suddenly go to 100% because only one is heavily loaded. This
sensitive change also explains the time it took for 1.8.4 to be issued.

The usual lot of master-worker small fixes is present, but the last ones
were very cosmetic (doc updates) so I think we're getting something
solid now.

I must say that I'm currently very satisfied with the way issues are
reported and addressed.

I know that some issues remain and are currently being investigated :
- problem with the cache reported by Pierre Cheynier whereby using
certain sample fetches like "path_end" in an ACL to decide to
cache or not could cause some cache corruption ; let's try to
narrow it down before giving conclusions.

- http-send-name-header apparently struck again, though I failed to
reproduce the problem. It might be an old one that manifests in a
very special situation or time frame.

- several H2 minor issues (DATA padding incorrectly accounted for in
the connection window, DATA frames for closed streams not properly
accounted, RST sometimes in response to an RST). None of them has
a real visible impact in practice so I preferred to issue 1.8.4
first to address the pending issues.

Overall nothing terrible, and we can issue 1.8.5 once these ones are
figured and addressed (and by then we'll get new ones).

To make a long story short, if you're using threads, master-worker,
SPOE or any version before 1.8.3, you should definitely update to avoid
facing already fixed issues. If you're already on 1.8.3 without any of
these features, well, have a look at the changelog below but in general
I'd say there's no emergency for you to update.

Please find the usual URLs below :
Site index : http://www.haproxy.org/
Discourse : http://discourse.haproxy.org/
Sources : http://www.haproxy.org/download/1.8/src/
Git repository : http://git.haproxy.org/git/haproxy-1.8.git/
Git Web browsing : http://git.haproxy.org/?p=haproxy-1.8.git
Changelog : http://www.haproxy.org/download/1.8/src/CHANGELOG
Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/

Willy
---
Complete changelog :
Chris Lane (1):
MINOR: init: emit warning when -sf/-sd cannot parse argument

Christopher Faulet (11):
MINOR: threads/fd: Use a bitfield to know if there are FDs for a thread in the FD cache
BUG/MEDIUM: threads/polling: Use fd_cache_mask instead of fd_cache_num
BUG/MEDIUM: threads/server: Fix deadlock in srv_set_stopping/srv_set_admin_flag
BUG/MEDIUM: checks: Don't try to release undefined conn_stream when a check is freed
BUG/MINOR: kqueue/threads: Don't forget to close kqueue_fd[tid] on each thread
MINOR: threads: Use __decl_hathreads instead of #ifdef/#endif
BUILD: epoll/threads: Add test on MAX_THREADS to avoid warnings when complied without threads
BUILD: kqueue/threads: Add test on MAX_THREADS to avoid warnings when complied without threads
BUG/MINOR: threads: Update labels array because of changes in lock_label enum
BUG/MEDIUM: spoe: Always try to receive or send the frame to detect shutdowns
BUG/MEDIUM: spoe: Allow producer to read and to forward shutdown on request side

David Carlier (1):
BUILD/MINOR: ancient gcc versions atomic fix

Emeric Brun (1):
BUG/MEDIUM: peers: fix expire date wasn't updated if entry is modified remotely.

Jérôme Magnin (2):
DOC: clarify the scope of ssl_fc_is_resumed
DOC: Describe routing impact of using interface keyword on bind lines

Olivier Houchard (3):
MINOR: dns: Handle SRV record weight correctly.
MINOR: servers: Don't report duplicate dyncookies for disabled servers.
MINOR: threads: Fix build when we're not compiling with threads.

Pavlos Parissis (1):
DOC: Mention -Ws in the list of available options

Tim Duesterhus (9):
BUG/MINOR: lua: Fix default value for pattern in Socket.receive
DOC: lua: Fix typos in comments of hlua_socket_receive
BUG/MEDIUM: lua: Fix IPv6 with separate port support for Socket.connect
BUG/MINOR: lua: Fix return value of Socket.settimeout
CLEANUP: sample: Fix comment encoding of sample.c
CLEANUP: sample: Fix outdated comment about sample casts functions
BUG/MINOR: sample: Fix output type of c_ipv62ip
CLEANUP: Fix typo in ARGT_MSK6 comment
BUG/MEDIUM: standard: Fix memory leak in str2ip2()

William Lallemand (2):
BUG/MEDIUM: ssl: cache doesn't release shctx blocks
BUG/MEDIUM: mworker: execvp failure depending on argv[0]

Willy Tarreau (20):
BUG/MEDIUM: h2: properly handle the END_STREAM flag on empty DATA frames
BUILD: ssl: silence a warning when building without NPN nor ALPN support
MINOR: hathreads: add support for gcc < 4.7
BUG/MEDIUM: stream: properly handle client aborts during redispatch
CONTRIB: debug: fix a few flags definitions
BUG/MINOR: poll: too large size allocation for FD events
MINOR: global/threads: move cpu_map at the end of the global struct
MINOR: threads: add a MAX_THREADS define instead of LONGBITS
MINOR: global: add some global activity counters to help debugging
BUG/MEDIUM: fd: maintain a per-thread update mask
MINOR: fd: add a bitmask to indicate that an FD is known by the poller
BUG/MEDIUM: epoll/threads: use one epoll_fd per thread
BUG/MEDIUM: kqueue/threads: use one kqueue_fd per thread
BUG/MEDIUM: threads/mworker: fix a race on startup
BUG/MINOR: mworker: only write to pidfile if it exists
BUG/MINOR: threads: always set an owner to the thread_sync pipe
BUG/MINOR: cli: use global.maxsock and not maxfd to list all FDs
BUG/MINOR: epoll/threads: only call epoll_ctl(DEL) on polled FDs
BUG/MINOR: time/threads: ensure the adjusted time is always correct
BUG/MINOR: config: don't emit a warning when global stats is incompletely configured

---
Aleksandar Lazic
Re: [ANNOUNCE] haproxy-1.8.4
February 08, 2018 08:00PM
Hi.

Am 08.02.2018 um 14:26 schrieb Willy Tarreau:
> Hi,
>
> HAProxy 1.8.4 was released on 2018/02/08. It added 51 new commits
> after version 1.8.3.

Great as always ;-)

The new version is now available on docker hub

https://hub.docker.com/r/me2digital/haproxy18/
https://hub.docker.com/r/me2digital/openshift-ocp-router-hap18/

Best Regards
Aleks

> There are no very important issue fixed in this version but a number
> of small and annoying ones. Overall I'd say that it's quite good and
> it can start to make sense to try it for those who hesitated or were
> waiting for the initial stability issues to be addressed.
>
> One of the main changes touches the polling system in threaded mode.
> While we started with a unified poller when using kqueue and epoll, it
> appears that it wasn't the best idea because some threads cannot sleep
> due to the activity of others, especially when these other ones are
> dealing with long processing (eg: SSL). So we had to change this to
> have a per-thread poller and to change the way the polling updates are
> propagated down the layers. This possibly seems a bit scary like this
> (and it would have scared me as well) but in the end the changes are
> not that big and better match the way it works for a single thread.
> Thanks to this change we don't face anymore the situation where all
> threads suddenly go to 100% because only one is heavily loaded. This
> sensitive change also explains the time it took for 1.8.4 to be issued.
>
> The usual lot of master-worker small fixes is present, but the last ones
> were very cosmetic (doc updates) so I think we're getting something
> solid now.
>
> I must say that I'm currently very satisfied with the way issues are
> reported and addressed.
>
> I know that some issues remain and are currently being investigated :
> - problem with the cache reported by Pierre Cheynier whereby using
> certain sample fetches like "path_end" in an ACL to decide to
> cache or not could cause some cache corruption ; let's try to
> narrow it down before giving conclusions.
>
> - http-send-name-header apparently struck again, though I failed to
> reproduce the problem. It might be an old one that manifests in a
> very special situation or time frame.
>
> - several H2 minor issues (DATA padding incorrectly accounted for in
> the connection window, DATA frames for closed streams not properly
> accounted, RST sometimes in response to an RST). None of them has
> a real visible impact in practice so I preferred to issue 1.8.4
> first to address the pending issues.
>
> Overall nothing terrible, and we can issue 1.8.5 once these ones are
> figured and addressed (and by then we'll get new ones).
>
> To make a long story short, if you're using threads, master-worker,
> SPOE or any version before 1.8.3, you should definitely update to avoid
> facing already fixed issues. If you're already on 1.8.3 without any of
> these features, well, have a look at the changelog below but in general
> I'd say there's no emergency for you to update.
>
> Please find the usual URLs below :
> Site index : http://www.haproxy.org/
> Discourse : http://discourse.haproxy.org/
> Sources : http://www.haproxy.org/download/1.8/src/
> Git repository : http://git.haproxy.org/git/haproxy-1.8.git/
> Git Web browsing : http://git.haproxy.org/?p=haproxy-1.8.git
> Changelog : http://www.haproxy.org/download/1.8/src/CHANGELOG
> Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/
>
> Willy
> ---
> Complete changelog :
> Chris Lane (1):
> MINOR: init: emit warning when -sf/-sd cannot parse argument
>
> Christopher Faulet (11):
> MINOR: threads/fd: Use a bitfield to know if there are FDs for a thread in the FD cache
> BUG/MEDIUM: threads/polling: Use fd_cache_mask instead of fd_cache_num
> BUG/MEDIUM: threads/server: Fix deadlock in srv_set_stopping/srv_set_admin_flag
> BUG/MEDIUM: checks: Don't try to release undefined conn_stream when a check is freed
> BUG/MINOR: kqueue/threads: Don't forget to close kqueue_fd[tid] on each thread
> MINOR: threads: Use __decl_hathreads instead of #ifdef/#endif
> BUILD: epoll/threads: Add test on MAX_THREADS to avoid warnings when complied without threads
> BUILD: kqueue/threads: Add test on MAX_THREADS to avoid warnings when complied without threads
> BUG/MINOR: threads: Update labels array because of changes in lock_label enum
> BUG/MEDIUM: spoe: Always try to receive or send the frame to detect shutdowns
> BUG/MEDIUM: spoe: Allow producer to read and to forward shutdown on request side
>
> David Carlier (1):
> BUILD/MINOR: ancient gcc versions atomic fix
>
> Emeric Brun (1):
> BUG/MEDIUM: peers: fix expire date wasn't updated if entry is modified remotely.
>
> Jérôme Magnin (2):
> DOC: clarify the scope of ssl_fc_is_resumed
> DOC: Describe routing impact of using interface keyword on bind lines
>
> Olivier Houchard (3):
> MINOR: dns: Handle SRV record weight correctly.
> MINOR: servers: Don't report duplicate dyncookies for disabled servers.
> MINOR: threads: Fix build when we're not compiling with threads.
>
> Pavlos Parissis (1):
> DOC: Mention -Ws in the list of available options
>
> Tim Duesterhus (9):
> BUG/MINOR: lua: Fix default value for pattern in Socket.receive
> DOC: lua: Fix typos in comments of hlua_socket_receive
> BUG/MEDIUM: lua: Fix IPv6 with separate port support for Socket.connect
> BUG/MINOR: lua: Fix return value of Socket.settimeout
> CLEANUP: sample: Fix comment encoding of sample.c
> CLEANUP: sample: Fix outdated comment about sample casts functions
> BUG/MINOR: sample: Fix output type of c_ipv62ip
> CLEANUP: Fix typo in ARGT_MSK6 comment
> BUG/MEDIUM: standard: Fix memory leak in str2ip2()
>
> William Lallemand (2):
> BUG/MEDIUM: ssl: cache doesn't release shctx blocks
> BUG/MEDIUM: mworker: execvp failure depending on argv[0]
>
> Willy Tarreau (20):
> BUG/MEDIUM: h2: properly handle the END_STREAM flag on empty DATA frames
> BUILD: ssl: silence a warning when building without NPN nor ALPN support
> MINOR: hathreads: add support for gcc < 4.7
> BUG/MEDIUM: stream: properly handle client aborts during redispatch
> CONTRIB: debug: fix a few flags definitions
> BUG/MINOR: poll: too large size allocation for FD events
> MINOR: global/threads: move cpu_map at the end of the global struct
> MINOR: threads: add a MAX_THREADS define instead of LONGBITS
> MINOR: global: add some global activity counters to help debugging
> BUG/MEDIUM: fd: maintain a per-thread update mask
> MINOR: fd: add a bitmask to indicate that an FD is known by the poller
> BUG/MEDIUM: epoll/threads: use one epoll_fd per thread
> BUG/MEDIUM: kqueue/threads: use one kqueue_fd per thread
> BUG/MEDIUM: threads/mworker: fix a race on startup
> BUG/MINOR: mworker: only write to pidfile if it exists
> BUG/MINOR: threads: always set an owner to the thread_sync pipe
> BUG/MINOR: cli: use global.maxsock and not maxfd to list all FDs
> BUG/MINOR: epoll/threads: only call epoll_ctl(DEL) on polled FDs
> BUG/MINOR: time/threads: ensure the adjusted time is always correct
> BUG/MINOR: config: don't emit a warning when global stats is incompletely configured
>
> ---
>
Sorry, only registered users may post in this forum.

Click here to login