[master] 61f2841df vcl: add unset req.grace and unset req.ttl
Dridi Boukelmoune
dridi at varni.sh
Thu Nov 7 18:33:00 UTC 2024
On Thu, Nov 7, 2024 at 6:07 PM Nils Goroll <nils.goroll at uplex.de> wrote:
>
>
> commit 61f2841df6b8ff6767615cf08565f71dced09ae1
> Author: Nils Goroll <nils.goroll at uplex.de>
> Date: Thu Nov 7 18:38:32 2024 +0100
>
> vcl: add unset req.grace and unset req.ttl
>
> There was no way to reset these from VCL to the "unset" value of -1.
There was a way awaiting your review:
https://github.com/varnishcache/varnish-cache/pull/4041
> diff --git a/bin/varnishd/cache/cache_vrt_var.c b/bin/varnishd/cache/cache_vrt_var.c
> index 60409beca..f0726cc81 100644
> --- a/bin/varnishd/cache/cache_vrt_var.c
> +++ b/bin/varnishd/cache/cache_vrt_var.c
> @@ -576,12 +576,24 @@ VRT_r_req_##nm(VRT_CTX) \
> return (ctx->req->elem); \
> }
>
> +#define REQ_VAR_U(nm, elem, val) \
> + \
> +VCL_VOID \
> +VRT_u_req_##nm(VRT_CTX) \
> +{ \
> + CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); \
> + CHECK_OBJ_NOTNULL(ctx->req, REQ_MAGIC); \
> + ctx->req->elem = val; \
> +}
> +
> REQ_VAR_R(backend_hint, director_hint, VCL_BACKEND)
>
> REQ_VAR_L(ttl, d_ttl, VCL_DURATION, if (!(arg>0.0)) arg = 0;)
> REQ_VAR_R(ttl, d_ttl, VCL_DURATION)
> +REQ_VAR_U(ttl, d_ttl, -1)
> REQ_VAR_L(grace, d_grace, VCL_DURATION, if (!(arg>0.0)) arg = 0;)
> REQ_VAR_R(grace, d_grace, VCL_DURATION)
> +REQ_VAR_U(grace, d_grace, -1)
>
> VCL_VOID
> VRT_l_req_backend_hint(VRT_CTX, VCL_BACKEND be)
> diff --git a/bin/varnishtest/tests/b00064.vtc b/bin/varnishtest/tests/b00064.vtc
> index 47271831b..73c7d2dff 100644
> --- a/bin/varnishtest/tests/b00064.vtc
> +++ b/bin/varnishtest/tests/b00064.vtc
> @@ -33,6 +33,10 @@ varnish v1 -vcl+backend {
> if (req.http.X-no-grace) {
> set req.grace = 0s;
> }
> + if (req.http.X-but-grace) {
> + unset req.grace;
> + }
> + set req.http.req-grace = req.grace;
> }
> sub vcl_hit {
> set req.http.X-grace = obj.grace;
> @@ -106,12 +110,11 @@ client c3 {
>
> delay .1
>
> -# c4 does not disable grace, and should get the grace object even
> -# though c3 is waiting on the background thread to deliver a new
> -# version.
> +# c4 unsets req.grace after sessing it and should get the grace object even
> +# though c3 is waiting on the background thread to deliver a new version.
>
> client c4 {
> - txreq
> + txreq -hdr "X-no-grace: true" -hdr "X-but-grace: true"
> rxresp
> barrier b1 sync
> expect resp.status == 200
> diff --git a/doc/sphinx/reference/vcl_var.rst b/doc/sphinx/reference/vcl_var.rst
> index aff4dd323..450c64fc7 100644
> --- a/doc/sphinx/reference/vcl_var.rst
> +++ b/doc/sphinx/reference/vcl_var.rst
> @@ -272,12 +272,15 @@ req.grace
>
> Writable from: client
>
> + Unsettable from: client
>
> Upper limit on the object grace.
>
> During lookup the minimum of req.grace and the object's stored
> grace value will be used as the object's grace.
>
> + When reading the unset value, it is returned as -1.
> +
>
> .. _req.hash:
>
> @@ -536,9 +539,12 @@ req.ttl
>
> Writable from: client
>
> + Unsettable from: client
> +
>
> Upper limit on the object age for cache lookups to return hit.
>
> + When reading the unset value, it is returned as -1.
>
> .. _req.url:
>
> _______________________________________________
> varnish-commit mailing list
> varnish-commit at varnish-cache.org
> https://www.varnish-cache.org/lists/mailman/listinfo/varnish-commit
More information about the varnish-commit
mailing list