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

---

Reply via email to