[master] e815d5a NB: VCL syntax change!

Poul-Henning Kamp phk at varnish-cache.org
Mon Jan 30 09:52:07 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