Commit e815d5a5 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

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.
parent ef4231f9
...@@ -522,6 +522,7 @@ struct busyobj { ...@@ -522,6 +522,7 @@ struct busyobj {
unsigned do_gzip; unsigned do_gzip;
unsigned do_gunzip; unsigned do_gunzip;
unsigned do_stream; unsigned do_stream;
unsigned do_pass;
}; };
/* Object structure --------------------------------------------------*/ /* Object structure --------------------------------------------------*/
......
...@@ -634,15 +634,14 @@ cnt_fetch(struct sess *sp, struct worker *wrk, struct req *req) ...@@ -634,15 +634,14 @@ cnt_fetch(struct sess *sp, struct worker *wrk, struct req *req)
wrk->busyobj->exp.ttl = -1.; wrk->busyobj->exp.ttl = -1.;
AZ(wrk->busyobj->do_esi); AZ(wrk->busyobj->do_esi);
AZ(wrk->busyobj->do_pass);
VCL_fetch_method(sp); VCL_fetch_method(sp);
if (req->objcore != NULL && wrk->busyobj->do_pass)
req->objcore->flags |= OC_F_PASS;
switch (req->handling) { 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: case VCL_RET_DELIVER:
AssertObjCorePassOrBusy(req->objcore); AssertObjCorePassOrBusy(req->objcore);
sp->step = STP_FETCHBODY; sp->step = STP_FETCHBODY;
...@@ -717,18 +716,15 @@ cnt_fetchbody(struct sess *sp, struct worker *wrk, struct req *req) ...@@ -717,18 +716,15 @@ cnt_fetchbody(struct sess *sp, struct worker *wrk, struct req *req)
CHECK_OBJ_NOTNULL(req, REQ_MAGIC); CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
CHECK_OBJ_NOTNULL(wrk->busyobj, BUSYOBJ_MAGIC); CHECK_OBJ_NOTNULL(wrk->busyobj, BUSYOBJ_MAGIC);
assert(req->handling == VCL_RET_HIT_FOR_PASS || assert(req->handling == VCL_RET_DELIVER);
req->handling == VCL_RET_DELIVER);
if (req->objcore == NULL) { if (req->objcore == NULL) {
/* This is a pass from vcl_recv */ /* This is a pass from vcl_recv */
pass = 1; pass = 1;
/* VCL may have fiddled this, but that doesn't help */ /* VCL may have fiddled this, but that doesn't help */
wrk->busyobj->exp.ttl = -1.; wrk->busyobj->exp.ttl = -1.;
} else if (req->handling == VCL_RET_HIT_FOR_PASS) { } else if (wrk->busyobj->do_pass) {
/* pass from vcl_fetch{} -> hit-for-pass */ pass = 1;
/* XXX: the bereq was not filtered pass... */
pass = 1;
} else { } else {
/* regular object */ /* regular object */
pass = 0; pass = 0;
......
...@@ -202,6 +202,7 @@ VBERESP(beresp, unsigned, do_esi, busyobj->do_esi) ...@@ -202,6 +202,7 @@ VBERESP(beresp, unsigned, do_esi, busyobj->do_esi)
VBERESP(beresp, unsigned, do_gzip, busyobj->do_gzip) VBERESP(beresp, unsigned, do_gzip, busyobj->do_gzip)
VBERESP(beresp, unsigned, do_gunzip, busyobj->do_gunzip) VBERESP(beresp, unsigned, do_gunzip, busyobj->do_gunzip)
VBERESP(beresp, unsigned, do_stream, busyobj->do_stream) VBERESP(beresp, unsigned, do_stream, busyobj->do_stream)
VBERESP(beresp, unsigned, do_pass, busyobj->do_pass)
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
......
...@@ -109,7 +109,7 @@ sub vcl_fetch { ...@@ -109,7 +109,7 @@ sub vcl_fetch {
* Mark as "Hit-For-Pass" for the next 2 minutes * Mark as "Hit-For-Pass" for the next 2 minutes
*/ */
set beresp.ttl = 120 s; set beresp.ttl = 120 s;
return (hit_for_pass); set beresp.do_pass = true;
} }
return (deliver); return (deliver);
} }
......
...@@ -11,7 +11,7 @@ server s1 { ...@@ -11,7 +11,7 @@ server s1 {
varnish v1 -vcl+backend { varnish v1 -vcl+backend {
sub vcl_fetch { sub vcl_fetch {
return(hit_for_pass); set beresp.do_pass = true;
} }
} -start } -start
......
...@@ -15,7 +15,7 @@ server s1 { ...@@ -15,7 +15,7 @@ server s1 {
varnish v1 -vcl+backend { varnish v1 -vcl+backend {
sub vcl_fetch { sub vcl_fetch {
return(hit_for_pass); set beresp.do_pass = true;
} }
} -start } -start
......
...@@ -17,8 +17,8 @@ server s1 { ...@@ -17,8 +17,8 @@ server s1 {
varnish v1 -vcl+backend { varnish v1 -vcl+backend {
sub vcl_fetch { sub vcl_fetch {
set beresp.do_pass = true;
set beresp.do_esi = true; set beresp.do_esi = true;
return(hit_for_pass);
} }
} -start } -start
......
...@@ -8,7 +8,7 @@ server s1 { ...@@ -8,7 +8,7 @@ server s1 {
varnish v1 -vcl+backend { varnish v1 -vcl+backend {
sub vcl_fetch { sub vcl_fetch {
set beresp.do_esi = true; set beresp.do_esi = true;
return(hit_for_pass); set beresp.do_pass = true;
} }
} -start } -start
......
...@@ -89,7 +89,7 @@ returns =( ...@@ -89,7 +89,7 @@ returns =(
('hash', ('hash',)), ('hash', ('hash',)),
('miss', ('error', 'restart', 'pass', 'fetch',)), ('miss', ('error', 'restart', 'pass', 'fetch',)),
('hit', ('error', 'restart', 'pass', 'deliver',)), ('hit', ('error', 'restart', 'pass', 'deliver',)),
('fetch', ('error', 'restart', 'hit_for_pass', 'deliver',)), ('fetch', ('error', 'restart', 'deliver',)),
('deliver', ('restart', 'deliver',)), ('deliver', ('restart', 'deliver',)),
('error', ('restart', 'deliver',)), ('error', ('restart', 'deliver',)),
('init', ('ok',)), ('init', ('ok',)),
...@@ -331,6 +331,12 @@ sp_variables = ( ...@@ -331,6 +331,12 @@ sp_variables = (
( 'fetch',), ( 'fetch',),
'const struct sess *' 'const struct sess *'
), ),
('beresp.do_pass',
'BOOL',
( 'fetch',),
( 'fetch',),
'const struct sess *'
),
('beresp.ttl', ('beresp.ttl',
'DURATION', 'DURATION',
( 'fetch',), ( 'fetch',),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment