mirror of
				https://git.haproxy.org/git/haproxy.git/
				synced 2025-10-31 16:41:01 +01:00 
			
		
		
		
	When threads are enabled and running on a machine with multiple CCX or multiple nodes, thread groups are now enabled since 3.3-dev2, causing load-balancing algorithms to randomly fail due to incoming connections spreading over multiple groups and using different load balancing indexes. Let's just force "thread-groups 1" into all configs when threads are enabled to avoid this.
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # commit 70d318c
 | |
| # BUG/MEDIUM: lua: possible CLOSE-WAIT state with '\n' headers
 | |
| #
 | |
| # The Lua parser doesn't takes in account end-of-headers containing
 | |
| # only '\n'. It expects always '\r\n'. If a '\n' is processes the Lua
 | |
| # parser considers it miss 1 byte, and wait indefinitely for new data.
 | |
| #
 | |
| # When the client reaches their timeout, it closes the connection.
 | |
| # This close is not detected and the connection keep in CLOSE-WAIT
 | |
| # state.
 | |
| #
 | |
| # I guess that this patch fix only a visible part of the problem.
 | |
| # If the Lua HTTP parser wait for data, the timeout server or the
 | |
| # connectio closed by the client may stop the applet.
 | |
| 
 | |
| varnishtest "possible CLOSE-WAIT with '\n' headers"
 | |
| #REQUIRE_OPTIONS=LUA
 | |
| #REGTEST_TYPE=bug
 | |
| 
 | |
| feature ignore_unknown_macro
 | |
| 
 | |
| syslog Slog -level info -repeat 100 {
 | |
|     recv info
 | |
|     expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Ta=[0-9]* Tc=[0-9]* Td=[0-9]* Th=[0-9]* Ti=[0-9]* Tq=[0-9]* TR=[0-9]* Tr=[0-9]* Tt=[0-9]* Tw=[0-9]*"
 | |
| } -start
 | |
| 
 | |
| haproxy h1 -conf {
 | |
|     global
 | |
|     .if feature(THREAD)
 | |
|         thread-groups 1
 | |
|     .endif
 | |
| 
 | |
|         tune.lua.bool-sample-conversion normal
 | |
|         lua-load ${testdir}/close_wait_lf.lua
 | |
| 
 | |
|     defaults
 | |
|         timeout client  "${HAPROXY_TEST_TIMEOUT-5s}"
 | |
|         timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
 | |
| 
 | |
|     frontend frt
 | |
|         log ${Slog_addr}:${Slog_port} local0 debug err
 | |
|         log-format Ta=%Ta\ Tc=%Tc\ Td=%Td\ Th=%Th\ Ti=%Ti\ Tq=%Tq\ TR=%TR\ Tr=%Tr\ Tt=%Tt\ Tw=%Tw
 | |
|         mode http
 | |
|         bind "fd@${frt}"
 | |
|         http-request use-service lua.donothing
 | |
| } -start
 | |
| 
 | |
| 
 | |
| client c1 -connect ${h1_frt_sock} -repeat 100  {
 | |
|     send "GET / HTTP/1.1\n\n"
 | |
| } -run
 | |
| 
 | |
| syslog Slog -wait
 | |
| 
 | |
| shell {
 | |
|     set +e
 | |
|     ss -pt | grep CLOSE-WAIT.*haproxy.*pid=${h1_pid}
 | |
|     exit $((!$?))
 | |
| }
 |