r4652 - in trunk/varnish-cache: bin/varnishtest/tests lib/libvcl

phk at varnish-cache.org phk at varnish-cache.org
Thu Apr 8 18:32:24 CEST 2010


Author: phk
Date: 2010-04-08 18:32:24 +0200 (Thu, 08 Apr 2010)
New Revision: 4652

Added:
   trunk/varnish-cache/bin/varnishtest/tests/c00032.vtc
Modified:
   trunk/varnish-cache/bin/varnishtest/tests/v00018.vtc
   trunk/varnish-cache/lib/libvcl/vcc_action.c
Log:
Make "rollback" its own action, it can be used anywhere.

Make "restart" require "return(restart)" like all other terminating actions.



Added: trunk/varnish-cache/bin/varnishtest/tests/c00032.vtc
===================================================================
--- trunk/varnish-cache/bin/varnishtest/tests/c00032.vtc	                        (rev 0)
+++ trunk/varnish-cache/bin/varnishtest/tests/c00032.vtc	2010-04-08 16:32:24 UTC (rev 4652)
@@ -0,0 +1,36 @@
+# $Id$
+
+test "Test Rollback"
+
+
+server s1 {
+	rxreq
+	expect req.url == "/foo"
+	expect req.http.foobar == "harck-coff"
+	txresp -status 400
+	rxreq
+	expect req.url == "/bar"
+	expect req.http.foobar == "snark"
+	txresp -bodylen 5
+} -start
+
+varnish v1 -vcl+backend {
+	sub vcl_recv {
+		if (req.url == "/foo") {
+			set req.http.foobar = "harck-coff";
+		}
+	}
+
+	sub vcl_fetch {
+		if (beresp.status == 400) {
+			rollback;
+			set req.url = "/bar";
+			return (restart);
+		}
+	}
+} -start
+
+client c1 {
+	txreq -url "/foo" -hdr "foobar: snark"
+	rxresp
+} -run

Modified: trunk/varnish-cache/bin/varnishtest/tests/v00018.vtc
===================================================================
--- trunk/varnish-cache/bin/varnishtest/tests/v00018.vtc	2010-04-08 16:21:16 UTC (rev 4651)
+++ trunk/varnish-cache/bin/varnishtest/tests/v00018.vtc	2010-04-08 16:32:24 UTC (rev 4652)
@@ -4,15 +4,10 @@
 
 varnish v1 -vcl {
 	backend b { .host = "127.0.0.1"; }
-	sub vcl_hit { restart ; }
-	sub vcl_miss { restart rollback; }
+	sub vcl_hit { return (restart) ; }
+	sub vcl_miss { rollback; return (restart); }
 }
 
-varnish v1 -badvcl {
-	backend b { .host = "127.0.0.1"; }
-	sub vcl_hit { restart 2 ; }
-}
-
 varnish v1 -vcl {
 	backend b { .host = "127.0.0.1"; }
 	sub vcl_fetch { error beresp.status ; }

Modified: trunk/varnish-cache/lib/libvcl/vcc_action.c
===================================================================
--- trunk/varnish-cache/lib/libvcl/vcc_action.c	2010-04-08 16:21:16 UTC (rev 4651)
+++ trunk/varnish-cache/lib/libvcl/vcc_action.c	2010-04-08 16:32:24 UTC (rev 4652)
@@ -47,27 +47,6 @@
 /*--------------------------------------------------------------------*/
 
 static void
-parse_restart(struct tokenlist *tl)
-{
-	struct token *t1;
-
-	t1 = VTAILQ_NEXT(tl->t, list);
-	if (t1->tok == ID && vcc_IdIs(t1, "rollback")) {
-		Fb(tl, 1, "VRT_Rollback(sp);\n");
-		vcc_NextToken(tl);
-	} else if (t1->tok != ';') {
-		vsb_printf(tl->sb, "Expected \"rollback\" or semicolon.\n");
-		vcc_ErrWhere(tl, t1);
-		ERRCHK(tl);
-	}
-	Fb(tl, 1, "VRT_done(sp, VCL_RET_RESTART);\n");
-	vcc_ProcAction(tl->curproc, VCL_RET_RESTART, tl->t);
-	vcc_NextToken(tl);
-}
-
-/*--------------------------------------------------------------------*/
-
-static void
 parse_call(struct tokenlist *tl)
 {
 
@@ -239,11 +218,6 @@
 			return;
 		}
 		Fb(tl, 0, ");\n");
-		/*
-		 * We count the number of operations on the req.hash
-		 * variable, so that varnishd can preallocate the worst case
-		 * number of slots for composing the hash string.
-		 */
 		break;
 	case STRING:
 		if (tl->t->tok != '=') {
@@ -443,6 +417,17 @@
 /*--------------------------------------------------------------------*/
 
 static void
+parse_new_syntax(struct tokenlist *tl)
+{
+
+	vsb_printf(tl->sb, "Please change \"%.*s\" to \"return(%.*s)\".\n",
+	    PF(tl->t), PF(tl->t));
+	vcc_ErrWhere(tl, tl->t);
+}
+
+/*--------------------------------------------------------------------*/
+
+static void
 parse_panic(struct tokenlist *tl)
 {
 	vcc_NextToken(tl);
@@ -510,24 +495,12 @@
 
 /*--------------------------------------------------------------------*/
 
-static void
-parse_new_syntax(struct tokenlist *tl)
-{
-
-	vsb_printf(tl->sb, "Please change \"%.*s\" to \"return(%.*s)\".\n",
-	    PF(tl->t), PF(tl->t));
-	vcc_ErrWhere(tl, tl->t);
-}
-
-/*--------------------------------------------------------------------*/
-
 typedef void action_f(struct tokenlist *tl);
 
 static struct action_table {
 	const char		*name;
 	action_f		*func;
 } action_table[] = {
-	{ "restart",		parse_restart },
 	{ "error",		parse_error },
 
 #define VCL_RET_MAC(l, U)						\
@@ -542,10 +515,11 @@
 	{ "purge",		parse_purge },
 	{ "purge_url",		parse_purge_url },
 	{ "remove",		parse_unset }, /* backward compatibility */
+	{ "return",		parse_return },
+	{ "rollback",		parse_rollback },
 	{ "set",		parse_set },
 	{ "synthetic",		parse_synthetic },
 	{ "unset",		parse_unset },
-	{ "return",		parse_return },
 	{ NULL,			NULL }
 };
 




More information about the varnish-commit mailing list