Commit 5d5b39e7 authored by Nils Goroll's avatar Nils Goroll

Add pesi.activate() to ... activate pesi

fiddling the filters manually really does not make much sense, in
particular not for our test-cases which are supposed to closely match
varnish-cache serial esi behavior
parent 7db3de5a
......@@ -40,6 +40,31 @@ VOID pool(INT min=10, INT max=100, DURATION max_age=10)
Configure the memory pool used by the VDP for internal variable-sized
data structures.
.. _vmod_pesi.activate:
VOID activate()
---------------
To be called from vcl_deliver {} only, must be called on all ESI
levels if called on any ESI level (unless you are a wizard).
Configure the correct parallel ESI filters for this response analogous
to the default filter settings in varnish-cache for sequential ESI.
Manually setting/changing ``resp.filters`` is possible but only
advised to experts.
Notice that all settings affecting ESI (like ``resp.do_esi``), gzip
(like changing ``req.http.Accept-Encoding``) or Range processing (like
changing ``req.http.Range``) should happen before calling this
function to have an effect.
If this function is called on any ESI level, it should be called on
all ESI levels. Failure to do so will likely cause panics caused by
missing error handling in varnish-cache. Notice that the VMOD has no
known way to check for this condition, so please address any blame
appropriately.
.. _vmod_pesi.version:
STRING version()
......
......@@ -16,12 +16,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -21,12 +21,8 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
set resp.http.filters = resp.filters;
}
} -start
......
......@@ -20,12 +20,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -49,12 +49,7 @@ varnish v1 -arg "-p debug=+syncvsl" -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -26,12 +26,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -27,12 +27,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -36,12 +36,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -39,12 +39,7 @@ varnish v1 -arg "-sdefault,2m" -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -85,12 +85,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -25,12 +25,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -19,12 +19,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start -cli "param.set feature +esi_ignore_other_elements"
......
......@@ -24,12 +24,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -26,12 +26,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -16,12 +16,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -17,12 +17,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -34,14 +34,8 @@ varnish v1 -syntax 4.0 -vcl+backend {
sub vcl_backend_response {
set beresp.do_esi = true;
}
sub vcl_deliver {
if (req.url != "/" && resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
elsif (req.url != "/") {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......@@ -79,12 +73,7 @@ varnish v1 -syntax 4.1 -vcl+backend {
if (req.url == "/top2") {
set resp.do_esi = false;
}
if (req.url != "/top2" && resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
elsif (req.url != "/top2") {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
sub vcl_backend_response {
set beresp.do_esi = true;
......
......@@ -61,24 +61,11 @@ varnish v1 \
}
sub vcl_deliver {
/* set req.esi = true;
set req.esi = true;
if (req.url == "/body") {
set req.esi = false;
}
if (req.url != "/body" && resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
elsif (req.url != "/body") {
set resp.filters = "pesi " + resp.filters;
}
*/
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -204,12 +204,7 @@ varnish v1 -arg "-p thread_pool_min=100" -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -76,12 +76,7 @@ varnish v1 -arg "-p thread_pool_min=100" -arg "-p debug=+syncvsl,+processors" -v
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -54,12 +54,7 @@ varnish v1 -arg "-p thread_pool_min=100" -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -22,12 +22,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -25,12 +25,7 @@ varnish v1 -syntax 4.0 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -25,12 +25,7 @@ varnish v1 -syntax 4.0 -arg "-p thread_pool_stack=262144" -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -10,12 +10,7 @@ varnish v1 -vcl+backend {
import ${vmod_pesi};
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -15,12 +15,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -49,12 +49,7 @@ varnish v1 -arg "-p feature=+esi_disable_xml_check" -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -71,12 +71,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "esi") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = resp.filters + " pesi";
}
pesi.activate();
}
} -start
......
......@@ -114,12 +114,7 @@ varnish v1 -arg "-p thread_pool_min=100" -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "esi") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = resp.filters + " pesi";
}
pesi.activate();
}
} -start
......
......@@ -37,12 +37,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (req.url != "/foo" && resp.filters ~ "esi") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
elsif (req.url != "/foo") {
set resp.filters = resp.filters + " pesi";
}
pesi.activate();
}
} -start
......
......@@ -91,12 +91,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "esi") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = resp.filters + " pesi";
}
pesi.activate();
}
} -start
......
......@@ -15,12 +15,7 @@ varnish v1 -arg "-p http_gzip_support=off -p debug=+processors" -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "esi") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = resp.filters + " pesi";
}
pesi.activate();
}
} -start
......
......@@ -18,12 +18,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "esi") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = resp.filters + " pesi";
}
pesi.activate();
}
} -start
......
......@@ -21,12 +21,7 @@ varnish v1 -arg "-p debug=+waitinglist" -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -51,12 +51,7 @@ varnish v1 -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -88,12 +88,7 @@ varnish v1 -arg "-l 100m" -vcl+backend {
}
sub vcl_deliver {
if (resp.filters ~ "\besi\b") {
set resp.filters = regsub(resp.filters, "\besi\b", "pesi");
}
else {
set resp.filters = "pesi " + resp.filters;
}
pesi.activate();
}
} -start
......
......@@ -2620,6 +2620,94 @@ vmod_pool(VRT_CTX, VCL_INT min, VCL_INT max, VCL_DURATION max_age)
poolparam.max_age = max_age;
}
/*
* pesi_filter_on_ws() and pesi_resp_default_filter_list()
* taken from cache_vrt_filter.c
*
*/
typedef void pesi_filter_list_t(void *, struct vsb *vsb);
static const char *
pesi_filter_on_ws(struct ws *ws, pesi_filter_list_t *func, void *arg)
{
unsigned u;
struct vsb vsb[1];
AN(func);
AN(arg);
u = WS_ReserveAll(ws);
if (u == 0) {
WS_Release(ws, 0);
WS_MarkOverflow(ws);
return (NULL);
}
AN(VSB_new(vsb, ws->f, u, VSB_FIXEDLEN));
func(arg, vsb);
if (VSB_finish(vsb)) {
WS_Release(ws, 0);
WS_MarkOverflow(ws);
return (NULL);
}
if (VSB_len(vsb)) {
WS_Release(ws, VSB_len(vsb) + 1);
return (VSB_data(vsb) + 1);
}
WS_Release(ws, 0);
return ("");
}
static void v_matchproto_(pesi_filter_list_t)
pesi_resp_default_filter_list(void *arg, struct vsb *vsb)
{
struct req *req;
CAST_OBJ_NOTNULL(req, arg, REQ_MAGIC);
// XXX resp_len check does not work for busy objects
// pesi will still DTRT if the response really is 0
if (!req->disable_esi && /* req->resp_len != 0 && */
ObjHasAttr(req->wrk, req->objcore, OA_ESIDATA))
VSB_cat(vsb, " pesi");
if (cache_param->http_gzip_support &&
ObjCheckFlag(req->wrk, req->objcore, OF_GZIPED) &&
!RFC2616_Req_Gzip(req->http))
VSB_cat(vsb, " gunzip");
if (cache_param->http_range_support &&
http_GetStatus(req->resp) == 200 &&
http_GetHdr(req->http, H_Range, NULL))
VSB_cat(vsb, " range");
}
VCL_VOID
vmod_activate(VRT_CTX)
{
struct req *req;
const char *filters;
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
if (ctx->method != VCL_MET_DELIVER) {
VRT_fail(ctx, "pesi.activate() may only be called "
"from vcl_deliver{}");
return;
}
req = ctx->req;
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
filters = pesi_filter_on_ws(req->ws,
pesi_resp_default_filter_list, req);
if (filters == NULL)
WS_MarkOverflow(req->ws);
else
req->filter_list = filters;
}
/* Event function */
/*
......
......@@ -32,6 +32,28 @@ $Function VOID pool(INT min=10, INT max=100, DURATION max_age=10)
Configure the memory pool used by the VDP for internal variable-sized
data structures.
$Function VOID activate()
To be called from vcl_deliver {} only, must be called on all ESI
levels if called on any ESI level (unless you are a wizard).
Configure the correct parallel ESI filters for this response analogous
to the default filter settings in varnish-cache for sequential ESI.
Manually setting/changing ``resp.filters`` is possible but only
advised to experts.
Notice that all settings affecting ESI (like ``resp.do_esi``), gzip
(like changing ``req.http.Accept-Encoding``) or Range processing (like
changing ``req.http.Range``) should happen before calling this
function to have an effect.
If this function is called on any ESI level, it should be called on
all ESI levels. Failure to do so will likely cause panics caused by
missing error handling in varnish-cache. Notice that the VMOD has no
known way to check for this condition, so please address any blame
appropriately.
$Function STRING version()
Return the version string for this VDP.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment