[master] dc37be044 Complete the #3354-saga and also make bereq.bodybytes account only for the actual bytes in the body, not for the (chunked) overhead.

Poul-Henning Kamp phk at FreeBSD.org
Fri Oct 2 11:03:08 UTC 2020


commit dc37be044f1954b3c7dd497e3e7a5a06c5a9bc5a
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Fri Oct 2 11:01:22 2020 +0000

    Complete the #3354-saga and also make bereq.bodybytes account only
    for the actual bytes in the body, not for the (chunked) overhead.

diff --git a/bin/varnishd/http1/cache_http1_deliver.c b/bin/varnishd/http1/cache_http1_deliver.c
index 97c775dbf..9ab9ad711 100644
--- a/bin/varnishd/http1/cache_http1_deliver.c
+++ b/bin/varnishd/http1/cache_http1_deliver.c
@@ -157,17 +157,11 @@ V1D_Deliver(struct req *req, struct boc *boc, int sendbody)
 	sc = V1L_Close(req->wrk, &bytes);
 	AZ(req->wrk->v1l);
 
-	/* Bytes accounting */
-	if (bytes < hdrbytes)
-		req->acct.resp_hdrbytes += bytes;
-	else {
-		req->acct.resp_hdrbytes += hdrbytes;
-		req->acct.resp_bodybytes += bytes - hdrbytes;
-	}
+	req->acct.resp_hdrbytes += hdrbytes;
+	req->acct.resp_bodybytes += VDP_Close(req);
 
 	if (sc == SC_NULL && err && req->sp->fd >= 0)
 		sc = SC_REM_CLOSE;
 	if (sc != SC_NULL)
 		Req_Fail(req, sc);
-	(void)VDP_Close(req);
 }
diff --git a/bin/varnishtest/tests/e00003.vtc b/bin/varnishtest/tests/e00003.vtc
index 929e6515c..be3eb1a21 100644
--- a/bin/varnishtest/tests/e00003.vtc
+++ b/bin/varnishtest/tests/e00003.vtc
@@ -39,8 +39,7 @@ varnish v1 -vcl+backend {
 
 logexpect l1 -v v1 -g request {
 	expect 0 1001   Begin   "^req .* rxreq"
-	# ReqAcct body counts include chunked overhead
-	expect * =	ReqAcct	"^29 0 29 202 104 306$"
+	expect * =	ReqAcct	"^29 0 29 202 75 277$"
 	expect 0 =      End
 } -start
 
@@ -62,9 +61,8 @@ logexpect l4 -v v1 -g request {
 
 logexpect l5 -v v1 -g request {
 	expect * 1005   Begin   "^req .* rxreq"
-	# ReqAcct body counts include chunked overhead
 	# Header bytes is 5 larger than in l1 due to two item X-Varnish hdr
-	expect * =	ReqAcct	"^29 0 29 207 104 311$"
+	expect * =	ReqAcct	"^29 0 29 207 75 282$"
 	expect 0 =      End
 } -start
 
diff --git a/bin/varnishtest/tests/l00003.vtc b/bin/varnishtest/tests/l00003.vtc
index bdc23333c..2a60a7991 100644
--- a/bin/varnishtest/tests/l00003.vtc
+++ b/bin/varnishtest/tests/l00003.vtc
@@ -43,27 +43,27 @@ varnish v1 -vcl+backend {
 # Total:				93 bytes
 
 # Response body:
-# Chunk len				 5 bytes
+# Chunk len				 - bytes
 # 123					 3 bytes
-# Chunk end				 2 bytes
-# Chunk len				 5 bytes
+# Chunk end				 - bytes
+# Chunk len				 - bytes
 # abc					 3 bytes
-# Chunk end				 2 bytes
-# Chunk len				 5 bytes
+# Chunk end				 - bytes
+# Chunk len				 - bytes
 # 123					 3 bytes
-# Chunk end				 2 bytes
-# Chunk len				 5 bytes
+# Chunk end				 - bytes
+# Chunk len				 - bytes
 # def					 3 bytes
-# Chunk end				 2 bytes
-# Chunk len				 5 bytes
+# Chunk end				 - bytes
+# Chunk len				 - bytes
 # ghi					 3 bytes
-# Chunk end				 2 bytes
-# Chunked end				 5 bytes
-# Total:				55 bytes
+# Chunk end				 - bytes
+# Chunked end				 - bytes
+# Total:				15 bytes
 
 logexpect l1 -v v1 -g request {
 	expect 0 1001	Begin	"^req .* rxreq"
-	expect * =	ReqAcct		"^29 0 29 93 55 148$"
+	expect * =	ReqAcct		"^29 0 29 93 15 108$"
 	expect 0 =	End
 	expect * 1003	Begin		"^req .* esi"
 	expect * =	ReqAcct		"^0 0 0 0 12 12$"
@@ -88,4 +88,4 @@ logexpect l1 -wait
 varnish v1 -expect s_req_hdrbytes == 29
 varnish v1 -expect s_req_bodybytes == 0
 varnish v1 -expect s_resp_hdrbytes == 93
-varnish v1 -expect s_resp_bodybytes == 55
+varnish v1 -expect s_resp_bodybytes == 15
diff --git a/bin/varnishtest/tests/r3354.vtc b/bin/varnishtest/tests/r3354.vtc
index b27d85af8..2886982b7 100644
--- a/bin/varnishtest/tests/r3354.vtc
+++ b/bin/varnishtest/tests/r3354.vtc
@@ -22,20 +22,34 @@ varnish v1 -vcl+backend {
 	}
 } -start
 
-varnish v1 -cliok "param.set vsl_mask +VfpAcct"
+varnish v1 -cliok "param.set vsl_mask +VfpAcct,+VdpAcct"
+
+varnish v1 -cliok "param.set feature +esi_disable_xml_check"
 
 client c1 {
-	txreq -url /1
+	txreq -method POST -url /1 -bodylen 100
 	rxresp
 	expect resp.bodylen == 1000
 } -run
 
+varnish v1 -expect MAIN.s_req_bodybytes == 100
+varnish v1 -expect VBE.vcl1.s1.bereq_bodybytes == 100
 varnish v1 -expect VBE.vcl1.s1.beresp_bodybytes == 1000
+varnish v1 -expect MAIN.s_resp_bodybytes == 1000
+varnish v1 -vsc *bodyb*
 
 client c1 {
-	txreq -url /2
+	txreq -method POST -url /2 -nolen -hdr "Transfer-encoding: chunked"
+	chunkedlen 100
+	chunkedlen 100
+	chunkedlen 100
+	chunkedlen 0
 	rxresp
 	expect resp.bodylen == 500
 } -run
 
+varnish v1 -expect MAIN.s_req_bodybytes == 400
+varnish v1 -expect VBE.vcl1.s1.bereq_bodybytes >= 400
 varnish v1 -expect VBE.vcl1.s1.beresp_bodybytes == 1500
+varnish v1 -expect MAIN.s_resp_bodybytes == 1500
+varnish v1 -vsc *bodyb*


More information about the varnish-commit mailing list