[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