[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