Hi Lukas!

On Fri, Jun 30, 2017 at 10:09:56PM +0200, Lukas Tribus wrote:
> Hello Christopher, William, Willy, et all!
> 
> 
> Matt McDonagh reported a regression on discourse [1] in 1.7.6, that
> causes haproxy to ignore "timeout http-keep-alive" when going through
> filters (aka compression is enabled) and also causes logging to be
> delayed.
> 
> Because timeouts are ignored and wrong timeouts strike, performance
> issues are likely (as we don't close idle sessions as expected, we hit
> maxconn sooner, etc).
> 
> The root cause are actually 2 different patches in 1.7 stable. This is
> getting a bit complex here, because in 1.7 both patches cause
> regressions, while in 1.8 only one of those 2 patches actually cause an
> issue.
> 
> 
> We are talking about:
> 2b553de BUG/MINOR: filters: Don't force the stream's wakeup when we wait in 
> flt_end_analyze
> c0c672a BUG/MINOR: http: Fix conditions to clean up a txn and to handle the 
> next request
> 
> 
> Repro config (I used netcat for a HTTP/1.1 request):
> 
> global
>  maxconn 100
>  log 10.0.0.4 syslog debug
> defaults
>  log global
>  mode http
>  option httplog
>  option http-server-close
>  #option http-keep-alive
>  timeout connect 5s
>  timeout client 10s
>  timeout server 20s
>  timeout http-keep-alive 1s
> frontend myfrontend
>  bind :80
>  default_backend mybackend
> backend mybackend
>  compression algo gzip
>  server www www.lan.ltri.eu:80
> 
> 
> In v1.7.4 (everything fine):
> "mode http-server-close":
>   as expected (logs immediately, closes idle keep-alive at
>   "timeout http-keep-alive")
> 
> "mode http-keep-alive":
>   as expected (logs immediately, closes idle keep-alive at
>   "timeout http-keep-alive")
> 
> 
> In v1.7.5 (due to b0c3fd3b BUG/MINOR: filters: Don't force the stream's 
> wakeup when we wait in flt_end_analyze):
> "mode http-server-close":
>   log stalled and keep-alive idle close at "timeout connect";
>   ignores "timeout http-keep-alive"
> 
> "mode http-keep-alive":
>   log stalled and keep-alive idle close at "timeout connect + client";
>   ignores "timeout http-keep-alive"
> 
> 
> In v1.7.6 (due to 73d071e BUG/MINOR: http: Fix conditions to clean up a txn 
> and to handle the next request):
> "mode http-server-close":
>   log stalled and keep-alive idle close at "timeout client";
>   ignores "timeout http-keep-alive"
> 
> "mode http-keep-alive":
>   log stalled for "timeout server"; keep-alive stalled for
>   "timeout server (then log) + timeout http-keep-alive"
> 
> 
> 
> As for 1.8:
> Patches have been applied as per Author-Date, while in 1.7 the
> patches have been applied in reverse order.
> 
> "BUG/MINOR: http: Fix conditions to clean up a txn and to handle the next 
> request"
>  -> does not cause issues in 1.8
> 
> "BUG/MINOR: filters: Don't force the stream's wakeup when we wait in 
> flt_end_analyze"
>  -> has the same effect as in 1.7(.6).
> 
> 
> The 1.6/1.5 situation is unkown at this time.
> 
> 
> Let me know if something is unclear (I'm almost certain it is) ...

Thanks for this very detailed analysis, it really helps!

Christopher, I think we'll need to reconsider the whole chain of fixes,
because I believe some of this started by fixing one issue, each time
unexpectedly causing a new one. Now we have a better view of the
different interactions, we can think again about the initial issues in
different ways, possibly involving a revert of some of the patches.

Regarding 1.6.13, I'm sure there's one bug there (don't remember which
one right now) but 1.6 doesn't have filters so some of the latest issues
don't affect it.

Cheers,
Willy

Reply via email to