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.
		
			
				
	
	
		
			85 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| varnishtest "Test the http-reuse safe mode"
 | |
| 
 | |
| feature ignore_unknown_macro
 | |
| 
 | |
| haproxy h1 -conf {
 | |
|     global
 | |
|     .if feature(THREAD)
 | |
|         thread-groups 1
 | |
|     .endif
 | |
| 
 | |
| 	defaults
 | |
| 		timeout client 30s
 | |
| 		timeout server 30s
 | |
| 		timeout connect 30s
 | |
| 		mode http
 | |
| 
 | |
| 	# limit idle pool to one connection
 | |
| 	# this forces connection reuse for the transaction after the first one
 | |
| 	listen sender
 | |
| 		bind "fd@${feS}"
 | |
| 		http-reuse safe
 | |
| 		http-request set-header client-id %[req.hdr(client-id)] if { req.hdr(client-id) -m found }
 | |
| 		server srv ${h1_feR_addr}:${h1_feR_port} pool-max-conn 1
 | |
| 
 | |
| 	listen receiver
 | |
| 		bind "fd@${feR}"
 | |
| 		http-request set-var(sess.client_id) req.hdr(client-id)
 | |
| 		http-request return status 200
 | |
| 		http-after-response set-header http_first_request %[http_first_req]
 | |
| 		http-after-response set-header client-id %[var(sess.client_id)]
 | |
| } -start
 | |
| 
 | |
| client c1 -connect ${h1_feS_sock} {
 | |
| 	txreq \
 | |
| 	  -hdr "client-id: c1"
 | |
| 	rxresp
 | |
| 	expect resp.http.http_first_request == "1"
 | |
| 
 | |
| 	txreq
 | |
| 	rxresp
 | |
| 	expect resp.http.http_first_request == "0"
 | |
| 	expect resp.http.client-id == "c1"
 | |
| 
 | |
| 	txreq
 | |
| 	rxresp
 | |
| 	expect resp.http.http_first_request == "0"
 | |
| 	expect resp.http.client-id == "c1"
 | |
| } -run
 | |
| 
 | |
| client c2 -connect ${h1_feS_sock} {
 | |
| 	txreq \
 | |
| 	  -hdr "client-id: c2"
 | |
| 	rxresp
 | |
| 	expect resp.http.http_first_request == "1"
 | |
| 	expect resp.http.client-id == "c2"
 | |
| 
 | |
| 	txreq
 | |
| 	rxresp
 | |
| 	expect resp.http.http_first_request == "0"
 | |
| 	expect resp.http.client-id == "c1"
 | |
| 
 | |
| 	txreq
 | |
| 	rxresp
 | |
| 	expect resp.http.http_first_request == "0"
 | |
| 	expect resp.http.client-id == "c1"
 | |
| } -run
 | |
| 
 | |
| client c3 -connect ${h1_feS_sock} {
 | |
| 	txreq \
 | |
| 	  -hdr "client-id: c3"
 | |
| 	rxresp
 | |
| 	expect resp.http.http_first_request == "1"
 | |
| 	expect resp.http.client-id == "c3"
 | |
| 
 | |
| 	txreq
 | |
| 	rxresp
 | |
| 	expect resp.http.http_first_request == "0"
 | |
| 	expect resp.http.client-id == "c1"
 | |
| 
 | |
| 	txreq
 | |
| 	rxresp
 | |
| 	expect resp.http.http_first_request == "0"
 | |
| 	expect resp.http.client-id == "c1"
 | |
| } -run
 |