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