[experimental-ims] e815d5a NB: VCL syntax change!
Geoff Simmons
geoff at varnish-cache.org
Mon Jan 30 16:09:52 CET 2012
commit e815d5a5a420e507749e8a30f695fbcd7b28f369
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Mon Jan 30 08:48:35 2012 +0000
NB: VCL syntax change!
Change
return (hit_for_pass)
to:
set beresp.do_pass = true
It was wrong to make hit_for_pass a return action, because it is not.
It is a flag on the cached object, and that is all it is.
With streaming becoming the default, having it as return-action would
make writing vcl_fetch{} more cumbersome.
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index aefb077..ad4f426 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -522,6 +522,7 @@ struct busyobj {
unsigned do_gzip;
unsigned do_gunzip;
unsigned do_stream;
+ unsigned do_pass;
};
/* Object structure --------------------------------------------------*/
diff --git a/bin/varnishd/cache/cache_center.c b/bin/varnishd/cache/cache_center.c
index 487e664..7bd0cfb 100644
--- a/bin/varnishd/cache/cache_center.c
+++ b/bin/varnishd/cache/cache_center.c
@@ -634,15 +634,14 @@ cnt_fetch(struct sess *sp, struct worker *wrk, struct req *req)
wrk->busyobj->exp.ttl = -1.;
AZ(wrk->busyobj->do_esi);
-
+ AZ(wrk->busyobj->do_pass);
+
VCL_fetch_method(sp);
+ if (req->objcore != NULL && wrk->busyobj->do_pass)
+ req->objcore->flags |= OC_F_PASS;
+
switch (req->handling) {
- case VCL_RET_HIT_FOR_PASS:
- if (req->objcore != NULL)
- req->objcore->flags |= OC_F_PASS;
- sp->step = STP_FETCHBODY;
- return (0);
case VCL_RET_DELIVER:
AssertObjCorePassOrBusy(req->objcore);
sp->step = STP_FETCHBODY;
@@ -717,18 +716,15 @@ cnt_fetchbody(struct sess *sp, struct worker *wrk, struct req *req)
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
CHECK_OBJ_NOTNULL(wrk->busyobj, BUSYOBJ_MAGIC);
- assert(req->handling == VCL_RET_HIT_FOR_PASS ||
- req->handling == VCL_RET_DELIVER);
+ assert(req->handling == VCL_RET_DELIVER);
if (req->objcore == NULL) {
/* This is a pass from vcl_recv */
pass = 1;
/* VCL may have fiddled this, but that doesn't help */
wrk->busyobj->exp.ttl = -1.;
- } else if (req->handling == VCL_RET_HIT_FOR_PASS) {
- /* pass from vcl_fetch{} -> hit-for-pass */
- /* XXX: the bereq was not filtered pass... */
- pass = 1;
+ } else if (wrk->busyobj->do_pass) {
+ pass = 1;
} else {
/* regular object */
pass = 0;
diff --git a/bin/varnishd/cache/cache_vrt_var.c b/bin/varnishd/cache/cache_vrt_var.c
index e051dbb..c4c0c56 100644
--- a/bin/varnishd/cache/cache_vrt_var.c
+++ b/bin/varnishd/cache/cache_vrt_var.c
@@ -202,6 +202,7 @@ VBERESP(beresp, unsigned, do_esi, busyobj->do_esi)
VBERESP(beresp, unsigned, do_gzip, busyobj->do_gzip)
VBERESP(beresp, unsigned, do_gunzip, busyobj->do_gunzip)
VBERESP(beresp, unsigned, do_stream, busyobj->do_stream)
+VBERESP(beresp, unsigned, do_pass, busyobj->do_pass)
/*--------------------------------------------------------------------*/
diff --git a/bin/varnishd/default.vcl b/bin/varnishd/default.vcl
index 18121b8..d0d4c2e 100644
--- a/bin/varnishd/default.vcl
+++ b/bin/varnishd/default.vcl
@@ -109,7 +109,7 @@ sub vcl_fetch {
* Mark as "Hit-For-Pass" for the next 2 minutes
*/
set beresp.ttl = 120 s;
- return (hit_for_pass);
+ set beresp.do_pass = true;
}
return (deliver);
}
diff --git a/bin/varnishtest/tests/c00011.vtc b/bin/varnishtest/tests/c00011.vtc
index 1dd34a8..18ee757 100644
--- a/bin/varnishtest/tests/c00011.vtc
+++ b/bin/varnishtest/tests/c00011.vtc
@@ -11,7 +11,7 @@ server s1 {
varnish v1 -vcl+backend {
sub vcl_fetch {
- return(hit_for_pass);
+ set beresp.do_pass = true;
}
} -start
diff --git a/bin/varnishtest/tests/c00014.vtc b/bin/varnishtest/tests/c00014.vtc
index ced8117..03089d8 100644
--- a/bin/varnishtest/tests/c00014.vtc
+++ b/bin/varnishtest/tests/c00014.vtc
@@ -15,7 +15,7 @@ server s1 {
varnish v1 -vcl+backend {
sub vcl_fetch {
- return(hit_for_pass);
+ set beresp.do_pass = true;
}
} -start
diff --git a/bin/varnishtest/tests/e00011.vtc b/bin/varnishtest/tests/e00011.vtc
index e725498..8f03bd4 100644
--- a/bin/varnishtest/tests/e00011.vtc
+++ b/bin/varnishtest/tests/e00011.vtc
@@ -17,8 +17,8 @@ server s1 {
varnish v1 -vcl+backend {
sub vcl_fetch {
+ set beresp.do_pass = true;
set beresp.do_esi = true;
- return(hit_for_pass);
}
} -start
diff --git a/bin/varnishtest/tests/r00318.vtc b/bin/varnishtest/tests/r00318.vtc
index 0170c3d..4e66fad 100644
--- a/bin/varnishtest/tests/r00318.vtc
+++ b/bin/varnishtest/tests/r00318.vtc
@@ -8,7 +8,7 @@ server s1 {
varnish v1 -vcl+backend {
sub vcl_fetch {
set beresp.do_esi = true;
- return(hit_for_pass);
+ set beresp.do_pass = true;
}
} -start
diff --git a/lib/libvcl/generate.py b/lib/libvcl/generate.py
index b91f675..1d397c8 100755
--- a/lib/libvcl/generate.py
+++ b/lib/libvcl/generate.py
@@ -89,7 +89,7 @@ returns =(
('hash', ('hash',)),
('miss', ('error', 'restart', 'pass', 'fetch',)),
('hit', ('error', 'restart', 'pass', 'deliver',)),
- ('fetch', ('error', 'restart', 'hit_for_pass', 'deliver',)),
+ ('fetch', ('error', 'restart', 'deliver',)),
('deliver', ('restart', 'deliver',)),
('error', ('restart', 'deliver',)),
('init', ('ok',)),
@@ -331,6 +331,12 @@ sp_variables = (
( 'fetch',),
'const struct sess *'
),
+ ('beresp.do_pass',
+ 'BOOL',
+ ( 'fetch',),
+ ( 'fetch',),
+ 'const struct sess *'
+ ),
('beresp.ttl',
'DURATION',
( 'fetch',),
More information about the varnish-commit
mailing list