r3460 - in trunk/varnish-cache: bin/varnishd lib/libvcl

phk at projects.linpro.no phk at projects.linpro.no
Tue Dec 9 14:54:10 CET 2008


Author: phk
Date: 2008-12-09 14:54:09 +0100 (Tue, 09 Dec 2008)
New Revision: 3460

Modified:
   trunk/varnish-cache/bin/varnishd/default.vcl
   trunk/varnish-cache/lib/libvcl/vcc_action.c
Log:
Add support for, and use a new syntax for terminating actions in VCL,
basically "return(action)" instead of just "action".

The previos syntax is still available.



Modified: trunk/varnish-cache/bin/varnishd/default.vcl
===================================================================
--- trunk/varnish-cache/bin/varnishd/default.vcl	2008-12-08 12:37:42 UTC (rev 3459)
+++ trunk/varnish-cache/bin/varnishd/default.vcl	2008-12-09 13:54:09 UTC (rev 3460)
@@ -48,25 +48,25 @@
       req.request != "OPTIONS" &&
       req.request != "DELETE") {
         /* Non-RFC2616 or CONNECT which is weird. */
-        pipe;
+        return (pipe);
     }
     if (req.request != "GET" && req.request != "HEAD") {
         /* We only deal with GET and HEAD by default */
-        pass;
+        return (pass);
     }
     if (req.http.Authorization || req.http.Cookie) {
         /* Not cacheable by default */
-        pass;
+        return (pass);
     }
-    lookup;
+    return (lookup);
 }
 
 sub vcl_pipe {
-    pipe;
+    return (pipe);
 }
 
 sub vcl_pass {
-    pass;
+    return (pass);
 }
 
 sub vcl_hash {
@@ -76,48 +76,48 @@
     } else {
         set req.hash += server.ip;
     }
-    hash;
+    return (hash);
 }
 
 sub vcl_hit {
     if (!obj.cacheable) {
-        pass;
+        return (pass);
     }
-    deliver;
+    return (deliver);
 }
 
 sub vcl_miss {
-    fetch;
+    return (fetch);
 }
 
 sub vcl_fetch {
     if (!obj.cacheable) {
-        pass;
+        return (pass);
     }
     if (obj.http.Set-Cookie) {
-        pass;
+        return (pass);
     }
     set obj.prefetch =  -30s;
-    deliver;
+    return (deliver);
 }
 
 sub vcl_deliver {
-    deliver;
+    return (deliver);
 }
 
 sub vcl_discard {
     /* XXX: Do not redefine vcl_discard{}, it is not yet supported */
-    discard;
+    return (discard);
 }
 
 sub vcl_prefetch {
     /* XXX: Do not redefine vcl_prefetch{}, it is not yet supported */
-    fetch;
+    return (fetch);
 }
 
 sub vcl_timeout {
     /* XXX: Do not redefine vcl_timeout{}, it is not yet supported */
-    discard;
+    return (discard);
 }
 
 sub vcl_error {
@@ -141,5 +141,5 @@
   </body>
 </html>
 "};
-    deliver;
+    return (deliver);
 }

Modified: trunk/varnish-cache/lib/libvcl/vcc_action.c
===================================================================
--- trunk/varnish-cache/lib/libvcl/vcc_action.c	2008-12-08 12:37:42 UTC (rev 3459)
+++ trunk/varnish-cache/lib/libvcl/vcc_action.c	2008-12-09 13:54:09 UTC (rev 3460)
@@ -41,23 +41,37 @@
 
 /*--------------------------------------------------------------------*/
 
-#define VCL_RET_MAC(l,u,b,i)				\
-static void						\
-parse_##l(struct tokenlist *tl)				\
-{							\
-							\
-	Fb(tl, 1, "VRT_done(sp, VCL_RET_%s);\n", #u);	\
-	vcc_ProcAction(tl->curproc, i, tl->t);		\
-	vcc_NextToken(tl);				\
-}
+static void
+parse_action(struct tokenlist *tl)
+{
+	int retval = 0;
 
+	Expect(tl, ID);
+
+#define VCL_RET_MAC(l, u, b, i)						\
+	do {								\
+		if (vcc_IdIs(tl->t, #l)) {				\
+			Fb(tl, 1, "VRT_done(sp, VCL_RET_%s);\n", #u);	\
+			vcc_ProcAction(tl->curproc, i, tl->t);		\
+			retval = 1;					\
+		}							\
+	} while (0);
+#define VCL_RET_MAC_E(l, u, b, i) VCL_RET_MAC(l, u, b, i)
 #include "vcl_returns.h"
 #undef VCL_RET_MAC
+#undef VCL_RET_MAC_E
+	if (!retval) {
+		vsb_printf(tl->sb, "Expected action name.\n");
+		vcc_ErrWhere(tl, tl->t);
+		ERRCHK(tl);
+	}
+	vcc_NextToken(tl);
+}
 
 /*--------------------------------------------------------------------*/
 
 static void
-parse_restart_real(struct tokenlist *tl)
+parse_restart(struct tokenlist *tl)
 {
 	struct token *t1;
 
@@ -70,7 +84,9 @@
 		vcc_ErrWhere(tl, t1);
 		ERRCHK(tl);
 	}
-	parse_restart(tl);
+	Fb(tl, 1, "VRT_done(sp, VCL_RET_RESTART);\n");
+	vcc_ProcAction(tl->curproc, VCL_RET_RESTART, tl->t);
+	vcc_NextToken(tl);
 }
 
 /*--------------------------------------------------------------------*/
@@ -407,6 +423,22 @@
 /*--------------------------------------------------------------------*/
 
 static void
+parse_return(struct tokenlist *tl)
+{
+	vcc_NextToken(tl);
+	Expect(tl, '(');
+	vcc_NextToken(tl);
+	Expect(tl, ID);
+
+	parse_action(tl);
+	ERRCHK(tl);
+	Expect(tl, ')');
+	vcc_NextToken(tl);
+}
+
+/*--------------------------------------------------------------------*/
+
+static void
 parse_synthetic(struct tokenlist *tl)
 {
 	vcc_NextToken(tl);
@@ -430,12 +462,11 @@
 	const char		*name;
 	action_f		*func;
 } action_table[] = {
-	{ "restart",	parse_restart_real },
-#define VCL_RET_MAC(l, u, b, i) { #l, parse_##l },
-#define VCL_RET_MAC_E(l, u, b, i) VCL_RET_MAC(l, u, b, i)
+	{ "restart",		parse_restart },
+	{ "error",		parse_error },
+#define VCL_RET_MAC(l, u, b, i) { #l, parse_action },
 #include "vcl_returns.h"
 #undef VCL_RET_MAC
-#undef VCL_RET_MAC_E
 
 	/* Keep list sorted from here */
 	{ "call",		parse_call },
@@ -447,6 +478,7 @@
 	{ "set",		parse_set },
 	{ "synthetic",		parse_synthetic },
 	{ "unset",		parse_unset },
+	{ "return",		parse_return },
 	{ NULL,			NULL }
 };
 



More information about the varnish-commit mailing list