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 {
unsigned do_gzip;
unsigned do_gunzip;
unsigned do_stream;
unsigned do_pass;
};
/* Object structure --------------------------------------------------*/
......
......@@ -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;
......
......@@ -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)
/*--------------------------------------------------------------------*/
......
......@@ -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);
}
......
......@@ -11,7 +11,7 @@ server s1 {
varnish v1 -vcl+backend {
sub vcl_fetch {
return(hit_for_pass);
set beresp.do_pass = true;
}
} -start
......
......@@ -15,7 +15,7 @@ server s1 {
varnish v1 -vcl+backend {
sub vcl_fetch {
return(hit_for_pass);
set beresp.do_pass = true;
}
} -start
......
......@@ -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
......
......@@ -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
......
......@@ -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',),
......
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