[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