[master] 586bfa496 add obj.can_esi
Nils Goroll
nils.goroll at uplex.de
Sat Apr 4 17:50:13 UTC 2020
commit 586bfa496bf6ea9604d14ebdc2a0c3ac106b7d83
Author: Nils Goroll <nils.goroll at uplex.de>
Date: Sat Apr 4 18:22:30 2020 +0200
add obj.can_esi
Ref #3002
diff --git a/bin/varnishd/cache/cache_vrt_var.c b/bin/varnishd/cache/cache_vrt_var.c
index 8409511f8..a94606daf 100644
--- a/bin/varnishd/cache/cache_vrt_var.c
+++ b/bin/varnishd/cache/cache_vrt_var.c
@@ -442,6 +442,17 @@ VRT_r_obj_storage(VRT_CTX)
/*--------------------------------------------------------------------*/
+VCL_BOOL
+VRT_r_obj_can_esi(VRT_CTX)
+{
+ CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+ CHECK_OBJ_NOTNULL(ctx->req, REQ_MAGIC);
+ CHECK_OBJ_NOTNULL(ctx->req->objcore, OBJCORE_MAGIC);
+ return (ObjHasAttr(ctx->req->wrk, ctx->req->objcore, OA_ESIDATA));
+}
+
+/*--------------------------------------------------------------------*/
+
#define REQ_VAR_L(nm, elem, type, extra) \
\
VCL_VOID \
diff --git a/bin/varnishtest/tests/e00000.vtc b/bin/varnishtest/tests/e00000.vtc
index 844855061..3030a11c7 100644
--- a/bin/varnishtest/tests/e00000.vtc
+++ b/bin/varnishtest/tests/e00000.vtc
@@ -12,6 +12,9 @@ varnish v1 -vcl+backend {
sub vcl_backend_response {
set beresp.do_esi = true;
}
+ sub vcl_deliver {
+ set resp.http.can_esi = obj.can_esi;
+ }
} -start
logexpect l1 -v v1 -g raw {
@@ -23,6 +26,7 @@ client c1 {
rxresp
expect resp.status == 200
expect resp.bodylen == 33
+ expect resp.http.can_esi == "false"
}
client c1 -run
diff --git a/bin/varnishtest/tests/e00001.vtc b/bin/varnishtest/tests/e00001.vtc
index be0b0c15c..8a4a42480 100644
--- a/bin/varnishtest/tests/e00001.vtc
+++ b/bin/varnishtest/tests/e00001.vtc
@@ -17,6 +17,9 @@ varnish v1 -vcl+backend {
sub vcl_backend_response {
set beresp.do_esi = true;
}
+ sub vcl_deliver {
+ set resp.http.can_esi = obj.can_esi;
+ }
} -start
logexpect l1 -v v1 -g raw {
@@ -29,6 +32,7 @@ client c1 {
rxresp
expect resp.status == 200
expect resp.bodylen == 40
+ expect resp.http.can_esi == "true"
}
client c1 -run
diff --git a/bin/varnishtest/tests/e00003.vtc b/bin/varnishtest/tests/e00003.vtc
index 0a1d657ad..929e6515c 100644
--- a/bin/varnishtest/tests/e00003.vtc
+++ b/bin/varnishtest/tests/e00003.vtc
@@ -32,12 +32,15 @@ varnish v1 -vcl+backend {
set beresp.do_esi = true;
}
}
+ sub vcl_deliver {
+ set resp.http.can_esi = obj.can_esi;
+ }
} -start
logexpect l1 -v v1 -g request {
expect 0 1001 Begin "^req .* rxreq"
# ReqAcct body counts include chunked overhead
- expect * = ReqAcct "^29 0 29 187 104 291$"
+ expect * = ReqAcct "^29 0 29 202 104 306$"
expect 0 = End
} -start
@@ -61,7 +64,7 @@ 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 192 104 296$"
+ expect * = ReqAcct "^29 0 29 207 104 311$"
expect 0 = End
} -start
@@ -70,6 +73,7 @@ client c1 {
rxresp
expect resp.bodylen == 75
expect resp.status == 200
+ expect resp.http.can_esi == "true"
delay .1
# test that there is no difference on miss/hit
@@ -77,6 +81,7 @@ client c1 {
rxresp
expect resp.bodylen == 75
expect resp.status == 200
+ expect resp.http.can_esi == "true"
}
client c1 -run
diff --git a/bin/varnishtest/tests/e00032.vtc b/bin/varnishtest/tests/e00032.vtc
index 96c9e8deb..137647465 100644
--- a/bin/varnishtest/tests/e00032.vtc
+++ b/bin/varnishtest/tests/e00032.vtc
@@ -14,12 +14,16 @@ varnish v1 -vcl+backend {
sub vcl_backend_response {
set beresp.do_esi = true;
}
+ sub vcl_deliver {
+ set resp.http.can_esi = obj.can_esi;
+ }
} -start
client c1 {
txreq -hdr "Accept-Encoding: gzip"
rxresp
expect resp.status == 200
+ expect resp.http.can_esi == "true"
gunzip
expect resp.bodylen == 3
} -run
diff --git a/doc/sphinx/reference/vcl_var.rst b/doc/sphinx/reference/vcl_var.rst
index ab7d96df7..a26c6d7ff 100644
--- a/doc/sphinx/reference/vcl_var.rst
+++ b/doc/sphinx/reference/vcl_var.rst
@@ -1107,6 +1107,18 @@ obj.storage
The storage backend where this object is stored.
+obj.can_esi
+
+ Type: BOOL
+
+ Readable from: vcl_hit, vcl_deliver
+
+ If the object can be ESI processed, that is if setting
+ ``resp.do_esi`` or adding ``esi`` to ``resp.filters`` in
+ ``vcl_deliver {}`` would cause the response body to be ESI
+ processed.
+
+
resp
~~~~
More information about the varnish-commit
mailing list