[master] ee92500 Remove the stand-alone "purge" action from VCL, now that we have return(purge) from vcl_recv.
Poul-Henning Kamp
phk at FreeBSD.org
Tue May 13 09:10:47 CEST 2014
commit ee9250095af04b74c31ca769a55da3d18a6eeb7d
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Tue May 13 07:10:11 2014 +0000
Remove the stand-alone "purge" action from VCL, now that we have
return(purge) from vcl_recv.
Retain the VRT_purge() for VMOD and inline-C use.
diff --git a/bin/varnishd/cache/cache_vrt.c b/bin/varnishd/cache/cache_vrt.c
index 4e1bcbf..08e3b77 100644
--- a/bin/varnishd/cache/cache_vrt.c
+++ b/bin/varnishd/cache/cache_vrt.c
@@ -480,11 +480,11 @@ VRT_CacheReqBody(const struct vrt_ctx *ctx, long long maxsize)
}
/*--------------------------------------------------------------------
- * "real" purges
+ * purges
*/
void
-VRT_purge(const struct vrt_ctx *ctx, double ttl, double grace)
+VRT_purge(const struct vrt_ctx *ctx, double ttl, double grace, double keep)
{
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
@@ -492,10 +492,10 @@ VRT_purge(const struct vrt_ctx *ctx, double ttl, double grace)
CHECK_OBJ_NOTNULL(ctx->req->wrk, WORKER_MAGIC);
if (ctx->method == VCL_MET_HIT)
HSH_Purge(ctx->req->wrk, ctx->req->obj->objcore->objhead,
- ttl, grace, NAN);
+ ttl, grace, keep);
else if (ctx->method == VCL_MET_MISS)
HSH_Purge(ctx->req->wrk, ctx->req->objcore->objhead,
- ttl, grace, NAN);
+ ttl, grace, keep);
}
/*--------------------------------------------------------------------
diff --git a/bin/varnishtest/tests/c00041.vtc b/bin/varnishtest/tests/c00041.vtc
index 2b7efc2..bd6abdb 100644
--- a/bin/varnishtest/tests/c00041.vtc
+++ b/bin/varnishtest/tests/c00041.vtc
@@ -39,8 +39,12 @@ server s1 {
} -start
varnish v1 -vcl+backend {
- sub vcl_miss { if (req.http.purge == "yes") { purge; } }
- sub vcl_hit { if (req.http.purge == "yes") { purge; return(restart);} }
+ sub vcl_recv { if (req.http.purge == "yes") { return(purge); } }
+ sub vcl_purge { if (req.http.restart == "yes") {
+ unset req.http.purge;
+ unset req.http.restart;
+ return(restart);}
+ }
} -start
client c1 {
@@ -49,6 +53,7 @@ client c1 {
expect resp.status == 200
expect resp.http.x-varnish == 1001
expect resp.bodylen == 1
+ delay .1
txreq -url "/1" -hdr "Foo: foo2"
rxresp
@@ -62,42 +67,44 @@ client c1 {
expect resp.status == 200
expect resp.http.x-varnish == "1005 1002"
expect resp.bodylen == 1
+ delay .1
txreq -url "/1" -hdr "Foo: foo2"
rxresp
expect resp.status == 200
expect resp.http.x-varnish == "1006 1004"
expect resp.bodylen == 2
+ delay .1
# Purge on hit
- txreq -url "/1" -hdr "Foo: foo2" -hdr "purge: yes"
+ txreq -url "/1" -hdr "Foo: foo2" -hdr "purge: yes" -hdr "restart: yes"
rxresp
expect resp.status == 200
expect resp.bodylen == 12
+ delay .1
txreq -url "/1" -hdr "foo: foo1"
rxresp
expect resp.status == 200
expect resp.bodylen == 11
+ delay .1
# Purge on miss
- txreq -url "/1" -hdr "Foo: foo3" -hdr "purge: yes"
+ txreq -url "/1" -hdr "Foo: foo3" -hdr "purge: yes" -hdr "restart: yes"
rxresp
expect resp.status == 200
expect resp.bodylen == 23
+ delay .1
txreq -url "/1" -hdr "foo: foo1"
rxresp
expect resp.status == 200
expect resp.bodylen == 21
+ delay .1
txreq -url "/1" -hdr "Foo: foo2"
rxresp
expect resp.status == 200
expect resp.bodylen == 22
+ delay .1
} -run
-
-varnish v1 -errvcl {'purge': not a valid action in method 'vcl_recv'.} {
- backend s1 { .host = "${s1_addr}"; }
- sub vcl_recv { if (req.http.purge == "yes") { purge; } }
-}
diff --git a/include/vrt.h b/include/vrt.h
index 8e5acba..bfbbb2d 100644
--- a/include/vrt.h
+++ b/include/vrt.h
@@ -201,7 +201,7 @@ const char *VRT_regsub(const struct vrt_ctx *, int all, const char *,
void *, const char *);
void VRT_ban_string(const struct vrt_ctx *, const char *);
-void VRT_purge(const struct vrt_ctx *, double ttl, double grace);
+void VRT_purge(const struct vrt_ctx *, double ttl, double grace, double keep);
void VRT_count(const struct vrt_ctx *, unsigned);
int VRT_rewrite(const char *, const char *);
diff --git a/lib/libvcc/vcc_action.c b/lib/libvcc/vcc_action.c
index b06ff3d..910a89c 100644
--- a/lib/libvcc/vcc_action.c
+++ b/lib/libvcc/vcc_action.c
@@ -367,16 +367,6 @@ parse_rollback(struct vcc *tl)
/*--------------------------------------------------------------------*/
static void
-parse_purge(struct vcc *tl)
-{
-
- vcc_NextToken(tl);
- Fb(tl, 1, "VRT_purge(ctx, 0, 0);\n");
-}
-
-/*--------------------------------------------------------------------*/
-
-static void
parse_synthetic(struct vcc *tl)
{
vcc_NextToken(tl);
@@ -409,7 +399,6 @@ static struct action_table {
{ "call", parse_call },
{ "hash_data", parse_hash_data, VCL_MET_HASH },
{ "new", parse_new, VCL_MET_INIT},
- { "purge", parse_purge, VCL_MET_MISS | VCL_MET_HIT },
{ "return", parse_return },
{ "rollback", parse_rollback },
{ "set", parse_set },
More information about the varnish-commit
mailing list